From 7fa99e0efe07a120af719da2cae5c1151f024403 Mon Sep 17 00:00:00 2001
From: zhangmeng <775834166@qq.com>
Date: 星期三, 03 四月 2024 10:17:25 +0800
Subject: [PATCH] remove some defer
---
src/shm/hashtable.cpp | 74 ++++++++++++++++++++-----------------
1 files changed, 40 insertions(+), 34 deletions(-)
diff --git a/src/shm/hashtable.cpp b/src/shm/hashtable.cpp
index 14daaf0..ab07ad1 100755
--- a/src/shm/hashtable.cpp
+++ b/src/shm/hashtable.cpp
@@ -21,8 +21,6 @@
TAILQ_ENTRY(tailq_entry_t) joint;
} tailq_entry_t;
-#define START_KEY 1000
-
typedef TAILQ_HEAD(tailq_header_t, tailq_entry_t) tailq_header_t;
@@ -46,26 +44,25 @@
{
size_t code = hashcode(key);
tailq_entry_t *item;
- tailq_header_t *my_tailq_head = hashtable->array[code] ;
- if ( my_tailq_head == NULL)
+ tailq_header_t *my_tailq_head = hashtable->array[code];
+ if ((my_tailq_head == NULL) || (check_mm_valid(my_tailq_head) == false))
{
+ hashtable->array[code] = NULL;
return NULL;
}
- else
- {
- TAILQ_FOREACH(item, my_tailq_head, joint)
- {
- if ((item != NULL) && (key == item->key)) {
- return item->value;
- } else {
- mm_free(my_tailq_head);
- hashtable->array[code] = NULL;
- hashtable->queueCount--;
- return NULL;
- }
- }
+ TAILQ_FOREACH(item, my_tailq_head, joint)
+ {
+ if ((check_mm_valid(item) == true) && ((key == item->key) || (code == item->key)))
+ return item->value;
+
+ break;
}
+
+ hashtable->array[code] = NULL;
+ hashtable->queueCount--;
+ mm_free(my_tailq_head);
+
return NULL;
}
@@ -75,8 +72,8 @@
size_t code = hashcode(key);
void *oldvalue;
tailq_entry_t *item;
- tailq_header_t *my_tailq_head = hashtable->array[code] ;
- if ( my_tailq_head == NULL)
+ tailq_header_t *my_tailq_head = hashtable->array[code];
+ if ((my_tailq_head == NULL) || (check_mm_valid(my_tailq_head) == false))
{
if (inter_key_get() == 0) {
inter_key_set(key);
@@ -91,13 +88,15 @@
TAILQ_FOREACH(item, my_tailq_head, joint)
{
- if ((item != NULL) && (key == item->key))
+ if ((check_mm_valid(item) == true) && (key ==item->key))
{
- oldvalue = item -> value;
+ oldvalue = item->value;
item->key= key;
item->value = value;
return oldvalue;
- }
+ }
+
+ goto putnew;
}
putnew:
@@ -107,7 +106,7 @@
item = (tailq_entry_t *) mm_malloc(sizeof(tailq_entry_t));
item->key = key;
item->value = value;
- TAILQ_INSERT_TAIL(my_tailq_head, item, joint);
+ TAILQ_INSERT_HEAD(my_tailq_head, item, joint);
return NULL;
}
@@ -120,9 +119,10 @@
if( (rv = svsem_uni_wait(hashtable->mutex)) != 0) {
LoggerFactory::getLogger()->error(errno, "hashtable_remove\n");
}
- tailq_header_t *my_tailq_head = hashtable->array[code] ;
- if ( my_tailq_head == NULL)
+ tailq_header_t *my_tailq_head = hashtable->array[code];
+ if ((my_tailq_head == NULL) || (check_mm_valid(my_tailq_head) == false))
{
+ hashtable->array[code] = NULL;
if((rv = svsem_post(hashtable->mutex)) != 0) {
LoggerFactory::getLogger()->error(errno, "hashtable_remove\n");
}
@@ -134,15 +134,14 @@
TAILQ_REMOVE(my_tailq_head, item, joint);
/* mm_free the item as we don't need it anymore. */
- mm_free(item);
+ if (check_mm_valid(item) == true)
+ mm_free(item);
- item = TAILQ_NEXT(item, joint);
- if (item == NULL) {
- mm_free(my_tailq_head);
- hashtable->array[code] = NULL;
- hashtable->queueCount--;
- svsem_post(hashtable->mutex);
- }
+ hashtable->array[code] = NULL;
+ hashtable->queueCount--;
+ mm_free(my_tailq_head);
+ svsem_post(hashtable->mutex);
+
return;
}
@@ -317,8 +316,15 @@
static size_t hashcode(int key)
{
+ int val;
- return key % MAPSIZE;
+ if (key < MAPSIZE) {
+ val = key;
+ } else {
+ val = key % MAPSIZE % (MAPSIZE - START_KEY) + START_KEY;
+ }
+
+ return val;
}
/**
--
Gitblit v1.8.0