qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH] usb-ccid: Plug memory leak on qdev exit()


From: Alon Levy
Subject: Re: [Qemu-devel] [PATCH] usb-ccid: Plug memory leak on qdev exit()
Date: Tue, 24 May 2011 19:34:26 +0300
User-agent: Mutt/1.5.21 (2010-09-15)

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 <address@hidden>

Tested-by: Alon Levy <address@hidden>

> ---
>  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
> 



reply via email to

[Prev in Thread] Current Thread [Next in Thread]