Use AM_LDFLAGS instead of LDFLAGS
[yazpp-moved-to-github.git] / src / yaz-pdu-assoc-thread.cpp
index 5f7a20e..ea63b6a 100644 (file)
@@ -2,24 +2,32 @@
  * Copyright (c) 1998-2001, Index Data.
  * See the file LICENSE for details.
  * 
- * $Log: yaz-pdu-assoc-thread.cpp,v $
- * Revision 1.1  2001-03-26 14:43:49  adam
- * New threaded PDU association.
- *
+ * $Id: yaz-pdu-assoc-thread.cpp,v 1.6 2002-10-09 12:50:26 adam Exp $
  */
 
-#include <yaz/log.h>
-#include <yaz/tcpip.h>
+#ifdef WIN32
+#define USE_THREADS 1
+#endif
 
-#include <yaz++/yaz-pdu-assoc.h>
-#include <yaz++/yaz-socket-manager.h>
+#if YAZ_POSIX_THREADS
+#define USE_THREADS 1
+#endif
+
+#if USE_THREADS
 
 #ifdef WIN32
 #include <process.h>
 #else
 #include <pthread.h>
+#include <unistd.h>
 #endif
 
+#include <errno.h>
+#include <yaz/log.h>
+#include <yaz/tcpip.h>
+
+#include <yaz++/pdu-assoc.h>
+#include <yaz++/socket-manager.h>
 
 Yaz_PDU_AssocThread::Yaz_PDU_AssocThread(
     IYazSocketObservable *socketObservable)
@@ -37,10 +45,10 @@ events(void *p)
 {
     Yaz_SocketManager *s = (Yaz_SocketManager *) p;
     
-    logf (LOG_LOG, "thread started");
+    yaz_log (LOG_LOG, "thread started");
     while (s->processEvent() > 0)
        ;
-    logf (LOG_LOG, "thread finished");
+    yaz_log (LOG_LOG, "thread finished");
 #ifdef WIN32
 #else
     return 0;
@@ -51,7 +59,11 @@ void Yaz_PDU_AssocThread::childNotify(COMSTACK cs)
 {
     Yaz_SocketManager *socket_observable = new Yaz_SocketManager;
     Yaz_PDU_Assoc *new_observable = new Yaz_PDU_Assoc (socket_observable, cs);
-    
+
+    new_observable->m_next = m_children;
+    m_children = new_observable;
+    new_observable->m_parent = this;
+
     /// Clone PDU Observer
     new_observable->m_PDU_Observer =
        m_PDU_Observer->sessionNotify(new_observable, cs_fileno(cs));
@@ -64,9 +76,13 @@ void Yaz_PDU_AssocThread::childNotify(COMSTACK cs)
         exit (1);
     }
 #else
-    pthread_t type;
+    pthread_t tid;
 
-    int id = pthread_create (&type, 0, events, socket_observable);
-    yaz_log (LOG_LOG, "pthread_create returned id=%d", id);
+    int id = pthread_create (&tid, 0, events, socket_observable);
+    if (id)
+       yaz_log (LOG_ERRNO|LOG_FATAL, "pthread_create returned id=%d", id);
+    else
+       pthread_detach (tid);
 #endif
 }
+#endif