]> Zhao Yanbai Git Server - minix.git/commitdiff
pm - fix sched interaction
authorBen Gras <ben@minix3.org>
Wed, 19 May 2010 13:22:29 +0000 (13:22 +0000)
committerBen Gras <ben@minix3.org>
Wed, 19 May 2010 13:22:29 +0000 (13:22 +0000)
For coredumping processes, PM forgets to inform SCHED that the
process has vanished, causing future fork()s to fail.

servers/pm/forkexit.c
servers/pm/main.c

index 3406296c2d8f5fc4bc702d184bd3e2e7940c2137..a7900800f72d117c02d49a40572cf97502656ad7 100644 (file)
@@ -364,6 +364,17 @@ int dump_core;                     /* flag indicating whether to dump core */
  */
   int r;
 
+  if((r = sched_stop(rmp)) != OK) {
+       /* If the scheduler refuses to give up scheduling, there is
+        * little we can do, except report it. This may cause problems
+        * later on, if this scheduler is asked to schedule another proc
+        * that has an endpoint->schedproc mapping identical to the proc
+        * we just tried to stop scheduling.
+       */
+       printf("PM: The scheduler did not want to give up "
+               "scheduling %s, ret=%d.\n", rmp->mp_name, r);
+  } 
+
   /* For core dumps, now is the right time to try to contact the parent. */
   if (dump_core)
        zombify(rmp);
index 6047e382cdd78328f99f94e17d48a38b92443642..d2a55320c083bb3fed9d69274a49c280c7c71a32 100644 (file)
@@ -479,17 +479,6 @@ PRIVATE void handle_fs_reply()
        break;
 
   case PM_EXIT_REPLY:
-       if((r = sched_stop(rmp)) != OK) {
-               /* If the scheduler refuses to give up scheduling, there is
-                * little we can do, except report it. This may cause problems
-                * later on, if this scheduler is asked to schedule another proc
-                * that has an endpoint->schedproc mapping identical to the proc
-                * we just tried to stop scheduling.
-                */
-               printf("PM: The scheduler did not want to give up "
-                       "scheduling %s, ret=%d.\n", rmp->mp_name, r);
-       }
-
        exit_restart(rmp, FALSE /*dump_core*/);
 
        break;