Updated Branches: refs/heads/1364-windows_indexing_hang d4981a68e -> 370e7decd (forced update)
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 Project: http://git-wip-us.apache.org/repos/asf/couchdb/repo Commit: http://git-wip-us.apache.org/repos/asf/couchdb/commit/370e7dec Tree: http://git-wip-us.apache.org/repos/asf/couchdb/tree/370e7dec Diff: http://git-wip-us.apache.org/repos/asf/couchdb/diff/370e7dec Branch: refs/heads/1364-windows_indexing_hang Commit: 370e7decdb4b715a50b61d6eed797faa83c29cca Parents: fb670f5 Author: Adam Kocoloski <kocol...@apache.org> Authored: Sun Dec 2 09:04:48 2012 -0500 Committer: Adam Kocoloski <kocol...@apache.org> Committed: Sun Dec 2 09:04:48 2012 -0500 ---------------------------------------------------------------------- src/couch_index/src/couch_index_server.erl | 4 +++- 1 files changed, 3 insertions(+), 1 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/couchdb/blob/370e7dec/src/couch_index/src/couch_index_server.erl ---------------------------------------------------------------------- diff --git a/src/couch_index/src/couch_index_server.erl b/src/couch_index/src/couch_index_server.erl index 48fa8e4..bc1fce7 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)),