Hi folks, given there is an object with the following
-an interlock (mutex) -a condvar(9) -a "state" variable which can be set to something like state_deleted and there are waiters on that condvar in cv_timedwait_sig(). The waiters do the following error = cv_timedwait_sig(&port->kp_rdcv, &port->kp_interlock, (mstohz(timeout)); if (error || (port->kp_state == kp_deleted)) { error = (error == EWOULDBLOCK) ? ETIMEDOUT : ENOENT; mutex_exit(&port->kp_interlock); return error; } How can I safely destroy the condvar and interlock mutex? I would propose to -aquire the interlock -set the state to (in this case) kp_deleted -cv_broadcast the condvar -release the interlock If I reaquire the interlock now, can I be sure that all waiters are gone at this point? I would then proceed like this -reaquire the interlock -destroy the condvar -delete the object from the global list (nobody can find it afterwards) -release the interlock -destroy the interlock Thanks and regards, Stephan