Remove Vagrant::Busy class. It will be making a comeback soon in a newly invented form.
This commit is contained in:
parent
8168ca3e86
commit
bbd0f0e8cb
|
@ -1,79 +0,0 @@
|
|||
module Vagrant
|
||||
def self.busy?
|
||||
Busy.busy?
|
||||
end
|
||||
|
||||
def self.busy(&block)
|
||||
Busy.busy(&block)
|
||||
end
|
||||
|
||||
class Busy
|
||||
extend Vagrant::Util
|
||||
|
||||
@@busy = false
|
||||
@@mutex = Mutex.new
|
||||
@@trap_thread = nil
|
||||
|
||||
class << self
|
||||
def busy?
|
||||
@@busy
|
||||
end
|
||||
|
||||
def busy=(val)
|
||||
@@busy = val
|
||||
end
|
||||
|
||||
def busy(&block)
|
||||
@@mutex.synchronize do
|
||||
begin
|
||||
Signal.trap("INT") { wait_for_not_busy }
|
||||
Busy.busy = true
|
||||
block.call
|
||||
ensure
|
||||
# In the case an exception is thrown, make sure we restore
|
||||
# busy back to some sane state.
|
||||
Busy.busy = false
|
||||
|
||||
# Make sure that the trap thread completes, if it is running
|
||||
trap_thread.join if trap_thread
|
||||
|
||||
# And restore the INT trap to the default
|
||||
Signal.trap("INT", "DEFAULT")
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def wait_for_not_busy(sleeptime=5)
|
||||
if @@trap_thread
|
||||
# logger.info "Exiting vagrant immediately!"
|
||||
Thread.kill(@@trap_thread)
|
||||
abort
|
||||
return # for tests
|
||||
end
|
||||
|
||||
@@trap_thread ||= Thread.new do
|
||||
# Wait while the app is busy
|
||||
loop do
|
||||
break unless busy?
|
||||
# logger.info "Waiting for vagrant to clean itself up..."
|
||||
sleep sleeptime
|
||||
end
|
||||
|
||||
# Exit out of the entire script
|
||||
# logger.info "Exiting vagrant..."
|
||||
exit
|
||||
end
|
||||
end
|
||||
|
||||
# Used for testing
|
||||
def reset_trap_thread!
|
||||
@@trap_thread = nil
|
||||
end
|
||||
|
||||
# Returns the trap thread
|
||||
def trap_thread
|
||||
@@trap_thread
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
|
@ -1,78 +0,0 @@
|
|||
require File.join(File.dirname(__FILE__), '..', 'test_helper')
|
||||
|
||||
class BusyTest < Test::Unit::TestCase
|
||||
setup do
|
||||
@klass = Vagrant::Busy
|
||||
end
|
||||
|
||||
context "waiting for not busy" do
|
||||
setup do
|
||||
@klass.reset_trap_thread!
|
||||
end
|
||||
|
||||
should "run in a thread" do
|
||||
Thread.expects(:new).once.returns(nil)
|
||||
@klass.wait_for_not_busy
|
||||
end
|
||||
|
||||
should "immediately exit on second call" do
|
||||
tid = "foo"
|
||||
Thread.expects(:new).once.returns(tid)
|
||||
@klass.wait_for_not_busy
|
||||
|
||||
Thread.expects(:kill).once.with(tid)
|
||||
@klass.expects(:abort).once
|
||||
@klass.wait_for_not_busy
|
||||
end
|
||||
end
|
||||
|
||||
context "during an action in a busy block" do
|
||||
should "report as busy" do
|
||||
Vagrant.busy do
|
||||
# Inside the block Vagrant.busy? should be true
|
||||
assert Vagrant.busy?
|
||||
end
|
||||
|
||||
#After the block finishes Vagrant.busy? should be false
|
||||
assert !Vagrant.busy?
|
||||
end
|
||||
|
||||
should "set busy to false upon exception and reraise the error" do
|
||||
assert_raise Exception do
|
||||
Vagrant.busy do
|
||||
assert Vagrant.busy?
|
||||
raise Exception
|
||||
end
|
||||
end
|
||||
|
||||
assert !Vagrant.busy?
|
||||
end
|
||||
|
||||
should "complete the trap thread even if an exception occurs" do
|
||||
trap_thread = mock("trap_thread")
|
||||
trap_thread.expects(:join).once
|
||||
@klass.stubs(:trap_thread).returns(trap_thread)
|
||||
|
||||
assert_raise Exception do
|
||||
Vagrant.busy do
|
||||
raise Exception
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
should "report busy to the outside world regardless of thread" do
|
||||
Thread.new do
|
||||
Vagrant.busy do
|
||||
assert Vagrant.busy?
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
should "trap INT" do
|
||||
trap_seq = sequence("trap_seq")
|
||||
Signal.expects(:trap).with("INT", anything).once.in_sequence(trap_seq)
|
||||
Signal.expects(:trap).with("INT", "DEFAULT").once.in_sequence(trap_seq)
|
||||
Vagrant.busy do; end
|
||||
end
|
||||
end
|
||||
end
|
Loading…
Reference in New Issue