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
This commit is contained in:
Timo Sirainen 2000-05-18 08:46:56 +00:00 committed by cras
commit ae25925a1f
10 changed files with 129 additions and 89 deletions

View file

@ -251,7 +251,6 @@ static void read_ignores(void)
IGNORE_REC *rec;
CONFIG_NODE *node;
GSList *tmp;
char *str;
while (ignores != NULL)
ignore_destroy(ignores->data);

View file

@ -40,20 +40,15 @@ static void event_away(const char *data, IRC_SERVER_REC *server)
if (level == 0) return;
log = log_find(fname);
if (log != NULL) {
/* awaylog already created */
if (log->handle == -1) {
/* ..but not open, open it. */
log_start_logging(log);
}
return;
}
log = log_create_rec(fname, level, NULL);
if (log != NULL) {
if (log == NULL) {
log = log_create_rec(fname, level, NULL);
log->temp = TRUE;
log_update(log);
log_start_logging(log);
}
if (!log_start_logging(log)) {
/* creating log file failed? close it. */
log_close(log);
}
}

View file

@ -63,6 +63,7 @@ void query_destroy(QUERY_REC *query)
signal_emit("query destroyed", 1, query);
MODULE_DATA_DEINIT(query);
g_free_not_null(query->address);
g_free(query->nick);
g_free(query->server_tag);
g_free(query);

View file

@ -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);