summaryrefslogtreecommitdiffhomepage
path: root/src/core
diff options
context:
space:
mode:
Diffstat (limited to 'src/core')
-rw-r--r--src/core/lt_core.c40
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(&lt_lock))
+ return 1;
+
+ lt_refs++;
+ pthread_mutex_unlock(&lt_lock);
+
+ return 0;
+}
+
+int lt_dlexit(void)
+{
+ if (pthread_mutex_lock(&lt_lock))
+ return 1;
+
+ if (!lt_refs) {
+ pthread_mutex_unlock(&lt_lock);
+ return 1;
+ }
+
+ lt_refs--;
+
+ pthread_mutex_unlock(&lt_lock);
+
+ return 0;
+}