Cleaned up structures for holes.
[m6w6/libmemcached] / tests / server.c
index 8a7970a0d48809032413aa9da5c95b6b9ed4acc7..8679c6249a621a8ece2219bdf03a412897358308 100644 (file)
@@ -4,14 +4,16 @@
 
 #define TEST_PORT_BASE MEMCACHED_DEFAULT_PORT+10 
 
+#include "libmemcached/libmemcached_config.h"
+
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
 #include <time.h>
 #include <assert.h>
+#include <signal.h>
 #include <libmemcached/memcached.h>
 #include <unistd.h>
-#include "libmemcached/libmemcached_config.h"
 #include "server.h"
 
 void server_startup(server_startup_st *construct)
@@ -38,10 +40,32 @@ void server_startup(server_startup_st *construct)
         int count;
         int status;
 
-        if(x == 0) {
+        sprintf(buffer, "/tmp/%umemc.pid", x);
+        if (access(buffer, F_OK) == 0) 
+        {
+          FILE *fp= fopen(buffer, "r");
+          remove(buffer);
+
+          if (fp != NULL)
+          {
+            if (fgets(buffer, sizeof(buffer), fp) != NULL)
+            { 
+              pid_t pid = atol(buffer);
+              if (pid != 0) 
+                kill(pid, SIGTERM);
+            }
+
+            fclose(fp);
+          }
+        }
+
+        if (x == 0)
+        {
           sprintf(buffer, "%s -d -P /tmp/%umemc.pid -t 1 -p %u -U %u -m 128",
                     MEMCACHED_BINARY, x, x + TEST_PORT_BASE, x + TEST_PORT_BASE);
-        } else {
+        } 
+        else
+        {
           sprintf(buffer, "%s -d -P /tmp/%umemc.pid -t 1 -p %u -U %u",
                     MEMCACHED_BINARY, x, x + TEST_PORT_BASE, x + TEST_PORT_BASE);
         }
@@ -82,8 +106,9 @@ void server_shutdown(server_startup_st *construct)
     {
       char buffer[1024]; /* Nothing special for number */
       sprintf(buffer, "cat /tmp/%umemc.pid | xargs kill", x);
-      system(buffer);
-
+      /* We have to check the return value of this or the compiler will yell */
+      int sys_ret= system(buffer);
+      assert(sys_ret != -1); 
       sprintf(buffer, "/tmp/%umemc.pid", x);
       unlink(buffer);
     }