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: [PATCH] * src/web/ejabberd_http_poll.erl: Timeout disconnection were not properly handled after "active once" migration. This is now fixed. SVN Revision: 566 --- ChangeLog | 7 ++++++- src/web/ejabberd_http_poll.erl | 15 +++++++++++---- 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/ChangeLog b/ChangeLog index 4c977bb1f..3305aac55 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2006-05-15 Mickael Remond + + * src/web/ejabberd_http_poll.erl: Timeout disconnection were not + properly handled after "active once" migration. This is now fixed. + 2006-05-07 Mickael Remond * src/mod_configure.erl: Unknown tables or tables from now unused @@ -14,7 +19,7 @@ from the offline message table. This function is only available if offline message queue is stored in Mnesia internal database. The function delete_old_messages is not available in mod_offline_odbc. - + 2006-05-01 Mickael Remond * src/ejabberd_ctl.erl: Unknown tables or tables from now unused 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.