CAST_OBJ_NOTNULL(he, oh->hashpriv, HCL_ENTRY_MAGIC);
mtx = he->mtx;
AZ(pthread_mutex_lock(&hcl_mutex[mtx]));
- if (--he->refcnt == 0) {
- free(he->key1);
- free(he->key2);
- TAILQ_REMOVE(&hcl_head[he->hash], he, list);
- free(he);
- ret = 0;
- } else
- ret = 1;
+ if (--he->refcnt >= 0) {
+ AZ(pthread_mutex_unlock(&hcl_mutex[mtx]));
+ return (1)
+ }
+ TAILQ_REMOVE(&hcl_head[he->hash], he, list);
AZ(pthread_mutex_unlock(&hcl_mutex[mtx]));
- return (ret);
+ free(he->key1);
+ free(he->key2);
+ free(he);
+ return (0);
}
/*--------------------------------------------------------------------*/