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