/*******************************************************************/ /* sltdl: a surrogate ltdl implementation */ /* Copyright (C) 2019 Z. Gilboa */ /* Released under the Standard MIT License; see COPYING.SLTDL. */ /*******************************************************************/ #include #include #include static int lt_refs = 0; static pthread_mutex_t lt_lock = PTHREAD_MUTEX_INITIALIZER; int lt_dlinit(void) { if (pthread_mutex_lock(<_lock)) return 1; lt_refs++; pthread_mutex_unlock(<_lock); return 0; } int lt_dlexit(void) { if (pthread_mutex_lock(<_lock)) return 1; if (!lt_refs) { pthread_mutex_unlock(<_lock); return 1; } lt_refs--; pthread_mutex_unlock(<_lock); return 0; }