Method: Garcon::ReadWriteLock#release_write_lock

Defined in:
lib/garcon/task/read_write_lock.rb

#release_write_lockBoolean

Release a previously acquired write lock.

Returns:

  • (Boolean)

    True if the lock is successfully released.



219
220
221
222
223
224
225
226
227
228
229
230
231
# File 'lib/garcon/task/read_write_lock.rb', line 219

def release_write_lock
  while(true)
    c = @counter.value
    if @counter.compare_and_swap(c,c-RUNNING_WRITER)
      @reader_mutex.synchronize { @reader_q.broadcast }
      if waiting_writers(c) > 0
        @writer_mutex.synchronize { @writer_q.signal }
      end
      break
    end
  end
  true
end