diff options
author | Adam Kocoloski <kocolosk@apache.org> | 2012-12-02 09:04:48 -0500 |
---|---|---|
committer | Adam Kocoloski <kocolosk@apache.org> | 2012-12-05 15:35:02 -0800 |
commit | d977eb7ec52bc13dca7b4f530cb51f42df0f6224 (patch) | |
tree | 8cada120ed914c953d1caab9553428a5bef37676 | |
parent | c20240cb455c7ecb67924582b433943b435cb106 (diff) | |
download | couchdb-d977eb7ec52bc13dca7b4f530cb51f42df0f6224.tar.gz |
Close view files cleanly on DB create/delete
The shutdown_sync was actually interfering with a clean shutdown
initiated by the index processes themselves when they received a 'DOWN'
message from their monitoring of the DB process. The explicit 'delete'
cast message in this patch is very probably redundant, but it makes the
intent clear. The important bit is to let the index process terminate
*and* get confirmation of the termination before attempting to nuke the
directory.
COUCHDB-1364
-rw-r--r-- | src/couch_index/src/couch_index_server.erl | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/src/couch_index/src/couch_index_server.erl b/src/couch_index/src/couch_index_server.erl index 48fa8e42e..bc1fce77c 100644 --- a/src/couch_index/src/couch_index_server.erl +++ b/src/couch_index/src/couch_index_server.erl @@ -160,7 +160,9 @@ reset_indexes(DbName, Root) -> % shutdown all the updaters and clear the files, the db got changed Fun = fun({_, {DDocId, Sig}}) -> [{_, Pid}] = ets:lookup(?BY_SIG, {DbName, Sig}), - couch_util:shutdown_sync(Pid), + MRef = erlang:monitor(process, Pid), + gen_server:cast(Pid, delete), + receive {'DOWN', MRef, _, _, _} -> ok end, rem_from_ets(DbName, Sig, DDocId, Pid) end, lists:foreach(Fun, ets:lookup(?BY_DB, DbName)), |