Hyperactive g_event thread

Jaakko Heinonen jh at FreeBSD.org
Fri Oct 22 18:46:52 UTC 2010


On 2010-10-22, Ivan Voras wrote:
> Isn't this sequence:
> 
> -	mtx_unlock(&g_eventlock);
>  	wakeup(&g_wait_event);
> +	mtx_unlock(&g_eventlock);
> 
> too racy? It is possible, especially if something changes in scheduling
> or the wakeup() implementation, and on single-CPU machines, that the
> woken thread could run and then encounter the lock not yet released,
> leading to more lock waiting.

As far as I have understood this is the normal way to protect against
losing wakeups, no? wakeup(9) marks the sleeping process runnable and
removes it from the sleep queue but doesn't force a context switch
immediately. Thus increased lock contention would happen only if a
context switch happens between wakeup() and mtx_unlock(). I don't see
this a problem but please correct me if I am wrong.

-- 
Jaakko


More information about the freebsd-geom mailing list