# File lib/puppet/external/lock.rb, line 21
21:   def lock_exclusive
22:     if Thread.list.size == 1
23:       flock(LOCK_EX)
24:     else
25:       # ugly hack because waiting for a lock in a Ruby thread blocks the
26:       # process
27:       period = 0.001
28:       until flock(LOCK_EX|LOCK_NB)
29:         sleep period
30:         period *= 2 if period < 1
31:       end
32:     end
33: 
34:     yield self
35:   ensure
36:     flush
37:     flock(LOCK_UN)
38:   end