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;
@@ -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))
      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;
    }