]> granicus.if.org Git - libevent/commitdiff
nick found a race condition in the pthreads test case
authorNiels Provos <provos@gmail.com>
Thu, 19 Nov 2009 22:02:33 +0000 (22:02 +0000)
committerNiels Provos <provos@gmail.com>
Thu, 19 Nov 2009 22:02:33 +0000 (22:02 +0000)
svn:r1554

ChangeLog
test/regress_pthread.c

index be01b27bbf61dabee1432911c4da8495cd5d5499..7b2f34ea6c3b404c76c32e0282ef9739f87dffa9 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -52,6 +52,7 @@ Changes in 2.0.3-alpha:
  o Finally expose the IOCP-based bufferevent backend.  It passes its unit tests, but probably still has some bugs remaining.  Code by Nick Mathewson and Christopher Davis.
  o Numerous other bugfixes.
  o On FreeBSD and other OSes, connect can return ECONREFUSED immediately; instead of failing the function call, pretend with faileld in the callback.
+ o Fix a race condition in the pthreads test case; found by Nick Mathewson
 
 Changes in 2.0.2-alpha:
  o Add a new flag to bufferevents to make all callbacks automatically deferred.
index acfd4327d7176837ce5559aee58b4caf13f96c96..bc611d0f7b9c8c9b71eb8267c730a9a1fb3b769b 100644 (file)
@@ -73,9 +73,11 @@ basic_thread(void *arg)
        for (i = 0; i < 100; i++) {
                struct timeval tv;
                evutil_timerclear(&tv);
-               assert(evtimer_add(&ev, &tv) == 0);
 
                assert(pthread_mutex_lock(&cw.lock) == 0);
+               /* we need to make sure that even does not happen before
+                * we get to wait on the conditional variable */
+               assert(evtimer_add(&ev, &tv) == 0);
                assert(pthread_cond_wait(&cw.cond, &cw.lock) == 0);
                assert(pthread_mutex_unlock(&cw.lock) == 0);