qemu-devel
[Top][All Lists]
Advanced

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

Re: [Qemu-devel] [PATCH] qtest: implement QTEST_STOP


From: Anthony Liguori
Subject: Re: [Qemu-devel] [PATCH] qtest: implement QTEST_STOP
Date: Fri, 05 Oct 2012 16:20:15 -0500
User-agent: Notmuch/0.13.2+93~ged93d79 (http://notmuchmail.org) Emacs/23.3.1 (x86_64-pc-linux-gnu)

Paolo Bonzini <address@hidden> writes:

> It is quite difficult to debug qtest test cases without extra wrapper
> scripts for QEMU or similar.  This patch adds a simple environment
> variable-based trigger that sends a STOP signal to the QEMU instance
> under test, before attempting to connect to its QMP session.
>
> This will block execution of the testcase and give time to attach a
> debugger to the stopped QEMU process.
>
> Signed-off-by: Paolo Bonzini <address@hidden>

Applied. Thanks.

Regards,

Anthony Liguori

> ---
>  tests/libqtest.c | 38 +++++++++++++++++++++++++-------------
>  1 file modificato, 25 inserzioni(+), 13 rimozioni(-)
>
> diff --git a/tests/libqtest.c b/tests/libqtest.c
> index 02d0392..71b84c1 100644
> --- a/tests/libqtest.c
> +++ b/tests/libqtest.c
> @@ -85,6 +85,22 @@ static int socket_accept(int sock)
>      return ret;
>  }
>  
> +static pid_t qtest_qemu_pid(QTestState *s)
> +{
> +    FILE *f;
> +    char buffer[1024];
> +    pid_t pid = -1;
> +
> +    f = fopen(s->pid_file, "r");
> +    if (f) {
> +        if (fgets(buffer, sizeof(buffer), f)) {
> +            pid = atoi(buffer);
> +        }
> +    }
> +    fclose(f);
> +    return pid;
> +}
> +
>  QTestState *qtest_init(const char *extra_args)
>  {
>      QTestState *s;
> @@ -136,25 +152,21 @@ QTestState *qtest_init(const char *extra_args)
>      qtest_qmp(s, "");
>      qtest_qmp(s, "{ 'execute': 'qmp_capabilities' }");
>  
> +    if (getenv("QTEST_STOP")) {
> +        kill(qtest_qemu_pid(s), SIGSTOP);
> +    }
> +
>      return s;
>  }
>  
>  void qtest_quit(QTestState *s)
>  {
> -    FILE *f;
> -    char buffer[1024];
> -
> -    f = fopen(s->pid_file, "r");
> -    if (f) {
> -        if (fgets(buffer, sizeof(buffer), f)) {
> -            pid_t pid = atoi(buffer);
> -            int status = 0;
> -
> -            kill(pid, SIGTERM);
> -            waitpid(pid, &status, 0);
> -        }
> +    int status;
>  
> -        fclose(f);
> +    pid_t pid = qtest_qemu_pid(s);
> +    if (pid != -1) {
> +        kill(pid, SIGTERM);
> +        waitpid(pid, &status, 0);
>      }
>  
>      unlink(s->pid_file);
> -- 
> 1.7.12



reply via email to

[Prev in Thread] Current Thread [Next in Thread]