mirror of
https://github.com/xen-project/xen.git
synced 2026-10-28 02:01:24 +01:00
mini-os: fixed shutdown thread
Before, it read "" and started a shutdown immediately. Now, it waits for a non-empty value and then actually shuts down. Acked-by: Samuel Thibault <samuel.thibault@ens-lyon.org> [talex5@gmail.com: avoid declaration-after-statement in kernel.c] Signed-off-by: Thomas Leonard <talex5@gmail.com>
This commit is contained in:
1 parent
bf11bf940f
commit
1f04e5b76c
2 files changed
+8
-4
No files matched your search
@@ -68,7 +68,9 @@ void setup_xen_features(void)
|
||||
/* This should be overridden by the application we are linked against. */
|
||||
__attribute__((weak)) void app_shutdown(unsigned reason)
|
||||
{
|
||||
struct sched_shutdown sched_shutdown = { .reason = reason };
|
||||
printk("Shutdown requested: %d\n", reason);
|
||||
HYPERVISOR_sched_op(SCHEDOP_shutdown, &sched_shutdown);
|
||||
}
|
||||
|
||||
static void shutdown_thread(void *p)
|
||||
@@ -76,12 +78,14 @@ static void shutdown_thread(void *p)
|
||||
const char *path = "control/shutdown";
|
||||
const char *token = path;
|
||||
xenbus_event_queue events = NULL;
|
||||
char *shutdown, *err;
|
||||
char *shutdown = NULL, *err;
|
||||
unsigned int shutdown_reason;
|
||||
xenbus_watch_path_token(XBT_NIL, path, token, &events);
|
||||
while ((err = xenbus_read(XBT_NIL, path, &shutdown)) != NULL)
|
||||
while ((err = xenbus_read(XBT_NIL, path, &shutdown)) != NULL || !strcmp(shutdown, ""))
|
||||
{
|
||||
free(err);
|
||||
free(shutdown);
|
||||
shutdown = NULL;
|
||||
xenbus_wait_for_watch(&events);
|
||||
}
|
||||
err = xenbus_unwatch_path_token(XBT_NIL, path, token);
|
||||
@@ -106,7 +110,7 @@ static void shutdown_thread(void *p)
|
||||
/* This should be overridden by the application we are linked against. */
|
||||
__attribute__((weak)) int app_main(start_info_t *si)
|
||||
{
|
||||
printk("Dummy main: start_info=%p\n", si);
|
||||
printk("kernel.c: dummy main: start_info=%p\n", si);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
@@ -185,7 +185,7 @@ void _exit(int ret)
|
||||
|
||||
int app_main(start_info_t *si)
|
||||
{
|
||||
printk("Dummy main: start_info=%p\n", si);
|
||||
printk("main.c: dummy main: start_info=%p\n", si);
|
||||
main_thread = create_thread("main", call_main, si);
|
||||
return 0;
|
||||
}
|
||||
|
||||