From 703dab51738ba64ce2ba88e70b550c229d6f89b9 Mon Sep 17 00:00:00 2001 From: sapanb Date: Wed, 13 Jan 2010 04:33:06 +0000 Subject: [PATCH] Bug fixes git-svn-id: http://svn.planet-lab.org/svn/fprobe-ulog/trunk@16579 8c455092-636d-4788-adf5-e71def0336e8 --- src/vserver.h | 35 +++++++++++++++++++++++++++-------- 1 file changed, 27 insertions(+), 8 deletions(-) diff --git a/src/vserver.h b/src/vserver.h index 6037db3..6f59356 100644 --- a/src/vserver.h +++ b/src/vserver.h @@ -31,13 +31,25 @@ struct hash_entry { struct hash_entry slice_id_hash[HASH_SIZE]; +void init_hash() { + memset(slice_id_hash, 0, HASH_SIZE); +} void set_hash_entry(unsigned int xid, uint32_t slice_id) { int idx = xid & HASH_TABLE_MASK; int i; - for (i = idx;i!=idx;i=(i+1) & HASH_TABLE_MASK) { - struct hash_entry *entry = &slice_id_hash[i]; + + struct hash_entry *entry = &slice_id_hash[idx]; + if (entry->xid == 0 || entry->xid ==xid) { + entry->slice_id = slice_id; + entry->xid = xid; + return; + } + + for (i = idx+1;i!=idx;i=(i+1) & HASH_TABLE_MASK) { + entry = &slice_id_hash[i]; if (entry->xid == 0 || entry->xid == xid) { - entry->xid = slice_id; + entry->slice_id = slice_id; + entry->xid = xid; break; } } @@ -62,15 +74,21 @@ uint32_t xid_to_slice_id_slow(unsigned int xid) { uint32_t xid_to_slice_id_fast(unsigned int xid) { int idx = xid & HASH_TABLE_MASK; int i; - uint32_t slice_id; - for (i = idx;i!=idx;i=(i+1) & HASH_TABLE_MASK) { - struct hash_entry *entry = &slice_id_hash[i]; + uint32_t slice_id = 0; + + struct hash_entry *entry = &slice_id_hash[idx]; + if (entry->xid == xid) + return entry->slice_id; + + for (i = idx+1;i!=idx;i=(i+1) & HASH_TABLE_MASK) { + entry = &slice_id_hash[i]; if (entry->xid == xid) { - entry->xid = slice_id; + slice_id = entry->slice_id; break; } } - + + return slice_id; } uint32_t xid_to_slice_id(unsigned int xid) { @@ -83,4 +101,5 @@ uint32_t xid_to_slice_id(unsigned int xid) { return xid_to_slice_id_slow(xid); } + #endif -- 2.43.0