From 0dd0f5149daaea84ec858a40a5673c04202f64fd Mon Sep 17 00:00:00 2001 From: Andrew Majorov Date: Thu, 1 Nov 2012 19:49:24 +0400 Subject: Fix for cases when listener dies before acceptors --- src/ranch_server.erl | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) (limited to 'src/ranch_server.erl') 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). -- cgit v1.2.3