Sha256: 0b17dc9feb956632b1298a665bdf108cb3aaef924dee52b10e83595cd92f41e3

Contents?: true

Size: 1.3 KB

Versions: 6

Compression:

Stored size: 1.3 KB

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

6 entries across 6 versions & 1 rubygems

Version Path
puppet-0.25.5 lib/puppet/util/pidlock.rb
puppet-0.25.4 lib/puppet/util/pidlock.rb
puppet-0.25.3 lib/puppet/util/pidlock.rb
puppet-0.25.2 lib/puppet/util/pidlock.rb
puppet-0.25.1 lib/puppet/util/pidlock.rb
puppet-0.25.0 lib/puppet/util/pidlock.rb