[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] [PATCH 1/4] mini-os: Fixed shutdown thread



On 02/06/2014 18:49, Thomas Leonard wrote:
> Before, it read "" and started a shutdown immediately. Now, it waits for
> a non-empty value and then actually shuts down.
>
> Signed-off-by: Thomas Leonard <talex5@xxxxxxxxx>
> ---
>  extras/mini-os/kernel.c | 16 ++++++++++++----
>  extras/mini-os/main.c   |  2 +-
>  2 files changed, 13 insertions(+), 5 deletions(-)
>
> diff --git a/extras/mini-os/kernel.c b/extras/mini-os/kernel.c
> index ea409f4..386be8f 100644
> --- a/extras/mini-os/kernel.c
> +++ b/extras/mini-os/kernel.c
> @@ -69,6 +69,8 @@ void setup_xen_features(void)
>  __attribute__((weak)) void app_shutdown(unsigned reason)
>  {
>      printk("Shutdown requested: %d\n", reason);
> +    struct sched_shutdown sched_shutdown = { .reason = reason };
> +    HYPERVISOR_sched_op(SCHEDOP_shutdown, &sched_shutdown);
>  }
>  
>  static void shutdown_thread(void *p)
> @@ -76,12 +78,18 @@ 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);
> +        if (err)
> +            free(err);

NULL is a perfectly valid parameter to free(). Please drop the if()

> +        if (shutdown)
> +        {
> +            free(shutdown);
> +            shutdown = NULL;
> +        }

Here as well.

~Andrew

>          xenbus_wait_for_watch(&events);
>      }
>      err = xenbus_unwatch_path_token(XBT_NIL, path, token);
> @@ -106,7 +114,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;
>  }
>  
> diff --git a/extras/mini-os/main.c b/extras/mini-os/main.c
> index 73eb6fb..aec0586 100644
> --- a/extras/mini-os/main.c
> +++ b/extras/mini-os/main.c
> @@ -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;
>  }


_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.