class Concurrent::Synchronization::RbxLockableObject

def ns_wait(timeout = nil)

def ns_wait(timeout = nil)
  wchan = Rubinius::Channel.new
  begin
    @__Waiters__.push wchan
    Rubinius.unlock(self)
    signaled = wchan.receive_timeout timeout
  ensure
    Rubinius.lock(self)
    if !signaled && !@__Waiters__.delete(wchan)
      # we timed out, but got signaled afterwards,
      # so pass that signal on to the next waiter
      @__Waiters__.shift << true unless @__Waiters__.empty?
    end
  end
  self
end