/* Destroy DCC record */ void dcc_destroy(DCC_REC *dcc) { g_return_if_fail(dcc != NULL); if (dcc->destroyed) return; dcc_conns = g_slist_remove(dcc_conns, dcc); dcc_remove_chat_refs(dcc); dcc->destroyed = TRUE; signal_emit("dcc destroyed", 1, dcc); if (dcc->fhandle != -1) close(dcc->fhandle); if (dcc->handle != -1) net_disconnect(dcc->handle); if (dcc->tagread != -1) g_source_remove(dcc->tagread); if (dcc->tagwrite != -1) g_source_remove(dcc->tagwrite); if (dcc->type == DCC_TYPE_CHAT) line_split_free((LINEBUF_REC *) dcc->databuf); else if (dcc->databuf != NULL) g_free(dcc->databuf); g_free_not_null(dcc->file); g_free_not_null(dcc->ircnet); g_free(dcc->mynick); g_free(dcc->nick); g_free(dcc->arg); g_free(dcc); }
static void sig_dcc_destroyed(CHAT_DCC_REC *dcc) { if (!IS_DCC_CHAT(dcc)) return; dcc_remove_chat_refs(dcc); if (dcc->sendbuf != NULL) net_sendbuffer_destroy(dcc->sendbuf, FALSE); g_free(dcc->id); }