lib/mongoid/lock/synch_methods.rb in mongoid-lock-0.0.7 vs lib/mongoid/lock/synch_methods.rb in mongoid-lock-0.0.8

- old
+ new

@@ -6,20 +6,36 @@ def local_mutex @__mutex ||= Mutex.new end def reset_lock! - self.update_attributes(:lock_used_by => nil, :lock_acquired_at => nil) + self.update_attributes(:lock_used_by => nil, :lock_acquired_at => nil, :lock_waiter => nil) end def lock_acquire + self.lock_acquire_begin local = "#{Socket.gethostname}:#{Process.pid}" ident = self.lock_used_by + wait = self.lock_waiter if (ident and ident != local) raise Mongoid::Lock::UnsynchronizedAccess.new(ident) + elsif (wait != local) + raise Mongoid::Lock::UnsynchronizedAccess.new(wait) else self.set(:lock_used_by, local) - self.update_attributes(:lock_used_by => local, :lock_acquired_at => Time.now) + self.set(:lock_acquired_at, Time.now) + self.set(:lock_waiter, nil) + end + end + + def lock_acquire_begin + local = "#{Socket.gethostname}:#{Process.pid}" + ident = self.lock_used_by + wait = self.lock_waiter + if (ident or wait) + raise Mongoid::Lock::UnsynchronizedAccess.new(ident) + else + self.set(:lock_waiter, local) end end def lock_release local = "#{Socket.gethostname}:#{Process.pid}" \ No newline at end of file