1
0
mirror of https://github.com/weechat/weechat.git synced 2026-06-29 06:16:40 +02:00

irc: fix memory leak in purge of hashtables with joins (it was done only for the first server in the list)

This commit is contained in:
Sebastien Helleu
2013-02-16 10:00:28 +01:00
parent 47e1caa91f
commit c1bc23b052
9 changed files with 18 additions and 9 deletions
+3 -1
View File
@@ -1,7 +1,7 @@
WeeChat ChangeLog
=================
Sébastien Helleu <flashcode@flashtux.org>
v0.4.1-dev, 2013-02-14
v0.4.1-dev, 2013-02-16
Version 0.4.1 (under dev!)
@@ -22,6 +22,8 @@ Version 0.4.1 (under dev!)
* aspell: add info "aspell_dict" (dictionaries used on a buffer)
* aspell: optimization on spellers to improve speed (save state by buffer)
* guile: fix compilation with guile 2.0
* irc: fix memory leak in purge of hashtables with joins (it was done only for
the first server in the list)
* irc: add color in output of /names when result is on server buffer (channel
not joined) (bug #38070)
* perl: simplify code to load scripts
+1
View File
@@ -185,6 +185,7 @@
'cmd_list_regexp' (pointer) +
'last_user_message' (time) +
'last_away_check' (time) +
'last_data_purge' (time) +
'outqueue' (pointer) +
'last_outqueue' (pointer) +
'redirects' (pointer, hdata: "irc_redirect") +
+1
View File
@@ -185,6 +185,7 @@
'cmd_list_regexp' (pointer) +
'last_user_message' (time) +
'last_away_check' (time) +
'last_data_purge' (time) +
'outqueue' (pointer) +
'last_outqueue' (pointer) +
'redirects' (pointer, hdata: "irc_redirect") +
+1
View File
@@ -185,6 +185,7 @@
'cmd_list_regexp' (pointer) +
'last_user_message' (time) +
'last_away_check' (time) +
'last_data_purge' (time) +
'outqueue' (pointer) +
'last_outqueue' (pointer) +
'redirects' (pointer, hdata: "irc_redirect") +
+1
View File
@@ -185,6 +185,7 @@
'cmd_list_regexp' (pointer) +
'last_user_message' (time) +
'last_away_check' (time) +
'last_data_purge' (time) +
'outqueue' (pointer) +
'last_outqueue' (pointer) +
'redirects' (pointer, hdata: "irc_redirect") +
+1
View File
@@ -185,6 +185,7 @@
'cmd_list_regexp' (pointer) +
'last_user_message' (time) +
'last_away_check' (time) +
'last_data_purge' (time) +
'outqueue' (pointer) +
'last_outqueue' (pointer) +
'redirects' (pointer, hdata: "irc_redirect") +
+8 -8
View File
@@ -105,8 +105,6 @@ char *irc_server_chanmodes_default = "beI,k,l";
const char *irc_server_send_default_tags = NULL; /* default tags when */
/* sending a message */
time_t irc_server_last_check_join_channels = 0;
void irc_server_reconnect (struct t_irc_server *server);
void irc_server_free_data (struct t_irc_server *server);
@@ -949,6 +947,7 @@ irc_server_alloc (const char *name)
new_server->cmd_list_regexp = NULL;
new_server->last_user_message = 0;
new_server->last_away_check = 0;
new_server->last_data_purge = 0;
for (i = 0; i < IRC_SERVER_NUM_OUTQUEUES_PRIO; i++)
{
new_server->outqueue[i] = NULL;
@@ -2831,11 +2830,8 @@ irc_server_timer_cb (void *data, int remaining_calls)
ptr_redirect = ptr_next_redirect;
}
/*
* remove old channels in "join_manual" and "join_noswitch"
* (every 5 minutes)
*/
if (current_time > irc_server_last_check_join_channels + (60 * 5))
/* purge some data (every 10 minutes) */
if (current_time > ptr_server->last_data_purge + (60 * 10))
{
weechat_hashtable_map (ptr_server->join_manual,
&irc_server_check_join_manual_cb,
@@ -2843,7 +2839,7 @@ irc_server_timer_cb (void *data, int remaining_calls)
weechat_hashtable_map (ptr_server->join_noswitch,
&irc_server_check_join_noswitch_cb,
ptr_server);
irc_server_last_check_join_channels = current_time;
ptr_server->last_data_purge = current_time;
}
}
}
@@ -4525,6 +4521,7 @@ irc_server_hdata_server_cb (void *data, const char *hdata_name)
WEECHAT_HDATA_VAR(struct t_irc_server, cmd_list_regexp, POINTER, 0, NULL, NULL);
WEECHAT_HDATA_VAR(struct t_irc_server, last_user_message, TIME, 0, NULL, NULL);
WEECHAT_HDATA_VAR(struct t_irc_server, last_away_check, TIME, 0, NULL, NULL);
WEECHAT_HDATA_VAR(struct t_irc_server, last_data_purge, TIME, 0, NULL, NULL);
WEECHAT_HDATA_VAR(struct t_irc_server, outqueue, POINTER, 0, NULL, NULL);
WEECHAT_HDATA_VAR(struct t_irc_server, last_outqueue, POINTER, 0, NULL, NULL);
WEECHAT_HDATA_VAR(struct t_irc_server, redirects, POINTER, 0, NULL, "irc_redirect");
@@ -4745,6 +4742,8 @@ irc_server_add_to_infolist (struct t_infolist *infolist,
return 0;
if (!weechat_infolist_new_var_time (ptr_item, "last_away_check", server->last_away_check))
return 0;
if (!weechat_infolist_new_var_time (ptr_item, "last_data_purge", server->last_data_purge))
return 0;
return 1;
}
@@ -5052,6 +5051,7 @@ irc_server_print_log ()
weechat_log_printf (" cmd_list_regexp. . . : 0x%lx", ptr_server->cmd_list_regexp);
weechat_log_printf (" last_user_message. . : %ld", ptr_server->last_user_message);
weechat_log_printf (" last_away_check. . . : %ld", ptr_server->last_away_check);
weechat_log_printf (" last_data_purge. . . : %ld", ptr_server->last_data_purge);
for (i = 0; i < IRC_SERVER_NUM_OUTQUEUES_PRIO; i++)
{
weechat_log_printf (" outqueue[%02d] . . . . : 0x%lx", i, ptr_server->outqueue[i]);
+1
View File
@@ -194,6 +194,7 @@ struct t_irc_server
regex_t *cmd_list_regexp; /* compiled Regular Expression for /list */
time_t last_user_message; /* time of last user message (anti flood)*/
time_t last_away_check; /* time of last away check on server */
time_t last_data_purge; /* time of last purge (some hashtables) */
struct t_irc_outqueue *outqueue[2]; /* queue for outgoing messages */
/* with 2 priorities (high/low) */
struct t_irc_outqueue *last_outqueue[2]; /* last outgoing message */
+1
View File
@@ -418,6 +418,7 @@ irc_upgrade_read_cb (void *data,
irc_upgrade_current_server->lag_last_refresh = weechat_infolist_time (infolist, "lag_last_refresh");
irc_upgrade_current_server->last_user_message = weechat_infolist_time (infolist, "last_user_message");
irc_upgrade_current_server->last_away_check = weechat_infolist_time (infolist, "last_away_check");
irc_upgrade_current_server->last_data_purge = weechat_infolist_time (infolist, "last_data_purge");
}
break;
case IRC_UPGRADE_TYPE_CHANNEL: