blob: fae8134a5edd1380c2c746d8f218a68fa90e7b00 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
|
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
|