static void free_messages(pcu_aa_tree* t) { if (pcu_aa_empty(*t)) return; free_messages(&((*t)->left)); free_messages(&((*t)->right)); struct message* m; m = (struct message*) *t; free_message(m); pcu_make_aa(t); }
asmlinkage long sys_rmMbox421(unsigned long mbxID){ mutex_lock(&lock); if(mbxID<256 && mailbox_list[mbxID].exists && mailbox_list[mbxID].mailbox_ptr!=NULL){ mailbox_list[mbxID].exists = 0; if(mailbox_list[mbxID].mailbox_ptr->msg!=NULL){ if(!free_messages(mailbox_list[mbxID].mailbox_ptr->msg)){ mailbox_list[mbxID].mailbox_ptr->last_node = NULL; mailbox_list[mbxID].mailbox_ptr->msg = NULL; } else{ printk(KERN_ALERT "Mailbox messages are currupted\n"); mutex_unlock(&lock); return -1; } } mailbox_list[mbxID].mailbox_ptr->mxid = 0; kfree(mailbox_list[mbxID].mailbox_ptr); mailbox_list[mbxID].mailbox_ptr = NULL; existing_mailboxes-=1; mutex_unlock(&lock); return 0; } mutex_unlock(&lock); return -1; }
static void hippo_chat_room_finalize(GObject *object) { HippoChatRoom *room = HIPPO_CHAT_ROOM(object); free_messages(room); g_hash_table_destroy(room->viewers); g_hash_table_destroy(room->chatters); g_free(room->title); g_free(room->jabber_id); g_free(room->id); G_OBJECT_CLASS(hippo_chat_room_parent_class)->finalize(object); }
/* Called on reconnect, since users and messages will be resent */ void hippo_chat_room_reconnected(HippoConnection *connection, HippoChatRoom *room) { GHashTable *old_viewers; GHashTable *old_chatters; int new_generation; g_return_if_fail(HIPPO_IS_CHAT_ROOM(room)); new_generation = hippo_connection_get_generation(connection); g_debug("Clearing chat room old generation %d new %d", room->generation, new_generation); if (room->generation == new_generation) { g_debug("No disconnect has happened, no need to clear"); return; } room->generation = new_generation; /* Save old tables to hold refs while * we emit the "cleared" signal so * api users can drop their usage of the users */ old_viewers = room->viewers; room->viewers = NULL; old_chatters = room->chatters; room->chatters = NULL; make_hash_tables(room); free_messages(room); hippo_connection_request_chat_room_details(connection, room); g_signal_emit(room, signals[CLEARED], 0); g_hash_table_destroy(old_viewers); g_hash_table_destroy(old_chatters); }
static void dtor_order(pcu_order o) { free_messages(&o->tree); pcu_free(o->array); }