Fix ConditionVariable#signal to only post if semaphore has waiters
This fixes a bug where calls to #signal would end up "over-posting" the semaphore, causing subsequent waits to return immediately until the semaphore value is back down to zero.
This commit is contained in:
1 parent
dddf0be4ef
commit
4518e6fdad
2 files changed
+17
-1
No files matched your search
@@ -63,5 +63,19 @@ module ProcessShared
|
||||
(Time.now.to_f - start).must be_gte(0.1)
|
||||
}
|
||||
end
|
||||
|
||||
it 'correctly handles #signal when no waiters' do
|
||||
mutex = Mutex.new
|
||||
cond = ConditionVariable.new
|
||||
|
||||
# fix for bug: #wait not waiting after unmatched call to #signal
|
||||
cond.signal
|
||||
|
||||
mutex.synchronize {
|
||||
start = Time.now.to_f
|
||||
cond.wait(mutex, 0.1)
|
||||
(Time.now.to_f - start).must be_gte(0.1)
|
||||
}
|
||||
end
|
||||
end
|
||||
end
|
||||
Reference in new issue
Block a user