CPPSERV


Home Projects Jobs Clientele Contact

cppserv


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

CWaiter is broken in SPTK [was: Problem with starting CPPSERV]



OK. I had to look at the bug. It is, indeed breakage caused by
SPTK upgrade.

Specific change in question is this:
http://gateway.total-knowledge.com/websvn/diff.php?repname=SPTK&path=%2Ftrunk%2Fsrc%2Futils%2FCWaiter.cpp&rev=230&sc=1

Attached patch reverses the breakage part. I'll commit it some time soon.
To be specific: it is expected that CWaiter::waitForSignal() caller
locks the
waiter. Otherwise the whole paradigm makes no sense.


-- 
Ilya A. Volynets-Evenbakh
Total Knowledge. CTO
http://www.total-knowledge.com

Index: src/utils/CWaiter.cpp
===================================================================
--- src/utils/CWaiter.cpp	(revision 265)
+++ src/utils/CWaiter.cpp	(working copy)
@@ -64,24 +64,22 @@
 }
 
 int CWaiter::waitForSignal(int timeout) {
-    int rc = 0;
 #ifndef _WIN32
-    pthread_mutex_lock(&m_waiter);
     if (timeout > 0) {
         int   secs  = timeout / 1000;
         int   msecs = timeout % 1000;
         struct timespec   abstime = { time(NULL) + secs, msecs * 1000L };
         int rc = pthread_cond_timedwait(&m_condition,&m_waiter,&abstime);
-        rc = -1;
+	if(rc != 0)
+	    return -1;
     } else 
         pthread_cond_wait(&m_condition,&m_waiter);
     
-    pthread_mutex_unlock(&m_waiter);
 #else
     WaitForSingleObject(m_waiter,timeout);
 #endif
 
-    return rc;
+    return 0;
 }
 
 void CWaiter::sendSignalNoLock() {

Authoright © Total Knowledge: 2001-2008