]> CyberLeo.Net >> Repos - FreeBSD/stable/10.git/commit
MFC r304184:
authorbadger <badger@ccf9f872-aa2e-dd11-9fc8-001c23d0bc1f>
Tue, 30 Aug 2016 13:39:42 +0000 (13:39 +0000)
committerbadger <badger@ccf9f872-aa2e-dd11-9fc8-001c23d0bc1f>
Tue, 30 Aug 2016 13:39:42 +0000 (13:39 +0000)
commiteb48bc113aed0ac3fa7d455ff4346ada79b49d30
treed4465a7c4c3874d05951fedfd70e276a55c359c0
parent5df86ab82310b57feed96b063674f3eb6178f3da
MFC r304184:

sem_post(): wake up the sleeper only after adjusting has_waiters

If the caller of sem_post() wakes up a thread sleeping via sem_wait()
before it clears the has_waiters flag, the caller of sem_wait() has no way of
knowing when it is safe to destroy the semaphore and reuse the memory. This is
because the caller of sem_post() may be interrupted between the wake step and
the clearing of has_waiters. It will then write into the has_waiters flag in
userspace after being preempted for some unknown amount of time.

Approved by: vangyzen (mentor)
Sponsored by: Dell Inc.

git-svn-id: svn://svn.freebsd.org/base/stable/10@305063 ccf9f872-aa2e-dd11-9fc8-001c23d0bc1f
sys/kern/kern_umtx.c