immediately kill, then wait
authorChristian Grothoff <christian@grothoff.org>
Wed, 4 Nov 2009 14:13:53 +0000 (14:13 +0000)
committerChristian Grothoff <christian@grothoff.org>
Wed, 4 Nov 2009 14:13:53 +0000 (14:13 +0000)
src/arm/gnunet-service-arm.c

index bfb3896bf99123f29f173ed8266f670e2fff2c91..2760f91563856198cb9c437b4831ef424c87fed1 100644 (file)
@@ -625,11 +625,16 @@ maint (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
   if (0 != (tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN))
     {
       GNUNET_log (GNUNET_ERROR_TYPE_INFO, _("Stopping all services\n"));
-      while (NULL != (pos = running))
+      pos = running;
+      while (NULL != pos)
         {
-          running = pos->next;
           if (0 != PLIBC_KILL (pos->pid, SIGTERM))
             GNUNET_log_strerror (GNUNET_ERROR_TYPE_WARNING, "kill");
+          pos = pos->next;
+        }
+      while (NULL != (pos = running))
+        {
+          running = pos->next;
           if (GNUNET_OK != GNUNET_OS_process_wait(pos->pid))
             GNUNET_log_strerror (GNUNET_ERROR_TYPE_WARNING, "waitpid");
           free_entry (pos);