client.c fixes + away stuff from ratbox3, part 2

This commit is contained in:
Valery Yatsko 2008-04-02 05:24:54 +04:00
parent c75fdbfb29
commit adc6cc4278

View file

@ -76,6 +76,7 @@ static EVH check_pings;
extern rb_bh *client_heap; extern rb_bh *client_heap;
extern rb_bh *lclient_heap; extern rb_bh *lclient_heap;
extern rb_bh *pclient_heap; extern rb_bh *pclient_heap;
static rb_bh *away_heap = NULL;
extern char current_uid[IDLEN]; extern char current_uid[IDLEN];
@ -117,9 +118,11 @@ init_client(void)
* start off the check ping event .. -- adrian * start off the check ping event .. -- adrian
* Every 30 seconds is plenty -- db * Every 30 seconds is plenty -- db
*/ */
client_heap = rb_bh_create(sizeof(struct Client), CLIENT_HEAP_SIZE); client_heap = rb_bh_create(sizeof(struct Client), CLIENT_HEAP_SIZE, "client_heap");
lclient_heap = rb_bh_create(sizeof(struct LocalUser), LCLIENT_HEAP_SIZE); lclient_heap = rb_bh_create(sizeof(struct LocalUser), LCLIENT_HEAP_SIZE, "lclient_heap");
pclient_heap = rb_bh_create(sizeof(struct PreClient), PCLIENT_HEAP_SIZE); pclient_heap = rb_bh_create(sizeof(struct PreClient), PCLIENT_HEAP_SIZE, "pclient_heap");
away_heap = rb_bh_create(AWAYLEN, AWAY_HEAP_SIZE, "away_heap");
rb_event_addish("check_pings", check_pings, NULL, 30); rb_event_addish("check_pings", check_pings, NULL, 30);
rb_event_addish("free_exited_clients", &free_exited_clients, NULL, 4); rb_event_addish("free_exited_clients", &free_exited_clients, NULL, 4);
rb_event_addish("exit_aborted_clients", exit_aborted_clients, NULL, 1); rb_event_addish("exit_aborted_clients", exit_aborted_clients, NULL, 1);
@ -1553,10 +1556,10 @@ exit_local_server(struct Client *client_p, struct Client *source_p, struct Clien
sendto_realops_snomask(SNO_GENERAL, L_ALL, "%s was connected" sendto_realops_snomask(SNO_GENERAL, L_ALL, "%s was connected"
" for %ld seconds. %d/%d sendK/recvK.", " for %ld seconds. %d/%d sendK/recvK.",
source_p->name, rb_current_time() - source_p->localClient->firsttime, sendk, recvk); source_p->name, (long) rb_current_time() - source_p->localClient->firsttime, sendk, recvk);
ilog(L_SERVER, "%s was connected for %ld seconds. %d/%d sendK/recvK.", ilog(L_SERVER, "%s was connected for %ld seconds. %d/%d sendK/recvK.",
source_p->name, rb_current_time() - source_p->localClient->firsttime, sendk, recvk); source_p->name, (long) rb_current_time() - source_p->localClient->firsttime, sendk, recvk);
if(has_id(source_p)) if(has_id(source_p))
del_from_id_hash(source_p->id, source_p); del_from_id_hash(source_p->id, source_p);
@ -1708,9 +1711,9 @@ exit_client(struct Client *client_p, /* The local client originating the
void void
count_local_client_memory(size_t * count, size_t * local_client_memory_used) count_local_client_memory(size_t * count, size_t * local_client_memory_used)
{ {
size_t lusage; size_t lusage;
rb_bh_usage(lclient_heap, count, NULL, &lusage); rb_bh_usage(lclient_heap, count, NULL, &lusage, NULL);
*local_client_memory_used = lusage + (*count * (sizeof(MemBlock) + sizeof(struct Client))); *local_client_memory_used = lusage + (*count * (sizeof(void *) + sizeof(struct Client)));
} }
/* /*
@ -1719,11 +1722,11 @@ count_local_client_memory(size_t * count, size_t * local_client_memory_used)
void void
count_remote_client_memory(size_t * count, size_t * remote_client_memory_used) count_remote_client_memory(size_t * count, size_t * remote_client_memory_used)
{ {
size_t lcount, rcount; size_t lcount, rcount;
rb_bh_usage(lclient_heap, &lcount, NULL, NULL); rb_bh_usage(lclient_heap, &lcount, NULL, NULL, NULL);
rb_bh_usage(client_heap, &rcount, NULL, NULL); rb_bh_usage(client_heap, &rcount, NULL, NULL, NULL);
*count = rcount - lcount; *count = rcount - lcount;
*remote_client_memory_used = *count * (sizeof(MemBlock) + sizeof(struct Client)); *remote_client_memory_used = *count * (sizeof(void *) + sizeof(struct Client));
} }
@ -1845,9 +1848,9 @@ static rb_bh *user_heap;
void void
initUser(void) initUser(void)
{ {
user_heap = rb_bh_create(sizeof(struct User), USER_HEAP_SIZE); user_heap = rb_bh_create(sizeof(struct User), USER_HEAP_SIZE, "user_heap");
if(!user_heap) if(!user_heap)
outofmemory(); rb_outofmemory();
} }
/* /*
@ -1906,6 +1909,8 @@ make_server(struct Client *client_p)
void void
free_user(struct User *user, struct Client *client_p) free_user(struct User *user, struct Client *client_p)
{ {
free_away(client_p);
if(--user->refcnt <= 0) if(--user->refcnt <= 0)
{ {
if(user->away) if(user->away)
@ -1936,21 +1941,21 @@ free_user(struct User *user, struct Client *client_p)
} }
} }
void void
allocate_away(struct Client *client_p) allocate_away(struct Client *client_p)
{ {
if(client_p->user->away == NULL) if(client_p->user->away == NULL)
client_p->user->away = rb_bh_alloc(away_heap); client_p->user->away = rb_bh_alloc(away_heap);
} }
void void
free_away(struct Client *client_p) free_away(struct Client *client_p)
{ {
if(client_p->user->away != NULL) { if(client_p->user->away != NULL) {
rb_bh_free(away_heap, client_p->user->away); rb_bh_free(away_heap, client_p->user->away);
client_p->user->away = NULL; client_p->user->away = NULL;
} }
} }
void void