void panda_mux_unref( PandaMux mux) { size_t count; if (mux == NULL) return; pthread_mutex_lock(&mux->mutex); count = --(mux->refcnt); pthread_mutex_unlock(&mux->mutex); if (count == 0) { pthread_mutex_destroy(&mux->mutex); panda_log_proxy_unref(mux->logger); pthread_mutex_lock(&mux->next_mutex); DESTROY_MEMBER(mux, next); pthread_mutex_unlock(&mux->next_mutex); pthread_mutex_destroy(&mux->next_mutex); pthread_rwlock_wrlock(&mux->noalgn_rwlock); DESTROY_MEMBER(mux, noalgn); pthread_rwlock_unlock(&mux->noalgn_rwlock); pthread_rwlock_destroy(&mux->noalgn_rwlock); free(mux); } }
void panda_assembler_unref( PandaAssembler assembler) { size_t count; if (assembler == NULL) return; #ifdef HAVE_PTHREAD pthread_mutex_lock(&assembler->mutex); #endif count = --(assembler->refcnt); #ifdef HAVE_PTHREAD pthread_mutex_unlock(&assembler->mutex); #endif if (count == 0) { #ifdef HAVE_PTHREAD pthread_mutex_destroy(&assembler->mutex); #endif free(assembler->kmerseen); module_destroy(assembler); DESTROY_MEMBER(assembler, next); DESTROY_MEMBER(assembler, noalgn); panda_algorithm_unref(assembler->algo); panda_log_proxy_unref(assembler->logger); free(assembler); } }
void hang_free( void *user_data) { struct hang_data *hang_data = (struct hang_data *) user_data; DESTROY_MEMBER(hang_data, next); panda_log_proxy_unref(hang_data->logger); free(hang_data); }