Avoid possible race in ConditionVariable where new processes begin waiting while #broadcast is running.

This commit is contained in:
Patrick Mahoney 2011-12-20 22:12:25 -06:00
parent cc663a8d7f
commit edc927709a
1 changed files with 3 additions and 7 deletions

View File

@ -10,7 +10,9 @@ module ProcessShared
end
def broadcast
waiting.times { @sem.post }
@internal.synchronize do
@waiting.read_int.times { @sem.post }
end
end
def signal
@ -38,12 +40,6 @@ module ProcessShared
private
def waiting
@internal.synchronize do
@waiting.read_int
end
end
def inc_waiting(val = 1)
@internal.synchronize do
@waiting.write_int(@waiting.read_int + val)