summaryrefslogtreecommitdiff
path: root/sys/dev
diff options
context:
space:
mode:
authoraugustss <augustss@NetBSD.org>2001-11-29 11:07:12 +0000
committeraugustss <augustss@NetBSD.org>2001-11-29 11:07:12 +0000
commitc01e71bac5226ba53ae3b75f0678fdbc0815cf8a (patch)
tree4000dd7f65ed6add65d23d6ce56d8d3ae2c0f6ff /sys/dev
parent6da382e0f089559a8fa0898a4e7abd809d7b400f (diff)
Plug a memory leak in an error case.
Diffstat (limited to 'sys/dev')
-rw-r--r--sys/dev/usb/ulpt.c14
1 files changed, 12 insertions, 2 deletions
diff --git a/sys/dev/usb/ulpt.c b/sys/dev/usb/ulpt.c
index 9342584f67a..c7ec70f4446 100644
--- a/sys/dev/usb/ulpt.c
+++ b/sys/dev/usb/ulpt.c
@@ -1,4 +1,4 @@
-/* $NetBSD: ulpt.c,v 1.44 2001/11/13 06:24:55 lukem Exp $ */
+/* $NetBSD: ulpt.c,v 1.45 2001/11/29 11:07:12 augustss Exp $ */
/* $FreeBSD: src/sys/dev/usb/ulpt.c,v 1.24 1999/11/17 22:33:44 n_hibma Exp $ */
/*
@@ -43,7 +43,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ulpt.c,v 1.44 2001/11/13 06:24:55 lukem Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ulpt.c,v 1.45 2001/11/29 11:07:12 augustss Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -547,8 +547,18 @@ ulptopen(dev_t dev, int flag, int mode, struct proc *p)
sc->sc_in_xfer2 = usbd_alloc_xfer(sc->sc_udev);
if (sc->sc_in_xfer1 == NULL || sc->sc_in_xfer2 == NULL) {
error = ENOMEM;
+ if (sc->sc_in_xfer1 != NULL) {
+ usbd_free_xfer(sc->sc_in_xfer1);
+ sc->sc_in_xfer1 = NULL;
+ }
+ if (sc->sc_in_xfer2 != NULL) {
+ usbd_free_xfer(sc->sc_in_xfer2);
+ sc->sc_in_xfer2 = NULL;
+ }
usbd_close_pipe(sc->sc_out_pipe);
sc->sc_out_pipe = NULL;
+ usbd_close_pipe(sc->sc_in_pipe);
+ sc->sc_in_pipe = NULL;
sc->sc_state = 0;
goto done;
}