From 21b912a375ed6d53f8e93bde83bff7c8e468c97b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micka=C3=ABl=20R=C3=A9mond?= Date: Mon, 15 May 2006 15:45:52 +0000 Subject: * src/web/ejabberd_http_poll.erl: Timeout disconnection were not properly handled after "active once" migration. This is now fixed. SVN Revision: 566 --- src/web/ejabberd_http_poll.erl | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) (limited to 'src') diff --git a/src/web/ejabberd_http_poll.erl b/src/web/ejabberd_http_poll.erl index 09d4555f8..b16735a55 100644 --- a/src/web/ejabberd_http_poll.erl +++ b/src/web/ejabberd_http_poll.erl @@ -37,6 +37,7 @@ output = "", input = "", waiting_input = false, + last_receiver, timer}). %-define(DBGFSM, true). @@ -205,7 +206,9 @@ handle_sync_event(activate, From, StateName, StateData) -> Input -> From ! {tcp, {http_poll, self()}, list_to_binary(Input)}, {reply, ok, StateName, StateData#state{input = "", - waiting_input = false}} + waiting_input = false, + last_receiver = From + }} end; handle_sync_event(stop, From, StateName, StateData) -> @@ -243,6 +246,7 @@ handle_sync_event({http_put, Key, NewKey, Packet}, Reply = ok, {reply, Reply, StateName, StateData#state{waiting_input = false, + last_receiver = Receiver, key = NewKey, timer = Timer}} end; @@ -287,9 +291,12 @@ terminate(Reason, StateName, StateData) -> end), case StateData#state.waiting_input of false -> - ok; - Receiver -> - gen_fsm:reply(Receiver, {error, closed}) + case StateData#state.last_receiver of + undefined -> ok; + Receiver -> Receiver ! {tcp_closed, {http_poll, self()}} + end; + {Receiver, _Tag} -> + Receiver ! {tcp_closed, {http_poll, self()}} end, ok. -- cgit v1.2.3