From ae25925a1fdceeddff25076b5ff557e14f1aa4cb Mon Sep 17 00:00:00 2001 From: Timo Sirainen Date: Thu, 18 May 2000 08:46:56 +0000 Subject: Some logging fixes. Flood checking had a memory leak. Query had a small memory leak. Text buffer fixes. git-svn-id: http://svn.irssi.org/repos/irssi/trunk@226 dbcabf3a-b0e7-0310-adc4-f8d773084564 --- src/irc/flood/flood.c | 28 ++++++++++++++++++++++------ 1 file changed, 22 insertions(+), 6 deletions(-) (limited to 'src/irc/flood') diff --git a/src/irc/flood/flood.c b/src/irc/flood/flood.c index b1648f5f..b9617157 100644 --- a/src/irc/flood/flood.c +++ b/src/irc/flood/flood.c @@ -46,7 +46,7 @@ typedef struct { static int flood_tag; static int flood_max_msgs, flood_timecheck; -static int flood_hash_deinit(const char *key, FLOOD_REC *flood, gpointer nowp) +static int flood_hash_check_remove(const char *key, FLOOD_REC *flood, gpointer nowp) { GSList *tmp, *next; time_t now; @@ -59,8 +59,11 @@ static int flood_hash_deinit(const char *key, FLOOD_REC *flood, gpointer nowp) FLOOD_ITEM_REC *rec = tmp->data; next = tmp->next; - if (now-rec->first >= flood_timecheck) + if (now-rec->first >= flood_timecheck) { flood->items = g_slist_remove(flood->items, rec); + g_free(rec->target); + g_free(rec); + } } if (flood->items != NULL) @@ -83,7 +86,7 @@ static int flood_timeout(void) IRC_SERVER_REC *rec = tmp->data; mserver = MODULE_DATA(rec); - g_hash_table_foreach_remove(mserver->floodlist, (GHRFunc) flood_hash_deinit, GINT_TO_POINTER((int) now)); + g_hash_table_foreach_remove(mserver->floodlist, (GHRFunc) flood_hash_check_remove, GINT_TO_POINTER((int) now)); } return 1; } @@ -101,6 +104,21 @@ static void flood_init_server(IRC_SERVER_REC *server) rec->floodlist = g_hash_table_new((GHashFunc) g_istr_hash, (GCompareFunc) g_istr_equal); } +static void flood_hash_destroy(const char *key, FLOOD_REC *flood) +{ + while (flood->items != NULL) { + FLOOD_ITEM_REC *rec = flood->items->data; + + g_free(rec->target); + g_free(rec); + + flood->items = g_slist_remove(flood->items, rec); + } + + g_free(flood->nick); + g_free(flood); +} + /* Deinitialize flood protection */ static void flood_deinit_server(IRC_SERVER_REC *server) { @@ -112,9 +130,7 @@ static void flood_deinit_server(IRC_SERVER_REC *server) if (mserver != NULL && mserver->floodlist != NULL) { flood_timecheck = 0; - g_hash_table_freeze(mserver->floodlist); - g_hash_table_foreach(mserver->floodlist, (GHFunc) flood_hash_deinit, NULL); - g_hash_table_thaw(mserver->floodlist); + g_hash_table_foreach(mserver->floodlist, (GHFunc) flood_hash_destroy, NULL); g_hash_table_destroy(mserver->floodlist); } g_free(mserver); -- cgit v1.2.3