Changeset 616
- Timestamp:
- 07/23/05 21:41:37 (3 years ago)
- Files:
-
- trunk/src/register.c (modified) (2 diffs)
- trunk/src/users.c (modified) (5 diffs)
- trunk/src/users.h (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/src/register.c
r608 r616 410 410 session=session_create(user,from,id,q,s,0); 411 411 if (!session){ 412 user_remove(user);413 412 g_warning(N_("Couldn't create session for %s"),from); 414 413 jabber_iq_send_error(s,from,to,id,500,_("Internal Server Error")); … … 618 617 session=session_create(user,from,id,q,s,0); 619 618 if (!session){ 620 user_remove(user);621 619 g_warning(N_("Couldn't create session for %s"),from); 622 620 jabber_iq_send_error(s,from,to,id,500,_("Internal Server Error")); trunk/src/users.c
r611 r616 54 54 static int user_destroy(User *s); 55 55 56 #if 0 57 static gboolean users_hash_func(gpointer key,gpointer value,gpointer udata){ 58 59 user_destroy((User *)value); 60 g_free(key); 56 static gboolean users_gc_hash_func(gpointer key,gpointer value,gpointer udata){ 57 User *u=(User *)value; 58 59 if (u->refcount==0) { 60 user_destroy(u); 61 g_free(key); 62 } 61 63 return TRUE; 62 64 } 63 #endif 65 66 int users_gc(){ 67 g_hash_table_foreach_remove(users_jid,users_gc_hash_func,NULL); 68 return 0; 69 } 70 64 71 65 72 int users_done(){ 66 73 guint s; 74 75 s=g_hash_table_size(users_jid); 76 if (s) g_debug(L_("Before cleanup: %u users in hash table"),s); 77 users_gc(); 67 78 s=g_hash_table_size(users_jid); 68 79 if (s) g_warning(L_("Still %u users in hash table"),s); 69 /*g_hash_table_foreach_remove(users_jid,users_hash_func,NULL);*/70 80 g_hash_table_destroy(users_jid); 71 81 return 0; 72 82 } 83 84 int user_ref(User *u){ 85 86 return ++u->refcount; 87 } 88 89 int user_unref(User *u){ 90 91 g_assert(u->refcount>0); 92 u->refcount--; 93 return u->refcount; 94 } 95 96 int user_free(User *u){ 97 gpointer key,value; 98 char *njid; 99 100 g_assert(u->refcount==0); 101 g_assert(users_jid!=NULL); 102 103 njid=jid_normalized(u->jid,0); 104 g_assert(njid!=NULL); 105 if (g_hash_table_lookup_extended(users_jid,(gpointer)njid,&key,&value)){ 106 g_assert(u==value); 107 g_hash_table_remove(users_jid,(gpointer)njid); 108 g_free(key); 109 } 110 else debug(L_("user_remove: user '%s' not found in hash table"),njid); 111 g_free(njid); 112 return user_destroy(u); 113 } 114 73 115 74 116 int user_save(User *u){ … … 368 410 u=(User *)g_hash_table_lookup(users_jid,(gpointer)njid); 369 411 g_free(njid); 370 if (u ) return u;371 return u ser_load(jid);412 if (u==NULL) u=user_load(jid); 413 return u; 372 414 } 373 415 … … 397 439 } 398 440 399 400 int user_remove(User *u){401 gpointer key,value;402 char *njid;403 404 g_assert(users_jid!=NULL);405 406 njid=jid_normalized(u->jid,0);407 g_assert(njid!=NULL);408 if (g_hash_table_lookup_extended(users_jid,(gpointer)njid,&key,&value)){409 g_assert(u==value);410 g_hash_table_remove(users_jid,(gpointer)njid);411 g_free(key);412 }413 else debug(L_("user_remove: user '%s' not found in hash table"),njid);414 g_free(njid);415 return user_destroy(u);416 }417 441 418 442 User *user_create(const char *jid,uin_t uin,const char * password){ … … 462 486 g_assert(users_jid!=NULL); 463 487 g_hash_table_insert(users_jid,(gpointer)njid,(gpointer)u); 488 u->refcount=0; 464 489 return u; 465 490 } … … 613 638 njid=jid_normalized(u->jid,0); 614 639 g_assert(njid!=NULL); 615 r=user_remove(u);616 if (r){617 g_free(njid);618 return r;619 }620 640 621 641 r=unlink(njid); trunk/src/users.h
r595 r616 64 64 65 65 int confirmed; 66 int refcount; 66 67 GList *contacts; 67 68 }User; … … 71 72 72 73 User *user_create(const char *jid,uin_t uin,const char * password); 73 int user_remove(User *u); 74 int user_ref(User *u); 75 int user_unref(User *u); 74 76 int user_delete(User *u); 75 77
