]> Projects (at) Tadryanom (dot) Me - AdrOS.git/commitdiff
user/init: stress test waitpid with 100 children
authorTulio A M Mendes <[email protected]>
Sat, 7 Feb 2026 21:19:51 +0000 (18:19 -0300)
committerTulio A M Mendes <[email protected]>
Sat, 7 Feb 2026 21:19:51 +0000 (18:19 -0300)
user/init.c

index 52ef1fb86fb15a5d7f8f91ff3a28991d831b18a7..1245dc81d262c7b202c5ec12f5f70ab3f8ed54af 100644 (file)
@@ -119,20 +119,32 @@ void _start(void) {
         (void)sys_write(1, bad, (uint32_t)(sizeof(bad) - 1));
     }
 
-    int child = sys_spawn();
-    if (child < 0) {
-        static const char smsg[] = "[init] spawn failed\n";
-        (void)sys_write(1, smsg, (uint32_t)(sizeof(smsg) - 1));
-        sys_exit(2);
+    enum { NCHILD = 100 };
+    int children[NCHILD];
+    for (int i = 0; i < NCHILD; i++) {
+        children[i] = sys_spawn();
+        if (children[i] < 0) {
+            static const char smsg[] = "[init] spawn failed\n";
+            (void)sys_write(1, smsg, (uint32_t)(sizeof(smsg) - 1));
+            sys_exit(2);
+        }
     }
 
-    int st = 0;
-    int wp = sys_waitpid(child, &st, 0);
-    if (wp == child && st == 42) {
-        static const char wmsg[] = "[init] waitpid OK\n";
+    int ok = 1;
+    for (int i = 0; i < NCHILD; i++) {
+        int st = 0;
+        int wp = sys_waitpid(children[i], &st, 0);
+        if (wp != children[i] || st != 42) {
+            ok = 0;
+            break;
+        }
+    }
+
+    if (ok) {
+        static const char wmsg[] = "[init] waitpid OK (100 children, explicit)\n";
         (void)sys_write(1, wmsg, (uint32_t)(sizeof(wmsg) - 1));
     } else {
-        static const char wbad[] = "[init] waitpid failed\n";
+        static const char wbad[] = "[init] waitpid failed (100 children, explicit)\n";
         (void)sys_write(1, wbad, (uint32_t)(sizeof(wbad) - 1));
     }
     sys_exit(0);