* 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.5 2001-11-06 17:08:05 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++/yaz-pdu-assoc.h>
+#include <yaz++/yaz-socket-manager.h>
Yaz_PDU_AssocThread::Yaz_PDU_AssocThread(
IYazSocketObservable *socketObservable)
{
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;
{
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));
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