Merge pull request #8 from ms-ati/fix-cond-var-signal-when-no-waiters
Fix ConditionVariable#signal to only post if semaphore has waiters
This commit is contained in:
commit
1b1fdbe287
|
@ -16,7 +16,9 @@ module ProcessShared
|
||||||
end
|
end
|
||||||
|
|
||||||
def signal
|
def signal
|
||||||
@sem.post
|
@internal.synchronize do
|
||||||
|
@sem.post unless @waiting.read_int.zero?
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def wait(mutex, timeout = nil)
|
def wait(mutex, timeout = nil)
|
||||||
|
|
|
@ -63,5 +63,19 @@ module ProcessShared
|
||||||
(Time.now.to_f - start).must be_gte(0.1)
|
(Time.now.to_f - start).must be_gte(0.1)
|
||||||
}
|
}
|
||||||
end
|
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
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in New Issue