Example #1
0
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);
}
Example #2
0
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;
}
Example #3
0
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);
}
Example #4
0
/* 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);        
}
Example #5
0
static void dtor_order(pcu_order o)
{
  free_messages(&o->tree);
  pcu_free(o->array);
}