From 894d8f2cc9c8ebaf6ff025de393b3d95be4bd548 Mon Sep 17 00:00:00 2001 From: Filipe David Borba Manana Date: Wed, 24 Nov 2010 16:06:12 +0000 Subject: Merged revision 1038660 from trunk: Replicator DB: fix a rare gen_server death case. Happened when the rep_db_created message is received before the changes loop dies. Also simplified a bit the handling of subprocesses exits. git-svn-id: https://svn.apache.org/repos/asf/couchdb/branches/1.1.x@1038662 13f79535-47bb-0310-9956-ffa450edef68 --- src/couchdb/couch_rep_db_listener.erl | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/couchdb/couch_rep_db_listener.erl b/src/couchdb/couch_rep_db_listener.erl index c33d2c9a..bd47ac8f 100644 --- a/src/couchdb/couch_rep_db_listener.erl +++ b/src/couchdb/couch_rep_db_listener.erl @@ -63,12 +63,15 @@ handle_cast(rep_db_changed, State) -> changes_feed_loop = Loop, changes_queue = Queue } = State, - exit(Loop, rep_db_changed), + unlink(Loop), + catch exit(Loop, rep_db_changed), couch_work_queue:queue(Queue, stop_all_replications), {ok, NewLoop} = changes_feed_loop(Queue), {noreply, State#state{changes_feed_loop = NewLoop}}; -handle_cast(rep_db_created, #state{changes_feed_loop = nil} = State) -> +handle_cast(rep_db_created, #state{changes_feed_loop = Loop} = State) -> + unlink(Loop), + catch exit(Loop, rep_db_changed), {ok, NewLoop} = changes_feed_loop(State#state.changes_queue), {noreply, State#state{changes_feed_loop = NewLoop}}; @@ -86,9 +89,6 @@ handle_info({'EXIT', From, Reason}, #state{db_notifier = From} = State) -> ?LOG_ERROR("Database update notifier died. Reason: ~p", [Reason]), {stop, {db_update_notifier_died, Reason}, State}; -handle_info({'EXIT', _OldChangesLoop, rep_db_changed}, State) -> - {noreply, State}; - handle_info({'EXIT', From, Reason}, #state{changes_processor = From} = State) -> ?LOG_ERROR("Replicator DB changes processor died. Reason: ~p", [Reason]), {stop, {rep_db_changes_processor_died, Reason}, State}. -- cgit v1.2.3