diff options
author | Matthias Radestock <matthias@rabbitmq.com> | 2010-08-19 12:20:18 +0100 |
---|---|---|
committer | Matthias Radestock <matthias@rabbitmq.com> | 2010-08-19 12:20:18 +0100 |
commit | 2623dc7cd982614b754f0398c29010c2558824c5 (patch) | |
tree | 67d065428c213ae8f7c1618271bc39b57a417eea | |
parent | 9e97745c5fd8f19a7bfa66a99d3506eafeb218e4 (diff) | |
download | rabbitmq-server-2623dc7cd982614b754f0398c29010c2558824c5.tar.gz |
refactor
-rw-r--r-- | src/tcp_acceptor.erl | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/src/tcp_acceptor.erl b/src/tcp_acceptor.erl index 0025a048..c9809ace 100644 --- a/src/tcp_acceptor.erl +++ b/src/tcp_acceptor.erl @@ -55,6 +55,7 @@ handle_call(_Request, _From, State) -> {noreply, State}. handle_cast(accept, State) -> + ok = file_handle_cache:obtain(), accept(State); handle_cast(_Msg, State) -> @@ -83,21 +84,23 @@ handle_info({inet_async, LSock, Ref, {ok, Sock}}, %% is drained. gen_event:which_handlers(error_logger), %% handle - file_handle_cache:transfer(apply(M, F, A ++ [Sock])) + file_handle_cache:transfer(apply(M, F, A ++ [Sock])), + ok = file_handle_cache:obtain() catch {inet_error, Reason} -> gen_tcp:close(Sock), - file_handle_cache:transfer(spawn(fun () -> ok end)), error_logger:error_msg("unable to accept TCP connection: ~p~n", [Reason]) end, %% accept more accept(State); + handle_info({inet_async, LSock, Ref, {error, closed}}, State=#state{sock=LSock, ref=Ref}) -> %% It would be wrong to attempt to restart the acceptor when we %% know this will fail. {stop, normal, State}; + handle_info(_Info, State) -> {noreply, State}. @@ -112,7 +115,6 @@ code_change(_OldVsn, State, _Extra) -> inet_op(F) -> rabbit_misc:throw_on_error(inet_error, F). accept(State = #state{sock=LSock}) -> - ok = file_handle_cache:obtain(), case prim_inet:async_accept(LSock, -1) of {ok, Ref} -> {noreply, State#state{ref=Ref}}; Error -> {stop, {cannot_accept, Error}, State} |