diff options
author | Andrew Majorov <[email protected]> | 2012-11-01 19:49:24 +0400 |
---|---|---|
committer | Andrew Majorov <[email protected]> | 2012-12-21 16:18:15 +0400 |
commit | 0dd0f5149daaea84ec858a40a5673c04202f64fd (patch) | |
tree | 8cd24f268be8cc7c3247537104622963983c61ff | |
parent | 8dad1451dd6e41f30741ac7554da238aa63c163a (diff) | |
download | ranch-0dd0f5149daaea84ec858a40a5673c04202f64fd.tar.gz ranch-0dd0f5149daaea84ec858a40a5673c04202f64fd.tar.bz2 ranch-0dd0f5149daaea84ec858a40a5673c04202f64fd.zip |
Fix for cases when listener dies before acceptors
-rw-r--r-- | src/ranch_server.erl | 9 |
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). |