* [Qemu-devel] [PATCH 0/2] hw: ccid-card-emulated: fix some resources leak
@ 2018-10-19 10:50 Li Qiang
2018-10-19 10:50 ` [Qemu-devel] [PATCH 1/2] hw: ccid-card-emulated: introduce clean_event_notifier Li Qiang
` (2 more replies)
0 siblings, 3 replies; 5+ messages in thread
From: Li Qiang @ 2018-10-19 10:50 UTC (permalink / raw)
To: kraxel; +Cc: qemu-devel, liq3ea, Li Qiang
Li Qiang (2):
hw: ccid-card-emulated: introduce clean_event_notifier
hw: ccid-card-emulated: cleanup resource when realize in error path
hw/usb/ccid-card-emulated.c | 27 +++++++++++++++++++++------
1 file changed, 21 insertions(+), 6 deletions(-)
--
1.8.3.1
^ permalink raw reply [flat|nested] 5+ messages in thread
* [Qemu-devel] [PATCH 1/2] hw: ccid-card-emulated: introduce clean_event_notifier
2018-10-19 10:50 [Qemu-devel] [PATCH 0/2] hw: ccid-card-emulated: fix some resources leak Li Qiang
@ 2018-10-19 10:50 ` Li Qiang
2018-10-19 10:50 ` [Qemu-devel] [PATCH 2/2] hw: ccid-card-emulated: cleanup resource when realize in error path Li Qiang
2018-10-29 9:46 ` [Qemu-devel] [PATCH 0/2] hw: ccid-card-emulated: fix some resources leak Gerd Hoffmann
2 siblings, 0 replies; 5+ messages in thread
From: Li Qiang @ 2018-10-19 10:50 UTC (permalink / raw)
To: kraxel; +Cc: qemu-devel, liq3ea, Li Qiang
Call it in device unrealize function.
Signed-off-by: Li Qiang <liq3ea@gmail.com>
---
hw/usb/ccid-card-emulated.c | 7 +++++++
1 file changed, 7 insertions(+)
diff --git a/hw/usb/ccid-card-emulated.c b/hw/usb/ccid-card-emulated.c
index 5c8b3c9..b356edb 100644
--- a/hw/usb/ccid-card-emulated.c
+++ b/hw/usb/ccid-card-emulated.c
@@ -409,6 +409,12 @@ static int init_event_notifier(EmulatedState *card, Error **errp)
return 0;
}
+static void clean_event_notifier(EmulatedState *card)
+{
+ event_notifier_set_handler(&card->notifier, NULL);
+ event_notifier_cleanup(&card->notifier);
+}
+
#define CERTIFICATES_DEFAULT_DB "/etc/pki/nssdb"
#define CERTIFICATES_ARGS_TEMPLATE\
"db=\"%s\" use_hw=no soft=(,Virtual Reader,CAC,,%s,%s,%s)"
@@ -556,6 +562,7 @@ static void emulated_unrealize(CCIDCardState *base, Error **errp)
qemu_cond_signal(&card->handle_apdu_cond);
qemu_thread_join(&card->apdu_thread_id);
+ clean_event_notifier(card);
/* threads exited, can destroy all condvars/mutexes */
qemu_cond_destroy(&card->handle_apdu_cond);
qemu_mutex_destroy(&card->handle_apdu_mutex);
--
1.8.3.1
^ permalink raw reply related [flat|nested] 5+ messages in thread
* [Qemu-devel] [PATCH 2/2] hw: ccid-card-emulated: cleanup resource when realize in error path
2018-10-19 10:50 [Qemu-devel] [PATCH 0/2] hw: ccid-card-emulated: fix some resources leak Li Qiang
2018-10-19 10:50 ` [Qemu-devel] [PATCH 1/2] hw: ccid-card-emulated: introduce clean_event_notifier Li Qiang
@ 2018-10-19 10:50 ` Li Qiang
2018-10-19 11:56 ` Philippe Mathieu-Daudé
2018-10-29 9:46 ` [Qemu-devel] [PATCH 0/2] hw: ccid-card-emulated: fix some resources leak Gerd Hoffmann
2 siblings, 1 reply; 5+ messages in thread
From: Li Qiang @ 2018-10-19 10:50 UTC (permalink / raw)
To: kraxel; +Cc: qemu-devel, liq3ea, Li Qiang
Signed-off-by: Li Qiang <liq3ea@gmail.com>
---
hw/usb/ccid-card-emulated.c | 20 ++++++++++++++------
1 file changed, 14 insertions(+), 6 deletions(-)
diff --git a/hw/usb/ccid-card-emulated.c b/hw/usb/ccid-card-emulated.c
index b356edb..25976ed 100644
--- a/hw/usb/ccid-card-emulated.c
+++ b/hw/usb/ccid-card-emulated.c
@@ -499,7 +499,7 @@ static void emulated_realize(CCIDCardState *base, Error **errp)
card->reader = NULL;
card->quit_apdu_thread = 0;
if (init_event_notifier(card, errp) < 0) {
- return;
+ goto out1;
}
card->backend = 0;
@@ -513,7 +513,7 @@ static void emulated_realize(CCIDCardState *base, Error **errp)
for (ptable = backend_enum_table; ptable->name != NULL; ++ptable) {
error_append_hint(errp, "%s\n", ptable->name);
}
- return;
+ goto out2;
}
/* TODO: a passthru backened that works on local machine. third card type?*/
@@ -523,31 +523,39 @@ static void emulated_realize(CCIDCardState *base, Error **errp)
} else {
error_setg(errp, "%s: you must provide all three certs for"
" certificates backend", TYPE_EMULATED_CCID);
- return;
+ goto out2;
}
} else {
if (card->backend != BACKEND_NSS_EMULATED) {
error_setg(errp, "%s: bad backend specified. The options are:%s"
" (default), %s.", TYPE_EMULATED_CCID,
BACKEND_NSS_EMULATED_NAME, BACKEND_CERTIFICATES_NAME);
- return;
+ goto out2;
}
if (card->cert1 != NULL || card->cert2 != NULL || card->cert3 != NULL) {
error_setg(errp, "%s: unexpected cert parameters to nss emulated "
"backend", TYPE_EMULATED_CCID);
- return;
+ goto out2;
}
/* default to mirroring the local hardware readers */
ret = wrap_vcard_emul_init(NULL);
}
if (ret != VCARD_EMUL_OK) {
error_setg(errp, "%s: failed to initialize vcard", TYPE_EMULATED_CCID);
- return;
+ goto out2;
}
qemu_thread_create(&card->event_thread_id, "ccid/event", event_thread,
card, QEMU_THREAD_JOINABLE);
qemu_thread_create(&card->apdu_thread_id, "ccid/apdu", handle_apdu_thread,
card, QEMU_THREAD_JOINABLE);
+
+out2:
+ clean_event_notifier(card);
+out1:
+ qemu_cond_destroy(&card->handle_apdu_cond);
+ qemu_mutex_destroy(&card->handle_apdu_mutex);
+ qemu_mutex_destroy(&card->vreader_mutex);
+ qemu_mutex_destroy(&card->event_list_mutex);
}
static void emulated_unrealize(CCIDCardState *base, Error **errp)
--
1.8.3.1
^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [Qemu-devel] [PATCH 2/2] hw: ccid-card-emulated: cleanup resource when realize in error path
2018-10-19 10:50 ` [Qemu-devel] [PATCH 2/2] hw: ccid-card-emulated: cleanup resource when realize in error path Li Qiang
@ 2018-10-19 11:56 ` Philippe Mathieu-Daudé
0 siblings, 0 replies; 5+ messages in thread
From: Philippe Mathieu-Daudé @ 2018-10-19 11:56 UTC (permalink / raw)
To: Li Qiang, kraxel; +Cc: liq3ea, qemu-devel
On 19/10/2018 12:50, Li Qiang wrote:
> Signed-off-by: Li Qiang <liq3ea@gmail.com>
> ---
> hw/usb/ccid-card-emulated.c | 20 ++++++++++++++------
> 1 file changed, 14 insertions(+), 6 deletions(-)
>
> diff --git a/hw/usb/ccid-card-emulated.c b/hw/usb/ccid-card-emulated.c
> index b356edb..25976ed 100644
> --- a/hw/usb/ccid-card-emulated.c
> +++ b/hw/usb/ccid-card-emulated.c
> @@ -499,7 +499,7 @@ static void emulated_realize(CCIDCardState *base, Error **errp)
> card->reader = NULL;
> card->quit_apdu_thread = 0;
> if (init_event_notifier(card, errp) < 0) {
> - return;
> + goto out1;
> }
>
> card->backend = 0;
> @@ -513,7 +513,7 @@ static void emulated_realize(CCIDCardState *base, Error **errp)
> for (ptable = backend_enum_table; ptable->name != NULL; ++ptable) {
> error_append_hint(errp, "%s\n", ptable->name);
> }
> - return;
> + goto out2;
> }
>
> /* TODO: a passthru backened that works on local machine. third card type?*/
> @@ -523,31 +523,39 @@ static void emulated_realize(CCIDCardState *base, Error **errp)
> } else {
> error_setg(errp, "%s: you must provide all three certs for"
> " certificates backend", TYPE_EMULATED_CCID);
> - return;
> + goto out2;
> }
> } else {
> if (card->backend != BACKEND_NSS_EMULATED) {
> error_setg(errp, "%s: bad backend specified. The options are:%s"
> " (default), %s.", TYPE_EMULATED_CCID,
> BACKEND_NSS_EMULATED_NAME, BACKEND_CERTIFICATES_NAME);
> - return;
> + goto out2;
> }
> if (card->cert1 != NULL || card->cert2 != NULL || card->cert3 != NULL) {
> error_setg(errp, "%s: unexpected cert parameters to nss emulated "
> "backend", TYPE_EMULATED_CCID);
> - return;
> + goto out2;
> }
> /* default to mirroring the local hardware readers */
> ret = wrap_vcard_emul_init(NULL);
> }
> if (ret != VCARD_EMUL_OK) {
> error_setg(errp, "%s: failed to initialize vcard", TYPE_EMULATED_CCID);
> - return;
> + goto out2;
> }
> qemu_thread_create(&card->event_thread_id, "ccid/event", event_thread,
> card, QEMU_THREAD_JOINABLE);
> qemu_thread_create(&card->apdu_thread_id, "ccid/apdu", handle_apdu_thread,
> card, QEMU_THREAD_JOINABLE);
> +
> +out2:
You might call this 'cleanup' ...
> + clean_event_notifier(card);
> +out1:
... and this one 'out'.
> + qemu_cond_destroy(&card->handle_apdu_cond);
> + qemu_mutex_destroy(&card->handle_apdu_mutex);
> + qemu_mutex_destroy(&card->vreader_mutex);
> + qemu_mutex_destroy(&card->event_list_mutex);
> }
>
> static void emulated_unrealize(CCIDCardState *base, Error **errp)
>
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [Qemu-devel] [PATCH 0/2] hw: ccid-card-emulated: fix some resources leak
2018-10-19 10:50 [Qemu-devel] [PATCH 0/2] hw: ccid-card-emulated: fix some resources leak Li Qiang
2018-10-19 10:50 ` [Qemu-devel] [PATCH 1/2] hw: ccid-card-emulated: introduce clean_event_notifier Li Qiang
2018-10-19 10:50 ` [Qemu-devel] [PATCH 2/2] hw: ccid-card-emulated: cleanup resource when realize in error path Li Qiang
@ 2018-10-29 9:46 ` Gerd Hoffmann
2 siblings, 0 replies; 5+ messages in thread
From: Gerd Hoffmann @ 2018-10-29 9:46 UTC (permalink / raw)
To: Li Qiang; +Cc: qemu-devel, liq3ea
On Fri, Oct 19, 2018 at 03:50:34AM -0700, Li Qiang wrote:
>
> Li Qiang (2):
> hw: ccid-card-emulated: introduce clean_event_notifier
> hw: ccid-card-emulated: cleanup resource when realize in error path
Added to usb queue.
thanks,
Gerd
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2018-10-29 9:47 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2018-10-19 10:50 [Qemu-devel] [PATCH 0/2] hw: ccid-card-emulated: fix some resources leak Li Qiang
2018-10-19 10:50 ` [Qemu-devel] [PATCH 1/2] hw: ccid-card-emulated: introduce clean_event_notifier Li Qiang
2018-10-19 10:50 ` [Qemu-devel] [PATCH 2/2] hw: ccid-card-emulated: cleanup resource when realize in error path Li Qiang
2018-10-19 11:56 ` Philippe Mathieu-Daudé
2018-10-29 9:46 ` [Qemu-devel] [PATCH 0/2] hw: ccid-card-emulated: fix some resources leak Gerd Hoffmann
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).