lib/redis_lock.rb in redis_lock-0.3.0 vs lib/redis_lock.rb in redis_lock-0.3.1
- old
+ new
@@ -56,13 +56,11 @@
set_opts = args[:set_opts] || {}
while locked?
sleep (args[:wait] || 3)
end
set(ttl, set_opts)
- out = _perform(&block)
- unlock!
- out
+ _semaphore_perform(&block)
end
def if_open(args = {}, &block)
return if locked?
_perform(&block)
@@ -103,9 +101,19 @@
private
def self.setup_instance(key, args)
inst_opts = { redis: args.delete(:redis) }.reject{ |_, v| v.nil? }
new(key, inst_opts)
+ end
+
+ def _semaphore_perform(&block)
+ yield self
+ rescue => e
+ config.logger.error "[#{self.class}] key: `#{key}` error:"
+ config.logger.error e
+ raise e
+ ensure
+ unlock!
end
def _perform(&block)
yield self
rescue => e