Sha256: 08011f3af50d469d726430943af25b577704821109de84e90bf6973962b66252

Contents?: true

Size: 1023 Bytes

Versions: 14

Compression:

Stored size: 1023 Bytes

Contents

require 'fileutils'

class Puppet::Util::Pidlock
	attr_reader :lockfile
	
	def initialize(lockfile)
		@lockfile = lockfile
	end
	
	def locked?
		clear_if_stale
		File.exists? @lockfile
	end
	
	def mine?
		Process.pid == lock_pid
	end

	def anonymous?
		return false unless File.exists?(@lockfile)
		File.read(@lockfile) == ""
	end
	
	def lock(opts = {})
		opts = {:anonymous => false}.merge(opts)

		if locked?
			mine?
		else
			if opts[:anonymous]
				File.open(@lockfile, 'w') { |fd| true }
			else
				File.open(@lockfile, "w") { |fd| fd.write(Process.pid) }
			end
			true
		end
	end
	
	def unlock(opts = {})
		opts = {:anonymous => false}.merge(opts)

		if mine? or (opts[:anonymous] and anonymous?)
			File.unlink(@lockfile)
			true
		else
			false
		end
	end

	private
	def lock_pid
		if File.exists? @lockfile
			File.read(@lockfile).to_i
		else
			nil
		end
	end

	def clear_if_stale
		return if lock_pid.nil?
		
		begin
			Process.kill(0, lock_pid)
		rescue Errno::ESRCH
			File.unlink(@lockfile)
		end
	end
end

Version data entries

14 entries across 14 versions & 1 rubygems

Version Path
puppet-0.24.9 lib/puppet/util/pidlock.rb
puppet-0.22.4 lib/puppet/util/pidlock.rb
puppet-0.23.0 lib/puppet/util/pidlock.rb
puppet-0.24.0 lib/puppet/util/pidlock.rb
puppet-0.23.1 lib/puppet/util/pidlock.rb
puppet-0.23.2 lib/puppet/util/pidlock.rb
puppet-0.24.4 lib/puppet/util/pidlock.rb
puppet-0.24.1 lib/puppet/util/pidlock.rb
puppet-0.24.2 lib/puppet/util/pidlock.rb
puppet-0.24.3 lib/puppet/util/pidlock.rb
puppet-0.24.5 lib/puppet/util/pidlock.rb
puppet-0.24.7 lib/puppet/util/pidlock.rb
puppet-0.24.6 lib/puppet/util/pidlock.rb
puppet-0.24.8 lib/puppet/util/pidlock.rb