module Mongoid::Lock

Public Class Methods

included(base) click to toggle source
# File lib/mongoid/lock.rb, line 14
def self.included(base)
  base.class_eval do
    include Mongoid::Semaphore
    default_sema_count 1
    field :used_by, :type => String, :default => nil
  end
end

Public Instance Methods

lock_acquire() click to toggle source
# File lib/mongoid/lock/synch_methods.rb, line 10
def lock_acquire
  self.sema_down
  if (self.sema_ready?)
    self.set(:used_by, "#{Socket.hostname}:#{Process.pid}")
  else
    self.sema_up
    raise Mongoid::Semaphore::UnsynchronizedAccess.new(self.sema_count, "Lock in Use! (#{self.used_by})")
  end
end
lock_release() click to toggle source
# File lib/mongoid/lock/synch_methods.rb, line 20
def lock_release
  if (self.used_by == "#{Socket.hostname}:#{Process.pid}")
    self.sema_up
    self.set(:used_by, nil)
  end
end
reset_lock!() click to toggle source
# File lib/mongoid/lock/synch_methods.rb, line 6
def reset_lock!
  self.update_attributes!({:sema_count => __semaphore_initial_count, :used_by => nil})
end
synchronized(&block) click to toggle source
# File lib/mongoid/lock/synch_methods.rb, line 28
def synchronized(&block)
  self.lock_acquire
  begin
    block.call()
  ensure
    self.lock_release
  end
end
try_synchronized(&try_block) click to toggle source
# File lib/mongoid/lock/synch_methods.rb, line 37
def try_synchronized(&try_block)
  return false unless self.sema_ready?
  begin
    self.synchronized do
      try_block.call()
    end
    return true
  rescue Mongoid::Semaphore::UnsynchronizedAccess => ua
    return false
  end
end
used_by() click to toggle source

> Volatile Access, Reload to Ensure state

Calls superclass method
# File lib/mongoid/lock.rb, line 8
def used_by
  self.save
  self.reload
  return super
end