summaryrefslogtreecommitdiffstats
path: root/lib/puppet/external/lock.rb
diff options
context:
space:
mode:
Diffstat (limited to 'lib/puppet/external/lock.rb')
-rw-r--r--lib/puppet/external/lock.rb82
1 files changed, 41 insertions, 41 deletions
diff --git a/lib/puppet/external/lock.rb b/lib/puppet/external/lock.rb
index 785ecd637..024fedf3d 100644
--- a/lib/puppet/external/lock.rb
+++ b/lib/puppet/external/lock.rb
@@ -15,49 +15,49 @@ require 'sync'
$reader_count = Hash.new(0)
class File
- # Get an exclusive (i.e., write) lock on the file, and yield to the block.
- # If the lock is not available, wait for it without blocking other ruby
- # threads.
- def lock_exclusive
- if Thread.list.size == 1
- flock(LOCK_EX)
- else
- # ugly hack because waiting for a lock in a Ruby thread blocks the
- # process
- period = 0.001
- until flock(LOCK_EX|LOCK_NB)
- sleep period
- period *= 2 if period < 1
- end
- end
-
- yield self
- ensure
- flush
- flock(LOCK_UN)
+ # Get an exclusive (i.e., write) lock on the file, and yield to the block.
+ # If the lock is not available, wait for it without blocking other ruby
+ # threads.
+ def lock_exclusive
+ if Thread.list.size == 1
+ flock(LOCK_EX)
+ else
+ # ugly hack because waiting for a lock in a Ruby thread blocks the
+ # process
+ period = 0.001
+ until flock(LOCK_EX|LOCK_NB)
+ sleep period
+ period *= 2 if period < 1
+ end
end
- # Get a shared (i.e., read) lock on the file, and yield to the block.
- # If the lock is not available, wait for it without blocking other ruby
- # threads.
- def lock_shared
- if Thread.list.size == 1
- flock(LOCK_SH)
- else
- # ugly hack because waiting for a lock in a Ruby thread blocks the
- # process
- period = 0.001
- until flock(LOCK_SH|LOCK_NB)
- sleep period
- period *= 2 if period < 1
- end
- end
-
- yield self
- ensure
- Thread.exclusive {flock(LOCK_UN) if $reader_count[self.stat.ino] == 1}
- ## for solaris, no need to unlock here--closing does it
- ## but this has no effect on the bug
+ yield self
+ ensure
+ flush
+ flock(LOCK_UN)
+ end
+
+ # Get a shared (i.e., read) lock on the file, and yield to the block.
+ # If the lock is not available, wait for it without blocking other ruby
+ # threads.
+ def lock_shared
+ if Thread.list.size == 1
+ flock(LOCK_SH)
+ else
+ # ugly hack because waiting for a lock in a Ruby thread blocks the
+ # process
+ period = 0.001
+ until flock(LOCK_SH|LOCK_NB)
+ sleep period
+ period *= 2 if period < 1
+ end
end
+
+ yield self
+ ensure
+ Thread.exclusive {flock(LOCK_UN) if $reader_count[self.stat.ino] == 1}
+ ## for solaris, no need to unlock here--closing does it
+ ## but this has no effect on the bug
+ end
end