From 68744f28985e5362f9bbb8a383f55c4bcbe2bdb9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=BA=91=E9=A3=8E?= Date: Tue, 14 Aug 2012 11:11:57 +0800 Subject: [PATCH] bugifx : gate alloc uid --- gate/main.c | 27 +++++++++------------------ 1 file changed, 9 insertions(+), 18 deletions(-) diff --git a/gate/main.c b/gate/main.c index e7444a35..9ed9b002 100644 --- a/gate/main.c +++ b/gate/main.c @@ -138,27 +138,18 @@ static int _gen_id(struct gate * g, int connection_id) { int uid = ++g->id_index; int i; - for (;;) { - for (i=0;icap;i++) { - int hash = (uid + i) & (g->cap - 1); - if (g->agent[hash] == NULL) { - uid = uid + i; - struct connection * conn = &g->map[connection_id]; - conn->uid = uid; - g->agent[hash] = conn; - return uid; - } - } - struct connection ** new_hash = malloc(g->cap * 2 * sizeof(struct connection *)); - memset(new_hash, 0, sizeof(g->cap * 2 * sizeof(struct connection *))); - for (i=0;imax_connection;i++) { + for (i=0;icap;i++) { + int hash = (uid + i) & (g->cap - 1); + if (g->agent[hash] == NULL) { + uid = uid + i; struct connection * conn = &g->map[connection_id]; - assert(conn->uid == 0); - new_hash[conn->uid & (g->cap * 2 -1)] = conn; + conn->uid = uid; + g->agent[hash] = conn; + g->id_index = uid; + return uid; } - free(g->agent); - g->agent = new_hash; } + assert(0); } static void