diff options
Diffstat (limited to 'src/core')
-rw-r--r-- | src/core/lt_core.c | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/src/core/lt_core.c b/src/core/lt_core.c new file mode 100644 index 0000000..b0c3952 --- /dev/null +++ b/src/core/lt_core.c @@ -0,0 +1,40 @@ +/*******************************************************************/ +/* sltdl: a surrogate ltdl implementation */ +/* Copyright (C) 2019 Z. Gilboa */ +/* Released under the Standard MIT License; see COPYING.SLTDL. */ +/*******************************************************************/ + +#include <limits.h> +#include <pthread.h> +#include <sltdl/sltdl.h> + +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; +} |