Use poll, not settimer.
authorBrian Aker <brian@tangent.org>
Wed, 4 Apr 2012 15:49:53 +0000 (08:49 -0700)
committerBrian Aker <brian@tangent.org>
Wed, 4 Apr 2012 15:49:53 +0000 (08:49 -0700)
libmemcachedutil-1.0/pool.h
tests/libmemcached-1.0/pool.cc

index 682aed5fb602eb3890c683cbf02096c88ddc5591..a11117ca7ce83af1e73a6c946f1eca5ed8dbb1d7 100644 (file)
@@ -61,8 +61,8 @@ memcached_st* memcached_pool_pop(memcached_pool_st* pool,
                                  bool block,
                                  memcached_return_t* rc);
 LIBMEMCACHED_API
-memcached_return_t memcached_pool_push(memcached_pool_st* pool,
-                                       memcached_st* mmc);
+  memcached_return_t memcached_pool_push(memcached_pool_st* pool,
+                                         memcached_st* mmc);
 LIBMEMCACHED_API
   memcached_return_t memcached_pool_release(memcached_pool_st* pool, memcached_st* mmc);
 
index f1d013598e5d98f114a0508097d4687e04b730f7..10450dac846897b7b79c4c18427aac0a89cb65df 100644 (file)
@@ -53,6 +53,7 @@ using namespace libtest;
 #include <tests/pool.h>
 
 #include <pthread.h>
+#include <poll.h>
 
 #ifndef __INTEL_COMPILER
 #pragma GCC diagnostic ignored "-Wstrict-aliasing"
@@ -459,27 +460,9 @@ static void *worker_thread(void *ctx)
   return NULL;
 }
 
-static void sig_handler(int sig)
-{
-  switch (sig)
-  {
-  case SIGPROF:
-    set_running(false);
-    break;
-
-    break;
-
-  default:
-    Error << __func__ << " caught unknown signal";
-    break;
-  }
-}
-
 #define NUM_THREADS 20
 test_return_t regression_bug_962815(memcached_st *memc)
 {
-  test_skip_valgrind();
-
   pthread_t pid[NUM_THREADS];
 
   test_false(running());
@@ -493,24 +476,26 @@ test_return_t regression_bug_962815(memcached_st *memc)
 
   set_running(true);
 
-  struct itimerval new_value;
-  struct itimerval old_value;
-  memset(&new_value, 0, sizeof(itimerval));
-  memset(&old_value, 0, sizeof(itimerval));
-
-  new_value.it_interval.tv_sec=0;
-  new_value.it_interval.tv_usec=10*1000;
-  new_value.it_value.tv_sec=0;
-  new_value.it_value.tv_usec=10*1000;
-
-  test_true(signal(SIGPROF, sig_handler) != SIG_ERR);
-  test_compare(0, setitimer(ITIMER_PROF, &new_value, &old_value));
-
   for (size_t x=0; x < NUM_THREADS; x++)
   {
     test_compare(0, pthread_create(&pid[x], NULL, worker_thread, (void*)pool));
   }
 
+  {
+    pollfd fds[1];
+    memset(fds, 0, sizeof(pollfd));
+    fds[0].fd= -1; //STDIN_FILENO;
+    fds[0].events= POLLIN;
+    fds[0].revents= 0;
+
+    int active_fd;
+    if ((active_fd= poll(fds, 1, 5000)) == -1)
+    {
+      Error << "poll() failed with:" << strerror(errno);
+    }
+    set_running(false);
+  }
+
   for (size_t x=0; x < NUM_THREADS; x++)
   {
     test_compare(0, pthread_join(pid[x], NULL));
@@ -525,8 +510,6 @@ test_return_t regression_bug_962815(memcached_st *memc)
   {
     memcached_free(master);
   }
-  test_true(signal(SIGPROF, SIG_DFL) != SIG_ERR);
-  test_compare(0, setitimer(ITIMER_PROF, &old_value, NULL));
 
   return TEST_SUCCESS;
 }