From: Li Qiang <liq3ea@gmail.com>
To: kraxel@redhat.com
Cc: qemu-devel@nongnu.org, liq3ea@163.com, Li Qiang <liq3ea@gmail.com>
Subject: [Qemu-devel] [PATCH 2/2] hw: ccid-card-emulated: cleanup resource when realize in error path
Date: Fri, 19 Oct 2018 03:50:36 -0700 [thread overview]
Message-ID: <1539946236-18028-3-git-send-email-liq3ea@gmail.com> (raw)
In-Reply-To: <1539946236-18028-1-git-send-email-liq3ea@gmail.com>
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
next prev parent reply other threads:[~2018-10-19 10:50 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
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 [this message]
2018-10-19 11:56 ` [Qemu-devel] [PATCH 2/2] hw: ccid-card-emulated: cleanup resource when realize in error path Philippe Mathieu-Daudé
2018-10-29 9:46 ` [Qemu-devel] [PATCH 0/2] hw: ccid-card-emulated: fix some resources leak Gerd Hoffmann
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1539946236-18028-3-git-send-email-liq3ea@gmail.com \
--to=liq3ea@gmail.com \
--cc=kraxel@redhat.com \
--cc=liq3ea@163.com \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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).