tech-kern archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: How to wait on cv_timedwait() correctly



> cv_signal() unblocks only a single thread.  The implementation is in kern/kern_condvar.c, and it’s very clear and obvious how it works.  I assume what you’re referring to is the warning about spurious wakes, which is in the description if cv_wait(), and is a completely separate issue.

Just tested this again with the port system (not the semaphore system)
because I have test programs there which suit better for this purpose.

https://github.com/stephanwib/src/blob/trunk/sys/kern/uipc_port.c

Both systems work pretty much the same in this regard.

I am sorry to say that but I am still seeing this behaviour with both
the ticks to wait being zero (= wait forever case) or greater zero
(timeout case).

I added a printf reporting the status:

printf("port write wakeup. port: %d, error code: %d, waiters: %d\n",
id, error, port->kp_waiters);

All threads wake up reporting error code 0 and the same amount of
waiting threads :-/

The only thing left to mention is that I am working on a 2 years old
snapshot of the source as syncing to upstream does not seem to be
easy.


Stephan


Home | Main Index | Thread Index | Old Index