# File lib/puppet/external/lock.rb, line 43
43:   def lock_shared
44:     if Thread.list.size == 1
45:       flock(LOCK_SH)
46:     else
47:       # ugly hack because waiting for a lock in a Ruby thread blocks the
48:       # process
49:       period = 0.001
50:       until flock(LOCK_SH|LOCK_NB)
51:         sleep period
52:         period *= 2 if period < 1
53:       end
54:     end
55: 
56:     yield self
57:   ensure
58:     Thread.exclusive {flock(LOCK_UN) if $reader_count[self.stat.ino] == 1}
59:     ## for solaris, no need to unlock here--closing does it
60:     ## but this has no effect on the bug
61:   end