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