class Clicker::LaunchLock
Attributes
lock_file_path[R]
Public Class Methods
new(program_name)
click to toggle source
# File lib/clicker/launch_lock.rb, line 8 def initialize(program_name) @config_dir = "#{ENV['HOME']}/.config/#{program_name}" @lock_file_path = "#{@config_dir}/#{program_name}.lock" FileUtils.mkdir_p(@config_dir) end
Public Instance Methods
locked?()
click to toggle source
# File lib/clicker/launch_lock.rb, line 29 def locked? File.open(@lock_file_path, 'r') do |f| rv = f.flock(File::LOCK_EX | File::LOCK_NB) case rv when 0 return false when false return true end end rescue Errno::ENOENT return false end
owner()
click to toggle source
# File lib/clicker/launch_lock.rb, line 43 def owner File.open(@lock_file_path) do |f| success = f.flock(File::LOCK_EX | File::LOCK_NB) if success return nil # owner is not alive... else pid = f.gets.to_i return pid end end rescue Errno::ENOENT return nil end
try_lock() { || ... }
click to toggle source
# File lib/clicker/launch_lock.rb, line 14 def try_lock File.open(@lock_file_path, 'r+') do |f| success = f.flock(File::LOCK_EX | File::LOCK_NB) if success f.puts Process.pid f.flush f.truncate(f.pos) yield return true else return false end end end