hw/usb: Use lock guard macros
Use qemu LOCK_GUARD macros from "qemu/lockable.h" in hw/usb/ccid-card-emulated.c, saves manual unlock calls. Signed-off-by: Amey Narkhede <ameynarkhede03@gmail.com> Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com> Message-id: 20200923134327.576139-1-ameynarkhede03@gmail.com Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
This commit is contained in:
parent
f00ff136ee
commit
5c43b603a2
@ -30,6 +30,7 @@
|
|||||||
#include <libcacard.h>
|
#include <libcacard.h>
|
||||||
|
|
||||||
#include "qemu/thread.h"
|
#include "qemu/thread.h"
|
||||||
|
#include "qemu/lockable.h"
|
||||||
#include "qemu/main-loop.h"
|
#include "qemu/main-loop.h"
|
||||||
#include "qemu/module.h"
|
#include "qemu/module.h"
|
||||||
#include "ccid.h"
|
#include "ccid.h"
|
||||||
@ -244,34 +245,34 @@ static void *handle_apdu_thread(void* arg)
|
|||||||
card->quit_apdu_thread = 0; /* debugging */
|
card->quit_apdu_thread = 0; /* debugging */
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
qemu_mutex_lock(&card->vreader_mutex);
|
WITH_QEMU_LOCK_GUARD(&card->vreader_mutex) {
|
||||||
while (!QSIMPLEQ_EMPTY(&card->guest_apdu_list)) {
|
while (!QSIMPLEQ_EMPTY(&card->guest_apdu_list)) {
|
||||||
event = QSIMPLEQ_FIRST(&card->guest_apdu_list);
|
event = QSIMPLEQ_FIRST(&card->guest_apdu_list);
|
||||||
assert((unsigned long)event > 1000);
|
assert((unsigned long)event > 1000);
|
||||||
QSIMPLEQ_REMOVE_HEAD(&card->guest_apdu_list, entry);
|
QSIMPLEQ_REMOVE_HEAD(&card->guest_apdu_list, entry);
|
||||||
if (event->p.data.type != EMUL_GUEST_APDU) {
|
if (event->p.data.type != EMUL_GUEST_APDU) {
|
||||||
DPRINTF(card, 1, "unexpected message in handle_apdu_thread\n");
|
DPRINTF(card, 1, "unexpected message in handle_apdu_thread\n");
|
||||||
|
g_free(event);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (card->reader == NULL) {
|
||||||
|
DPRINTF(card, 1, "reader is NULL\n");
|
||||||
|
g_free(event);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
recv_len = sizeof(recv_data);
|
||||||
|
reader_status = vreader_xfr_bytes(card->reader,
|
||||||
|
event->p.data.data, event->p.data.len,
|
||||||
|
recv_data, &recv_len);
|
||||||
|
DPRINTF(card, 2, "got back apdu of length %d\n", recv_len);
|
||||||
|
if (reader_status == VREADER_OK) {
|
||||||
|
emulated_push_response_apdu(card, recv_data, recv_len);
|
||||||
|
} else {
|
||||||
|
emulated_push_error(card, reader_status);
|
||||||
|
}
|
||||||
g_free(event);
|
g_free(event);
|
||||||
continue;
|
|
||||||
}
|
}
|
||||||
if (card->reader == NULL) {
|
|
||||||
DPRINTF(card, 1, "reader is NULL\n");
|
|
||||||
g_free(event);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
recv_len = sizeof(recv_data);
|
|
||||||
reader_status = vreader_xfr_bytes(card->reader,
|
|
||||||
event->p.data.data, event->p.data.len,
|
|
||||||
recv_data, &recv_len);
|
|
||||||
DPRINTF(card, 2, "got back apdu of length %d\n", recv_len);
|
|
||||||
if (reader_status == VREADER_OK) {
|
|
||||||
emulated_push_response_apdu(card, recv_data, recv_len);
|
|
||||||
} else {
|
|
||||||
emulated_push_error(card, reader_status);
|
|
||||||
}
|
|
||||||
g_free(event);
|
|
||||||
}
|
}
|
||||||
qemu_mutex_unlock(&card->vreader_mutex);
|
|
||||||
}
|
}
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
@ -365,7 +366,7 @@ static void card_event_handler(EventNotifier *notifier)
|
|||||||
EmulEvent *event, *next;
|
EmulEvent *event, *next;
|
||||||
|
|
||||||
event_notifier_test_and_clear(&card->notifier);
|
event_notifier_test_and_clear(&card->notifier);
|
||||||
qemu_mutex_lock(&card->event_list_mutex);
|
QEMU_LOCK_GUARD(&card->event_list_mutex);
|
||||||
QSIMPLEQ_FOREACH_SAFE(event, &card->event_list, entry, next) {
|
QSIMPLEQ_FOREACH_SAFE(event, &card->event_list, entry, next) {
|
||||||
DPRINTF(card, 2, "event %s\n", emul_event_to_string(event->p.gen.type));
|
DPRINTF(card, 2, "event %s\n", emul_event_to_string(event->p.gen.type));
|
||||||
switch (event->p.gen.type) {
|
switch (event->p.gen.type) {
|
||||||
@ -398,7 +399,6 @@ static void card_event_handler(EventNotifier *notifier)
|
|||||||
g_free(event);
|
g_free(event);
|
||||||
}
|
}
|
||||||
QSIMPLEQ_INIT(&card->event_list);
|
QSIMPLEQ_INIT(&card->event_list);
|
||||||
qemu_mutex_unlock(&card->event_list_mutex);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int init_event_notifier(EmulatedState *card, Error **errp)
|
static int init_event_notifier(EmulatedState *card, Error **errp)
|
||||||
|
Loading…
Reference in New Issue
Block a user