Message ID | m3ei3oaxnd.fsf@blackfin.pond.sub.org |
---|---|
State | New |
Headers | show |
On Tue, May 24, 2011 at 06:09:10PM +0200, Markus Armbruster wrote: > 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> Tested-by: Alon Levy <alevy@redhat.com> > --- > hw/usb-ccid.c | 28 ++++++++-------------------- > 1 files changed, 8 insertions(+), 20 deletions(-) > > diff --git a/hw/usb-ccid.c b/hw/usb-ccid.c > index 079b4a2..ba2576b 100644 > --- a/hw/usb-ccid.c > +++ b/hw/usb-ccid.c > @@ -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; > -- > 1.7.2.3 >
diff --git a/hw/usb-ccid.c b/hw/usb-ccid.c index 079b4a2..ba2576b 100644 --- a/hw/usb-ccid.c +++ b/hw/usb-ccid.c @@ -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;
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> --- hw/usb-ccid.c | 28 ++++++++-------------------- 1 files changed, 8 insertions(+), 20 deletions(-)