CE & init use new streams IPC
All checks were successful
Build documentation / build-and-deploy (push) Successful in 3m30s
All checks were successful
Build documentation / build-and-deploy (push) Successful in 3m30s
This commit is contained in:
@@ -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 $@
|
||||||
|
|||||||
65
ce/interp.c
65
ce/interp.c
@@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
Reference in New Issue
Block a user