From 85536f0a838b7c85672153718f03a0aa8cd86d78 Mon Sep 17 00:00:00 2001 From: Yongsul Oh Date: Tue, 20 Mar 2012 10:38:38 +0900 Subject: [PATCH] --- yaml --- r: 303808 b: refs/heads/master c: 124ef389256f71042ab5dedde98dee5e9999a635 h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/drivers/usb/gadget/composite.c | 13 +++++++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/[refs] b/[refs] index 52da48ad620c..799471bd5500 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: c2484606a105e35a9bbbfafa41ee32683b82cf5a +refs/heads/master: 124ef389256f71042ab5dedde98dee5e9999a635 diff --git a/trunk/drivers/usb/gadget/composite.c b/trunk/drivers/usb/gadget/composite.c index baaebf2830fc..4cb1801539a6 100644 --- a/trunk/drivers/usb/gadget/composite.c +++ b/trunk/drivers/usb/gadget/composite.c @@ -737,6 +737,19 @@ int usb_add_config(struct usb_composite_dev *cdev, status = bind(config); if (status < 0) { + while (!list_empty(&config->functions)) { + struct usb_function *f; + + f = list_first_entry(&config->functions, + struct usb_function, list); + list_del(&f->list); + if (f->unbind) { + DBG(cdev, "unbind function '%s'/%p\n", + f->name, f); + f->unbind(config, f); + /* may free memory for "f" */ + } + } list_del(&config->list); config->cdev = NULL; } else {