From 897bb0950cd1a2ecf6dd42394419efc40ac69460 Mon Sep 17 00:00:00 2001 From: Sebastien Helleu Date: Sun, 23 Feb 2014 13:07:45 +0100 Subject: [PATCH] relay: fix freeze after /upgrade when many disconnected clients still exist The hooks for the WeeChat disconnected clients are not created again after /upgrade (they were removed on client disconnection, so there is no reason to create them again). The hooks like nicklist sync are called often (for example on irc disconnection), which can cause long freeze if many WeeChat disconnected clients exist in relay. --- ChangeLog | 1 + src/plugins/relay/weechat/relay-weechat.c | 9 ++++++++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index cbefb0009..96c42b60a 100644 --- a/ChangeLog +++ b/ChangeLog @@ -48,6 +48,7 @@ http://weechat.org/files/releasenotes/ReleaseNotes-devel.html[release notes] * lua: fix interpreter used after unload of a script * perl: fix context used after unload of a script * python: fix interpreter used after unload of a script +* relay: fix freeze after /upgrade when many disconnected clients still exist * relay: fix NULL pointer when reading buffer lines for irc backlog * scripts: fix crash when a signal is received with type "int" and NULL pointer in signal_data diff --git a/src/plugins/relay/weechat/relay-weechat.c b/src/plugins/relay/weechat/relay-weechat.c index ba3cfbe1c..697e6867f 100644 --- a/src/plugins/relay/weechat/relay-weechat.c +++ b/src/plugins/relay/weechat/relay-weechat.c @@ -260,7 +260,14 @@ relay_weechat_alloc_with_infolist (struct t_relay_client *client, &relay_weechat_free_buffers_nicklist); RELAY_WEECHAT_DATA(client, hook_timer_nicklist) = NULL; - relay_weechat_hook_signals (client); + if (RELAY_CLIENT_HAS_ENDED(client)) + { + RELAY_WEECHAT_DATA(client, hook_signal_buffer) = NULL; + RELAY_WEECHAT_DATA(client, hook_hsignal_nicklist) = NULL; + RELAY_WEECHAT_DATA(client, hook_signal_upgrade) = NULL; + } + else + relay_weechat_hook_signals (client); } }