projects
/
yazpp-moved-to-github.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Update news
[yazpp-moved-to-github.git]
/
src
/
yaz-pdu-assoc-thread.cpp
diff --git
a/src/yaz-pdu-assoc-thread.cpp
b/src/yaz-pdu-assoc-thread.cpp
index
294aa60
..
d11176a
100644
(file)
--- a/
src/yaz-pdu-assoc-thread.cpp
+++ b/
src/yaz-pdu-assoc-thread.cpp
@@
-1,8
+1,6
@@
-/*
- * Copyright (c) 1998-2004, Index Data.
+/* This file is part of the yazpp toolkit.
+ * Copyright (C) 1998-2010 Index Data and Mike Taylor
* See the file LICENSE for details.
* See the file LICENSE for details.
- *
- * $Id: yaz-pdu-assoc-thread.cpp,v 1.12 2005-06-25 15:53:19 adam Exp $
*/
#ifdef WIN32
*/
#ifdef WIN32
@@
-30,11
+28,18
@@
#include <yaz/log.h>
#include <yaz/tcpip.h>
#include <yaz/log.h>
#include <yaz/tcpip.h>
-#include <yaz++/pdu-assoc.h>
-#include <yaz++/socket-manager.h>
+#include <yazpp/pdu-assoc.h>
+#include <yazpp/socket-manager.h>
using namespace yazpp_1;
using namespace yazpp_1;
+class worker {
+public:
+ SocketManager *m_mgr;
+ PDU_Assoc *m_assoc;
+ void run();
+};
+
PDU_AssocThread::PDU_AssocThread(
ISocketObservable *socketObservable)
: PDU_Assoc(socketObservable)
PDU_AssocThread::PDU_AssocThread(
ISocketObservable *socketObservable)
: PDU_Assoc(socketObservable)
@@
-42,6
+47,16
@@
PDU_AssocThread::PDU_AssocThread(
}
}
+void worker::run()
+{
+ yaz_log (YLOG_LOG, "thread started");
+ while (this->m_mgr->processEvent() > 0)
+ ;
+ yaz_log (YLOG_LOG, "thread finished");
+ delete this->m_mgr;
+ delete this;
+}
+
#ifdef WIN32
void __cdecl
#else
#ifdef WIN32
void __cdecl
#else
@@
-49,12
+64,8
@@
void *
#endif
events(void *p)
{
#endif
events(void *p)
{
- SocketManager *s = (SocketManager *) p;
-
- yaz_log (YLOG_LOG, "thread started");
- while (s->processEvent() > 0)
- ;
- yaz_log (YLOG_LOG, "thread finished");
+ worker *w = (worker *) p;
+ w->run();
#ifdef WIN32
#else
return 0;
#ifdef WIN32
#else
return 0;
@@
-66,16
+77,25
@@
void PDU_AssocThread::childNotify(COMSTACK cs)
SocketManager *socket_observable = new SocketManager;
PDU_Assoc *new_observable = new PDU_Assoc (socket_observable, cs);
SocketManager *socket_observable = new SocketManager;
PDU_Assoc *new_observable = new 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));
/// Clone PDU Observer
new_observable->m_PDU_Observer =
m_PDU_Observer->sessionNotify(new_observable, cs_fileno(cs));
+
+ if (!new_observable->m_PDU_Observer)
+ {
+ new_observable->shutdown();
+ delete new_observable;
+ delete socket_observable;
+ return;
+ }
+
+ worker *w = new worker;
+ w->m_assoc = new_observable;
+ w->m_mgr = socket_observable;
+
#ifdef WIN32
long t_id;
#ifdef WIN32
long t_id;
- t_id = _beginthread (events, 0, socket_observable);
+ t_id = _beginthread (events, 0, w);
if (t_id == -1)
{
yaz_log (YLOG_FATAL|YLOG_ERRNO, "_beginthread failed");
if (t_id == -1)
{
yaz_log (YLOG_FATAL|YLOG_ERRNO, "_beginthread failed");
@@
-84,7
+104,7
@@
void PDU_AssocThread::childNotify(COMSTACK cs)
#else
pthread_t tid;
#else
pthread_t tid;
- int id = pthread_create (&tid, 0, events, socket_observable);
+ int id = pthread_create (&tid, 0, events, w);
if (id)
yaz_log (YLOG_ERRNO|YLOG_FATAL, "pthread_create returned id=%d", id);
else
if (id)
yaz_log (YLOG_ERRNO|YLOG_FATAL, "pthread_create returned id=%d", id);
else
@@
-95,6
+115,7
@@
void PDU_AssocThread::childNotify(COMSTACK cs)
/*
* Local variables:
* c-basic-offset: 4
/*
* Local variables:
* c-basic-offset: 4
+ * c-file-style: "Stroustrup"
* indent-tabs-mode: nil
* End:
* vim: shiftwidth=4 tabstop=8 expandtab
* indent-tabs-mode: nil
* End:
* vim: shiftwidth=4 tabstop=8 expandtab