From f2802b90d02f41079dd7db4e14dbe9b6fea91255 Mon Sep 17 00:00:00 2001
From: Kenneth Lundin <kenneth@erlang.org>
Date: Wed, 28 Mar 2012 13:28:40 +0200
Subject: replace 5 sec timeout (too short) with monitor in asn1_db requests

This bug was introduced as part of the parallelization of test suites and is notpart of any released version
---
 lib/asn1/src/asn1_db.erl | 16 ++++++++++++----
 1 file changed, 12 insertions(+), 4 deletions(-)

(limited to 'lib/asn1')

diff --git a/lib/asn1/src/asn1_db.erl b/lib/asn1/src/asn1_db.erl
index 0862ef6e02..843fc66c9c 100644
--- a/lib/asn1/src/asn1_db.erl
+++ b/lib/asn1/src/asn1_db.erl
@@ -48,11 +48,19 @@ dbstop()                   -> Resp = req(stop), erase(?MODULE), Resp.
 
 %% Internal functions
 req(Request) ->
-    get(?MODULE) ! {self(), Request},
-    receive {?MODULE, Reply} -> Reply after 5000 -> exit(db_timeout) end.
+    DbPid = get(?MODULE),
+    Ref = erlang:monitor(process,DbPid),
+    get(?MODULE) ! {{Ref, self()}, Request},
+    receive 
+	{{Ref,?MODULE}, Reply} ->
+	    erlang:demonitor(Ref,[flush]),
+	    Reply; 
+	{'DOWN',Ref,_,_,Info} -> 
+	    exit({db_error,Info}) 
+    end.
 
-reply(From, Response) ->
-    From ! {?MODULE, Response}.
+reply({Ref,From}, Response) ->
+    From ! {{Ref,?MODULE}, Response}.
 
 init(Parent, Includes) ->
     MRef = erlang:monitor(process, Parent),
-- 
cgit v1.2.3