aboutsummaryrefslogtreecommitdiffstats
path: root/src/ranch_server.erl
diff options
context:
space:
mode:
authorAndrew Majorov <[email protected]>2012-11-01 19:49:24 +0400
committerAndrew Majorov <[email protected]>2012-12-21 16:18:15 +0400
commit0dd0f5149daaea84ec858a40a5673c04202f64fd (patch)
tree8cd24f268be8cc7c3247537104622963983c61ff /src/ranch_server.erl
parent8dad1451dd6e41f30741ac7554da238aa63c163a (diff)
downloadranch-0dd0f5149daaea84ec858a40a5673c04202f64fd.tar.gz
ranch-0dd0f5149daaea84ec858a40a5673c04202f64fd.tar.bz2
ranch-0dd0f5149daaea84ec858a40a5673c04202f64fd.zip
Fix for cases when listener dies before acceptors
Diffstat (limited to 'src/ranch_server.erl')
-rw-r--r--src/ranch_server.erl9
1 files changed, 7 insertions, 2 deletions
diff --git a/src/ranch_server.erl b/src/ranch_server.erl
index 078626f..a17e103 100644
--- a/src/ranch_server.erl
+++ b/src/ranch_server.erl
@@ -160,6 +160,11 @@ remove_process(Key = {listener, Ref}, MonitorRef, Pid, Monitors) ->
true = ets:delete(?TAB, {connections, Pid}),
lists:keydelete({MonitorRef, Pid}, 1, Monitors);
remove_process(Key = {acceptors, _}, MonitorRef, Pid, Monitors) ->
- Acceptors = ets:lookup_element(?TAB, Key, 2),
- true = ets:insert(?TAB, {Key, lists:delete(Pid, Acceptors)}),
+ try
+ Acceptors = ets:lookup_element(?TAB, Key, 2),
+ true = ets:update_element(?TAB, Key, {2, lists:delete(Pid, Acceptors)})
+ catch
+ error:_ ->
+ ok
+ end,
lists:keydelete({MonitorRef, Pid}, 1, Monitors).