fujuntang
2021-11-16 d52c87dee3aac4af66ad2e1a86094ca27209d816
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;
@@ -47,25 +45,24 @@
  size_t code = hashcode(key);
  tailq_entry_t *item;
  tailq_header_t *my_tailq_head = hashtable->array[code] ;
  if ( my_tailq_head == NULL)
  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)) {
    if ((check_mm_valid(item) == true) && (key == item->key))
        return item->value;
      } else {
        mm_free(my_tailq_head);
    break;
  }
        hashtable->array[code] = NULL;
        hashtable->queueCount--;
  mm_free(my_tailq_head);
        return NULL;
      }
    }
  }
  return NULL;
}
@@ -76,7 +73,7 @@
  void *oldvalue;
  tailq_entry_t *item;
  tailq_header_t *my_tailq_head = hashtable->array[code] ;
  if ( my_tailq_head == NULL)
  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;
      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;
}
@@ -121,8 +120,9 @@
    LoggerFactory::getLogger()->error(errno, "hashtable_remove\n");
  }
  tailq_header_t *my_tailq_head = hashtable->array[code] ;
  if ( my_tailq_head == NULL)
  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. */
      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--;
      mm_free(my_tailq_head);
        svsem_post(hashtable->mutex);
      }
      return;
    }