[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH v5 39/48] qtest: add qtest_add_abrt_handler()
From: |
Claudio Fontana |
Subject: |
Re: [Qemu-devel] [PATCH v5 39/48] qtest: add qtest_add_abrt_handler() |
Date: |
Mon, 5 Oct 2015 13:01:55 +0200 |
User-agent: |
Mozilla/5.0 (Windows NT 6.1; rv:38.0) Gecko/20100101 Thunderbird/38.2.0 |
On 02.10.2015 21:09, address@hidden wrote:
> From: Marc-André Lureau <address@hidden>
>
> Allow a test to add abort handlers, use GHook for all handlers.
>
> There is currently no way to remove a handler, but it could be
> later added if needed.
>
> Signed-off-by: Marc-André Lureau <address@hidden>
Reviewed-by: Claudio Fontana <address@hidden>
> ---
> tests/libqtest.c | 37 ++++++++++++++++++++++++-------------
> tests/libqtest.h | 2 ++
> 2 files changed, 26 insertions(+), 13 deletions(-)
>
> diff --git a/tests/libqtest.c b/tests/libqtest.c
> index e5188e0..4a3a6ad 100644
> --- a/tests/libqtest.c
> +++ b/tests/libqtest.c
> @@ -49,6 +49,7 @@ struct QTestState
> struct sigaction sigact_old; /* restored on exit */
> };
>
> +static GHookList abrt_hooks;
> static GList *qtest_instances;
> static struct sigaction sigact_old;
>
> @@ -112,10 +113,7 @@ static void kill_qemu(QTestState *s)
>
> static void sigabrt_handler(int signo)
> {
> - GList *elem;
> - for (elem = qtest_instances; elem; elem = elem->next) {
> - kill_qemu(elem->data);
> - }
> + g_hook_list_invoke(&abrt_hooks, FALSE);
> }
>
> static void setup_sigabrt_handler(void)
> @@ -136,6 +134,23 @@ static void cleanup_sigabrt_handler(void)
> sigaction(SIGABRT, &sigact_old, NULL);
> }
>
> +void qtest_add_abrt_handler(void (*fn), const void *data)
> +{
> + GHook *hook;
> +
> + /* Only install SIGABRT handler once */
> + if (!abrt_hooks.is_setup) {
> + g_hook_list_init(&abrt_hooks, sizeof(GHook));
> + setup_sigabrt_handler();
> + }
> +
> + hook = g_hook_alloc(&abrt_hooks);
> + hook->func = fn;
> + hook->data = (void *)data;
> +
> + g_hook_prepend(&abrt_hooks, hook);
> +}
> +
> QTestState *qtest_init(const char *extra_args)
> {
> QTestState *s;
> @@ -156,12 +171,7 @@ QTestState *qtest_init(const char *extra_args)
> sock = init_socket(socket_path);
> qmpsock = init_socket(qmp_socket_path);
>
> - /* Only install SIGABRT handler once */
> - if (!qtest_instances) {
> - setup_sigabrt_handler();
> - }
> -
> - qtest_instances = g_list_prepend(qtest_instances, s);
> + qtest_add_abrt_handler(kill_qemu, s);
>
> s->qemu_pid = fork();
> if (s->qemu_pid == 0) {
> @@ -209,13 +219,14 @@ QTestState *qtest_init(const char *extra_args)
>
> void qtest_quit(QTestState *s)
> {
> + qtest_instances = g_list_remove(qtest_instances, s);
> + g_hook_destroy_link(&abrt_hooks, g_hook_find_data(&abrt_hooks, TRUE, s));
> +
> /* Uninstall SIGABRT handler on last instance */
> - if (qtest_instances && !qtest_instances->next) {
> + if (!qtest_instances) {
> cleanup_sigabrt_handler();
> }
>
> - qtest_instances = g_list_remove(qtest_instances, s);
> -
> kill_qemu(s);
> close(s->fd);
> close(s->qmp_fd);
> diff --git a/tests/libqtest.h b/tests/libqtest.h
> index ec42031..f02c07c 100644
> --- a/tests/libqtest.h
> +++ b/tests/libqtest.h
> @@ -427,6 +427,8 @@ void qtest_add_data_func(const char *str, const void
> *data, void (*fn));
> g_free(path); \
> } while (0)
>
> +void qtest_add_abrt_handler(void (*fn), const void *data);
> +
> /**
> * qtest_start:
> * @args: other arguments to pass to QEMU
>
- [Qemu-devel] [PATCH v5 34/48] ivshmem-server: fix hugetlbfs support, (continued)
- [Qemu-devel] [PATCH v5 34/48] ivshmem-server: fix hugetlbfs support, marcandre . lureau, 2015/10/08
- [Qemu-devel] [PATCH v5 24/48] ivshmem: shmfd can be 0, marcandre . lureau, 2015/10/08
- [Qemu-devel] [PATCH v5 29/48] ivshmem: error on too many eventfd received, marcandre . lureau, 2015/10/08
- [Qemu-devel] [PATCH v5 33/48] ivshmem-server: use a uint16 for client ID, marcandre . lureau, 2015/10/08
- [Qemu-devel] [PATCH v5 31/48] contrib: add ivshmem client and server, marcandre . lureau, 2015/10/08
- [Qemu-devel] [PATCH v5 36/48] ivshmem: add check on protocol version in QEMU, marcandre . lureau, 2015/10/08
- [Qemu-devel] [PATCH v5 39/48] qtest: add qtest_add_abrt_handler(), marcandre . lureau, 2015/10/08
- Re: [Qemu-devel] [PATCH v5 39/48] qtest: add qtest_add_abrt_handler(),
Claudio Fontana <=
- [Qemu-devel] [PATCH v5 40/48] glib-compat: add 2.38/2.40/2.46 asserts, marcandre . lureau, 2015/10/08
[Qemu-devel] [PATCH v5 46/48] ivshmem: rename MSI eventfd_table, marcandre . lureau, 2015/10/08
[Qemu-devel] [PATCH v5 06/48] ivshmem: remove unnecessary dup(), marcandre . lureau, 2015/10/08
[Qemu-devel] [PATCH v5 14/48] ivshmem: remove useless ivshmem_update_irq() val argument, marcandre . lureau, 2015/10/08
[Qemu-devel] [PATCH v5 03/48] ivhsmem: read do not accept more than sizeof(long), marcandre . lureau, 2015/10/08