usb-ccid: Plug memory leak on qdev exit()

ccid_initfn() allocates CCIDBus dynamically, but there is no exit
callback to free it.

Fix by getting rid of the allocation.

Signed-off-by: Markus Armbruster <armbru@redhat.com>
This commit is contained in:
Markus Armbruster 2011-05-24 18:09:10 +02:00 committed by Alon Levy
parent b7b8c61893
commit e13e973eed
1 changed files with 8 additions and 20 deletions

View File

@ -255,17 +255,18 @@ enum {
MIGRATION_MIGRATED,
};
typedef struct CCIDBus CCIDBus;
typedef struct USBCCIDState USBCCIDState;
typedef struct CCIDBus {
BusState qbus;
} CCIDBus;
#define MAX_PROTOCOL_SIZE 7
/*
* powered - defaults to true, changed by PowerOn/PowerOff messages
*/
struct USBCCIDState {
typedef struct USBCCIDState {
USBDevice dev;
CCIDBus *bus;
CCIDBus bus;
CCIDCardState *card;
CCIDCardInfo *cardinfo; /* caching the info pointer */
BulkIn bulk_in_pending[BULK_IN_PENDING_NUM]; /* circular */
@ -293,7 +294,7 @@ struct USBCCIDState {
uint8_t powered;
uint8_t notify_slot_change;
uint8_t debug;
};
} USBCCIDState;
/*
* CCID Spec chapter 4: CCID uses a standard device descriptor per Chapter 9,
@ -1113,10 +1114,6 @@ static void ccid_bus_dev_print(Monitor *mon, DeviceState *qdev, int indent)
}
}
struct CCIDBus {
BusState qbus;
};
static struct BusInfo ccid_bus_info = {
.name = "ccid-bus",
.size = sizeof(CCIDBus),
@ -1127,16 +1124,6 @@ static struct BusInfo ccid_bus_info = {
}
};
static CCIDBus *ccid_bus_new(DeviceState *dev)
{
CCIDBus *bus;
bus = FROM_QBUS(CCIDBus, qbus_create(&ccid_bus_info, dev, NULL));
bus->qbus.allow_hotplug = 1;
return bus;
}
void ccid_card_send_apdu_to_guest(CCIDCardState *card,
uint8_t *apdu, uint32_t len)
{
@ -1276,7 +1263,8 @@ static int ccid_initfn(USBDevice *dev)
{
USBCCIDState *s = DO_UPCAST(USBCCIDState, dev, dev);
s->bus = ccid_bus_new(&dev->qdev);
qbus_create_inplace(&s->bus.qbus, &ccid_bus_info, &dev->qdev, NULL);
s->bus.qbus.allow_hotplug = 1;
s->card = NULL;
s->cardinfo = NULL;
s->migration_state = MIGRATION_NONE;