Ensure ev abandon_watcher is stopped before reuse.

This commit is contained in:
Patrick J Cherry
2018-12-07 21:47:14 +00:00
parent 416d8bde96
commit a4d641b215
2 changed files with 27 additions and 0 deletions

View File

@@ -671,6 +671,7 @@ static void mirror_abandon_cb(struct ev_loop *loop, ev_io * w, int revents)
debug("Abandon message received");
mirror_set_state(ctrl->mirror, MS_ABANDONED);
self_pipe_signal_clear(ctrl->mirror->abandon_signal);
ev_io_stop(loop, &ctrl->abandon_watcher);
ev_break(loop, EVBREAK_ONE);
return;
}

View File

@@ -86,6 +86,14 @@ class TestWriteDuringMigration < Test::Unit::TestCase
end
end
def stop_mirror
UNIXSocket.open(@source_sock) do |sock|
sock.write("break\x0A\x0A")
sock.flush
sock.readline
end
end
def wait_for_quit
Timeout.timeout(10) do
Process.waitpid2(@dst_proc)
@@ -195,4 +203,22 @@ class TestWriteDuringMigration < Test::Unit::TestCase
end
end
end
def test_mirroring_can_be_restarted
Dir.mktmpdir do |tmpdir|
Dir.chdir(tmpdir) do
make_files
launch_servers
3.times do
start_mirror
stop_mirror
end
start_mirror
wait_for_quit
end
end
end
end