void rwlock_fini(rwlock_t* lock){ #ifdef USE_PTHREAD pthread_rwlock_destroy(lock); // free(lock); #elif defined USE_ETHREAD erl_drv_rwlock_destroy(*lock); #endif };
void exmpp_ht_destroy(struct exmpp_hashtable *ht) { unsigned int i; struct exmpp_ht_entry *entry, *next; if (ht == NULL || ht->entries == NULL) return; #if defined(USE_RWLOCK) erl_drv_rwlock_rwlock(ht->lock); #endif for (i = 0; i < ht->length; ++i) { next = ht->entries[i]; while (next != NULL) { entry = next; next = next->next; driver_free(entry->key); if (ht->free_value != NULL) ht->free_value(entry->value); driver_free(entry); } } driver_free(ht->entries); ht->entries = NULL; ht->entries_count = 0; ht->length = 0; #if defined(USE_RWLOCK) erl_drv_rwlock_rwunlock(ht->lock); erl_drv_rwlock_destroy(ht->lock); #endif driver_free(ht); }
void enif_rwlock_destroy(ErlNifRWLock *rwlck) { erl_drv_rwlock_destroy(rwlck); }