From baefce1ddaab2702403e5cd0e456180562f4f2fd Mon Sep 17 00:00:00 2001 From: Tulio A M Mendes Date: Sat, 7 Feb 2026 18:19:51 -0300 Subject: [PATCH] user/init: stress test waitpid with 100 children --- user/init.c | 32 ++++++++++++++++++++++---------- 1 file changed, 22 insertions(+), 10 deletions(-) diff --git a/user/init.c b/user/init.c index 52ef1fb..1245dc8 100644 --- a/user/init.c +++ b/user/init.c @@ -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); -- 2.43.0