CE & init use new streams IPC
All checks were successful
Build documentation / build-and-deploy (push) Successful in 3m30s

This commit is contained in:
2026-03-18 22:40:11 +01:00
parent 80a728f04b
commit 4c26fcfc11
3 changed files with 33 additions and 36 deletions

View File

@@ -2,4 +2,4 @@
set -x set -x
qemu-system-x86_64 -M pc -m 4G -serial stdio -enable-kvm -cdrom mop3.iso -smp 1 -boot d $@ qemu-system-x86_64 -M pc -m 4G -serial stdio -enable-kvm -cdrom mop3.iso -smp 4 -boot d $@

View File

@@ -340,37 +340,34 @@ static void help (struct context* context) {
cprintf (context, "quit\n"); cprintf (context, "quit\n");
} }
/* static void cmd_cancel_proc (void* arg) { */ static void cmd_cancel_proc (void* arg) {
/* int pid = (int)(uintptr_t)arg; */ int pid = (int)(uintptr_t)arg;
/* int ch = 0; */ uint8_t ch = 0;
for (;;) {
if (stream_read (process_get_pgid (), STREAM_IN, &ch, 1) > 0 && ch == KB_CTRL ('C'))
break;
else
sched ();
}
/* for (;;) { */ kill (pid);
/* ch = kb_read_key_nonblock (); */ }
/* if (ch == KB_CTRL ('C')) */ static void cmd_collect_proc (void* arg) {
/* break; */ #define RECV_MAX (1024 * 16)
/* else */
/* sched (); */
/* } */
/* kill (pid); */ int pgid = (int)(uintptr_t)arg;
/* } */
/* static void cmd_collect_proc (void* arg) { */ char recv[RECV_MAX];
/* #define RECV_MAX (1024 * 16) */ int n;
for (;;) {
/* (void)arg; */ if ((n = stream_read (pgid, STREAM_OUT, (void*)recv, sizeof (recv) - 1)) > 0)
stream_write (process_get_pgid (), STREAM_OUT, (void*)recv, n);
/* char recv[RECV_MAX]; */ else
/* for (;;) { */ sched ();
/* memset (recv, 0, sizeof (recv)); */ }
/* if (mail_receive_nonblock (&recv, sizeof (recv) - 1) == ST_OK) */ }
/* mail_send (process_get_exec_pgid (), recv, strlen (recv)); */
/* else */
/* sched (); */
/* } */
/* } */
static void execute_cmd (struct ast_cmd* cmd, struct context* context) { static void execute_cmd (struct ast_cmd* cmd, struct context* context) {
if (strcmp (cmd->name, "echo") == 0) { if (strcmp (cmd->name, "echo") == 0) {
@@ -427,6 +424,8 @@ static void execute_cmd (struct ast_cmd* cmd, struct context* context) {
return; return;
} }
int pgid = get_procgroup (pid);
for (int i = 0; i < cmd->arg_count; i++) { for (int i = 0; i < cmd->arg_count; i++) {
char* arg = cmd->args[i]; char* arg = cmd->args[i];
char *key, *value; char *key, *value;
@@ -439,20 +438,20 @@ static void execute_cmd (struct ast_cmd* cmd, struct context* context) {
key = arg; key = arg;
value = sep + 1; value = sep + 1;
env_set (pid, key, value, strlen (value) + 1); env_set (pgid, key, value, strlen (value) + 1);
} }
} }
/* struct process_data* collect_pdata = process_spawn (&cmd_collect_proc, NULL); */ struct process_data* collect_pdata = process_spawn (&cmd_collect_proc, (void*)(uintptr_t)pgid);
/* struct process_data* cancel_pdata = process_spawn (&cmd_cancel_proc, (void*)pid); */ struct process_data* cancel_pdata = process_spawn (&cmd_cancel_proc, (void*)(uintptr_t)pid);
exec_partial_fini (pid); exec_partial_fini (pid);
wait_for_pid (pid); wait_for_pid (pid);
/* kill (collect_pdata->pid); */ kill (collect_pdata->pid);
/* process_data_free (collect_pdata); */ process_data_free (collect_pdata);
/* kill (cancel_pdata->pid); */ kill (cancel_pdata->pid);
/* process_data_free (cancel_pdata); */ process_data_free (cancel_pdata);
} }
} }

View File

@@ -19,8 +19,6 @@ void receiver (void* arg) {
char recv[RECV_MAX]; char recv[RECV_MAX];
int n; int n;
for (;;) { for (;;) {
memset (recv, 0, sizeof (recv));
n = stream_read (ce_pgid, STREAM_OUT, (void*)recv, RECV_MAX - 1); n = stream_read (ce_pgid, STREAM_OUT, (void*)recv, RECV_MAX - 1);
if (n > 0) if (n > 0)