summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--etc/couchdb/local_dev.ini40
-rw-r--r--src/couchdb/couch_file.erl8
-rw-r--r--src/couchdb/couch_server.erl2
-rw-r--r--src/couchdb/couch_view_group.erl18
4 files changed, 22 insertions, 46 deletions
diff --git a/etc/couchdb/local_dev.ini b/etc/couchdb/local_dev.ini
index d1682d39..2d26b11f 100644
--- a/etc/couchdb/local_dev.ini
+++ b/etc/couchdb/local_dev.ini
@@ -17,43 +17,3 @@ level = error
[update_notification]
;unique notifier name=/full/path/to/exe -with "cmd line arg"
-
-
-[test]
-foo = bar
-
-[test]
-foo = bar
-
-[test]
-foo = bar
-
-[test]
-foo = bar
-
-[test]
-foo = bar
-
-[test]
-foo = bar
-
-[test]
-foo = bar
-
-[test]
-foo = bar
-
-[test]
-foo = bar
-
-[test]
-foo = bar
-
-[test]
-foo = bar
-
-[test]
-foo = bar
-
-[test]
-foo = bar
diff --git a/src/couchdb/couch_file.erl b/src/couchdb/couch_file.erl
index 4ed9dc05..06156324 100644
--- a/src/couchdb/couch_file.erl
+++ b/src/couchdb/couch_file.erl
@@ -40,7 +40,11 @@ open(Filepath, Options) ->
ignore ->
% get the error
receive
- {Ref, Error} ->
+ {Ref, Pid, Error} ->
+ case process_info(self(), trap_exit) of
+ {trap_exit, true} -> receive {'EXIT', Pid, _} -> ok end;
+ {trap_exit, false} -> ok
+ end,
Error
end;
Error ->
@@ -276,7 +280,7 @@ extract_header(Prefix, Bin) ->
init_status_error(ReturnPid, Ref, Error) ->
- ReturnPid ! {Ref, Error},
+ ReturnPid ! {Ref, self(), Error},
ignore.
% server functions
diff --git a/src/couchdb/couch_server.erl b/src/couchdb/couch_server.erl
index fd185bc8..2a2f51e2 100644
--- a/src/couchdb/couch_server.erl
+++ b/src/couchdb/couch_server.erl
@@ -309,8 +309,10 @@ code_change(_OldVsn, State, _Extra) ->
handle_info({'EXIT', Pid, _Reason}, #server{current_dbs_open=DbsOpen}=Server) ->
[{Pid, DbName}] = ets:lookup(couch_dbs_by_pid, Pid),
+ [{DbName, {Pid, LruTime}}] = ets:lookup(couch_dbs_by_name, DbName),
true = ets:delete(couch_dbs_by_pid, Pid),
true = ets:delete(couch_dbs_by_name, DbName),
+ true = ets:delete(couch_dbs_by_lru, LruTime),
{noreply, Server#server{current_dbs_open=DbsOpen-1}};
handle_info(Info, _Server) ->
exit({unknown_message, Info}).
diff --git a/src/couchdb/couch_view_group.erl b/src/couchdb/couch_view_group.erl
index cbbac92a..84c60428 100644
--- a/src/couchdb/couch_view_group.erl
+++ b/src/couchdb/couch_view_group.erl
@@ -47,9 +47,19 @@ request_group(Pid, Seq) ->
start_link(InitArgs) ->
case gen_server:start_link(couch_view_group,
{InitArgs, self(), Ref = make_ref()}, []) of
- {ok, Pid} -> {ok, Pid};
- ignore -> receive {Ref, Error} -> Error end;
- Error -> Error
+ {ok, Pid} ->
+ {ok, Pid};
+ ignore ->
+ receive
+ {Ref, Pid, Error} ->
+ case process_info(self(), trap_exit) of
+ {trap_exit, true} -> receive {'EXIT', Pid, _} -> ok end;
+ {trap_exit, false} -> ok
+ end,
+ Error
+ end;
+ Error ->
+ Error
end.
% init differentiates between temp and design_doc views. It creates a closure
@@ -67,7 +77,7 @@ init({InitArgs, ReturnPid, Ref}) ->
updater_pid = Pid,
group=Group}};
Error ->
- ReturnPid ! {Ref, Error},
+ ReturnPid ! {Ref, self(), Error},
ignore
end.