wangzhengquan
2021-02-01 5e463316508fbb0bd79c8b4b68cd461b302a4da1
src/shm/hashtable.cpp
@@ -143,9 +143,6 @@
  }
}
void *hashtable_get(hashtable_t *hashtable, int key) {
  void * res = _hashtable_get(hashtable, key);
  return res;
@@ -155,35 +152,36 @@
  _hashtable_put(hashtable, key, value); 
}
// bool hashtable_put(hashtable_t *hashtable, int key, void *value, bool overwrite) {
bool hashtable_check_put(hashtable_t *hashtable, int key, void *value, bool overwrite) {
//   int rv;
//   if(( rv = svsem_wait(hashtable->mutex)) != 0) {
//     LoggerFactory::getLogger()->error(errno, "hashtable_put\n");
//   }
//   if(overwrite) {
//     _hashtable_put(hashtable, key, value);
//     goto suc;
//   }
//   void * val = _hashtable_get(hashtable, key);
//   // val = 1是allockey的情况
//   if(val != NULL && val != (void *)1)
//     goto fail;
  int rv;
  void * val;
  if(( rv = svsem_wait(hashtable->mutex)) != 0) {
    LoggerFactory::getLogger()->error(errno, "hashtable_put\n");
  }
  if(overwrite) {
    _hashtable_put(hashtable, key, value);
    goto suc;
  }
  val = _hashtable_get(hashtable, key);
  // val = 1是allockey的情况
  if(val != NULL && val != (void *)1)
    goto fail;
//   _hashtable_put(hashtable, key, value);
  _hashtable_put(hashtable, key, value);
// suc:
//   if(( rv = svsem_post(hashtable->mutex)) != 0) {
//     LoggerFactory::getLogger()->error(errno, "hashtable_put\n");
//   }
//   return true;
suc:
  if(( rv = svsem_post(hashtable->mutex)) != 0) {
    LoggerFactory::getLogger()->error(errno, "hashtable_put\n");
  }
  return true;
// fail:
//   if(( rv = svsem_post(hashtable->mutex)) != 0) {
//     LoggerFactory::getLogger()->error(errno, "hashtable_put\n");
//   }
//   return false;
// }
fail:
  if(( rv = svsem_post(hashtable->mutex)) != 0) {
    LoggerFactory::getLogger()->error(errno, "hashtable_put\n");
  }
  return false;
}