diff options
author | Richard Braun <rbraun@sceen.net> | 2017-06-11 11:44:13 +0200 |
---|---|---|
committer | Richard Braun <rbraun@sceen.net> | 2017-06-11 11:44:13 +0200 |
commit | 61df7f19dfe3b56abf6c4d00589414c60716ac2b (patch) | |
tree | d13ab48464b9d28ae12aba84b6bc3f083226400a | |
parent | b135fef80cf8f9addf5725881a2fe81cda404dfe (diff) |
kern/log: serialize the start of the log and shell threads
-rw-r--r-- | kern/kernel.c | 2 | ||||
-rw-r--r-- | kern/log.c | 12 |
2 files changed, 12 insertions, 2 deletions
diff --git a/kern/kernel.c b/kern/kernel.c index 30dff08e..f41956e8 100644 --- a/kern/kernel.c +++ b/kern/kernel.c @@ -21,7 +21,6 @@ #include <kern/llsync.h> #include <kern/log.h> #include <kern/percpu.h> -#include <kern/shell.h> #include <kern/sleepq.h> #include <kern/sref.h> #include <kern/task.h> @@ -52,7 +51,6 @@ kernel_main(void) llsync_setup(); sref_setup(); vm_page_info(); - shell_start(); log_start(); #ifdef X15_RUN_TEST_MODULE @@ -228,11 +228,13 @@ log_run(void *arg) { unsigned long flags, index, nr_overruns; struct log_record record; + bool start_shell; int error; (void)arg; nr_overruns = 0; + start_shell = true; spinlock_lock_intr_save(&log_lock, &flags); @@ -240,6 +242,16 @@ log_run(void *arg) for (;;) { while (index == cbuf_end(&log_cbuf)) { + /* + * Starting the shell after the log thread sleeps for the first + * time cleanly serializes log messages and shell prompt, making + * a clean ordered output. + */ + if (start_shell) { + shell_start(); + start_shell = false; + } + thread_sleep(&log_lock, &log_cbuf, "log_cbuf"); } |