WIN32 updates: ZOOM runs, nmem_init/nmem_exit called in DllMain.
[yaz-moved-to-github.git] / util / nmem.c
index a2255b2..358d7a6 100644 (file)
@@ -4,7 +4,16 @@
  * Sebastian Hammer, Adam Dickmeiss
  *
  * $Log: nmem.c,v $
- * Revision 1.28  2001-10-03 23:55:18  adam
+ * Revision 1.31  2001-10-24 12:24:43  adam
+ * WIN32 updates: ZOOM runs, nmem_init/nmem_exit called in DllMain.
+ *
+ * Revision 1.30  2001/10/05 13:55:17  adam
+ * Added defines YAZ_GNU_THREADS, YAZ_POSIX_THREADS in code and yaz-config
+ *
+ * Revision 1.29  2001/10/04 00:37:58  adam
+ * Fixes for GNU threads (not working yet).
+ *
+ * Revision 1.28  2001/10/03 23:55:18  adam
  * GNU threads support.
  *
  * Revision 1.27  2001/09/27 12:09:18  adam
 #include <windows.h>
 #endif
 
-#ifdef _REENTRANT
-#if HAVE_PTHREAD_H
+#if YAZ_POSIX_THREADS
 #include <pthread.h>
-#elif HAVE_PTH_H
-#include <pth.h>
 #endif
 
+#if YAZ_GNU_THREADS
+#include <pth.h>
 #endif
 
 #define NMEM_CHUNK (4*1024)
 static CRITICAL_SECTION critical_section;
 #define NMEM_ENTER EnterCriticalSection(&critical_section)
 #define NMEM_LEAVE LeaveCriticalSection(&critical_section)
-#endif
-
-#ifdef _REENTRANT
-#if HAVE_PTHREAD_H
+struct nmem_mutex {
+    CRITICAL_SECTION m_handle;
+};
+#elif YAZ_POSIX_THREADS
 static pthread_mutex_t nmem_mutex = PTHREAD_MUTEX_INITIALIZER;
 #define NMEM_ENTER pthread_mutex_lock(&nmem_mutex);
 #define NMEM_LEAVE pthread_mutex_unlock(&nmem_mutex);
-#elif HAVE_PTH_H
-static pth_mutex_t nmem_mutex;
+struct nmem_mutex {
+    pthread_mutex_t m_handle;
+};
+#elif YAZ_GNU_THREADS
+static pth_mutex_t nmem_mutex = PTH_MUTEX_INIT;
 #define NMEM_ENTER pth_mutex_acquire(&nmem_mutex, 0, 0)
 #define NMEM_LEAVE pth_mutex_release(&nmem_mutex)
-#else
-#error x
-#endif
+struct nmem_mutex {
+    pth_mutex_t m_handle;
+};
 #else
 #define NMEM_ENTER
 #define NMEM_LEAVE
-#endif
-
 struct nmem_mutex {
-#ifdef WIN32
-    CRITICAL_SECTION m_handle;
-#endif
-#if _REENTRANT
-
-#if HAVE_PTHREAD_H
-    pthread_mutex_t m_handle;
-#elif HAVE_PTH_H
-    pth_mutex_t m_handle;
-#endif
-
-#else
-    int m_handle;
-#endif
+    int dummy;
 };
+#endif
 
 YAZ_EXPORT void nmem_mutex_create(NMEM_MUTEX *p)
 {
@@ -175,8 +172,10 @@ YAZ_EXPORT void nmem_mutex_create(NMEM_MUTEX *p)
        *p = (NMEM_MUTEX) malloc (sizeof(**p));
 #ifdef WIN32
        InitializeCriticalSection(&(*p)->m_handle);
-#elif _REENTRANT
+#elif YAZ_POSIX_THREADS
        pthread_mutex_init (&(*p)->m_handle, 0);
+#elif YAZ_GNU_THREADS
+        pth_mutex_init (&(*p)->m_handle);
 #endif
     }
     NMEM_LEAVE;
@@ -188,7 +187,7 @@ YAZ_EXPORT void nmem_mutex_enter(NMEM_MUTEX p)
     {
 #ifdef WIN32
        EnterCriticalSection(&p->m_handle);
-#elif _REENTRANT
+#elif YAZ_POSIX_THREADS
        pthread_mutex_lock(&p->m_handle);
 #endif
     }
@@ -200,7 +199,7 @@ YAZ_EXPORT void nmem_mutex_leave(NMEM_MUTEX p)
     {
 #ifdef WIN32
        LeaveCriticalSection(&p->m_handle);
-#elif _REENTRANT
+#elif YAZ_POSIX_THREADS
        pthread_mutex_unlock(&p->m_handle);
 #endif
     }
@@ -479,10 +478,9 @@ void nmem_init (void)
     {
 #ifdef WIN32
        InitializeCriticalSection(&critical_section);
-#elif HAVE_PTH_H
-#ifdef __REENTRANT
-        pth_mutex_init (&nmem_mutex);
-#endif
+#elif YAZ_GNU_THREADS
+       yaz_log (LOG_LOG, "pth_init");
+        pth_init ();
 #endif
        nmem_active_no = 0;
        freelist = NULL;
@@ -514,3 +512,20 @@ void nmem_exit (void)
     }
 }
 
+
+#ifdef WIN32
+BOOL WINAPI DllMain (HINSTANCE hinstDLL,
+                    DWORD reason,
+                    LPVOID reserved)
+{
+    switch (reason)
+    {
+    case DLL_PROCESS_ATTACH:
+       nmem_init ();
+       break;
+    case DLL_PROCESS_DETACH:
+       nmem_exit ();
+    }
+    return TRUE;
+}
+#endif
\ No newline at end of file