Class: Vagrant::Util::SafeChdir
- Inherits:
-
Object
- Object
- Vagrant::Util::SafeChdir
- Defined in:
- lib/vagrant/util/safe_chdir.rb
Constant Summary collapse
- @@chdir_lock =
Mutex.new
Class Method Summary collapse
-
.safe_chdir(dir) ⇒ Object
Safely changes directory of this process by putting a lock around it so that it is thread safe.
Class Method Details
.safe_chdir(dir) ⇒ Object
Safely changes directory of this process by putting a lock around it so that it is thread safe. This will yield a block and when the block exits it changes back to the original directory.
16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
# File 'lib/vagrant/util/safe_chdir.rb', line 16 def self.safe_chdir(dir) lock = @@chdir_lock begin @@chdir_lock.synchronize {} rescue ThreadError # If we already hold the lock, just create a new lock so we # definitely don't block and don't get an error. lock = Mutex.new end lock.synchronize do Dir.chdir(dir) do return yield end end end |