# HG changeset patch # User Christian Hammond # Date 1054964689 0 # Node ID d42d2c9c212289197fec9c444b39fedb56c60446 # Parent 8c237274189f90b02c2b2c32216b6151a4e9578b [gaim-migrate @ 6214] Fixed the 100% CPU load on disconnect. Optimized the removal of buddies before and after disconnect. We now report using v2.02 of the Trepia software. committer: Tailor Script diff -r 8c237274189f -r d42d2c9c2122 src/protocols/trepia/profile.h --- a/src/protocols/trepia/profile.h Sat Jun 07 04:25:34 2003 +0000 +++ b/src/protocols/trepia/profile.h Sat Jun 07 05:44:49 2003 +0000 @@ -24,9 +24,12 @@ #include #include +#include "blist.h" typedef struct { + struct buddy *buddy; + int type; /* c */ int id; /* a */ diff -r 8c237274189f -r d42d2c9c2122 src/protocols/trepia/trepia.c --- a/src/protocols/trepia/trepia.c Sat Jun 07 04:25:34 2003 +0000 +++ b/src/protocols/trepia/trepia.c Sat Jun 07 05:44:49 2003 +0000 @@ -56,7 +56,6 @@ { GaimConnection *gc; - int inpa; int fd; GString *rxqueue; @@ -92,23 +91,25 @@ } static void -__clear_user_list(GaimAccount *account) +_remove_user_fnc(gpointer key, gpointer value, gpointer user_data) { - struct gaim_buddy_list *blist; - GaimBlistNode *group, *buddy, *next_buddy; + TrepiaSession *session; + TrepiaProfile *profile; + const char *name; - blist = gaim_get_blist(); + name = (const char *)key; + profile = (TrepiaProfile *)value; + session = (TrepiaSession *)user_data; - for (group = blist->root; group != NULL; group = group->next) { - for (buddy = group->child; buddy != NULL; buddy = next_buddy) { - struct buddy *b = (struct buddy *)buddy; + gaim_blist_remove_buddy(profile->buddy); +} - next_buddy = buddy->next; - - if (b->account == account) - gaim_blist_remove_buddy(b); - } - } +static void +__clear_user_list(TrepiaSession *session) +{ + gaim_debug(GAIM_DEBUG_INFO, "trepia", "Clearing user list\n"); + g_hash_table_foreach(session->user_profiles, _remove_user_fnc, session); + gaim_debug(GAIM_DEBUG_INFO, "trepia", "Done clearing user list\n"); } #if 0 @@ -621,6 +622,8 @@ gaim_blist_add_buddy(b, g, NULL); } + profile->buddy = b; + b->proto_data = profile; session->pending_users = g_list_remove(session->pending_users, @@ -664,7 +667,8 @@ break; g_hash_table_remove(session->user_profiles, &id); - b = gaim_find_buddy(account, trepia_profile_get_login(profile)); + + b = profile->buddy; if (b != NULL) serv_got_update(session->gc, @@ -796,7 +800,7 @@ "%s\n" "%s\n" "%s\n" - "2.0\n" + "2.02\n" "", mac, gateway_mac, gaim_account_get_username(account), md5_password); @@ -835,7 +839,7 @@ session->user_profiles = g_hash_table_new_full(g_int_hash, g_int_equal, g_free, NULL); - __clear_user_list(account); + __clear_user_list(session); i = gaim_proxy_connect(account, server, port, __login_cb, session); @@ -848,22 +852,26 @@ { TrepiaSession *session = gc->proto_data; - __clear_user_list(gaim_connection_get_account(gc)); + __clear_user_list(session); if (session->rxqueue != NULL) g_string_free(session->rxqueue, TRUE); - if (session->inpa) - gaim_input_remove(session->inpa); + if (session->gc->inpa) + gaim_input_remove(session->gc->inpa); + gaim_debug(GAIM_DEBUG_INFO, "trepia", "Destroying user_profiles\n"); g_hash_table_destroy(session->user_profiles); + gaim_debug(GAIM_DEBUG_INFO, "trepia", "Destroying pending_users\n"); g_list_free(session->pending_users); + gaim_debug(GAIM_DEBUG_INFO, "trepia", "Closing socket\n"); close(session->fd); g_free(session); gc->proto_data = NULL; + gaim_debug(GAIM_DEBUG_INFO, "trepia", "Leaving trepia_close\n"); } static int