Date: Tue, 30 Nov 2004 12:02:53 +0000 (UTC) From: David Xu <davidxu@FreeBSD.org> To: src-committers@FreeBSD.org, cvs-src@FreeBSD.org, cvs-all@FreeBSD.org Subject: cvs commit: src/sys/kern kern_umtx.c Message-ID: <200411301202.iAUC2rAd085211@repoman.freebsd.org>
next in thread | raw e-mail | index | archive | help
davidxu 2004-11-30 12:02:53 UTC FreeBSD src repository Modified files: sys/kern kern_umtx.c Log: 1. use per-chain mutex instead of global mutex to reduce lock collision. 2. Fix two race conditions. One is between _umtx_unlock and signal, also a thread was marked TDF_UMTXWAKEUP by _umtx_unlock, it is possible a signal delivered to the thread will cause msleep returns EINTR, and the thread breaks out of loop, this causes umtx ownership is not transfered to the thread. Another is in _umtx_unlock itself, when the function sets the umtx to UMTX_UNOWNED state, a new thread can come in and lock the umtx, also the function tries to set contested bit flag, but it will fail. Although the function will wake a blocked thread, if that thread breaks out of loop by signal, no contested bit will be set. Revision Changes Path 1.17 +212 -115 src/sys/kern/kern_umtx.c
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200411301202.iAUC2rAd085211>