Commit d63b21bf authored by Julia Lawall's avatar Julia Lawall Committed by Mauro Carvalho Chehab

[media] drivers/media/video/au0828/au0828-video.c: add missing video_device_release

At the point of the call to video_register_device, both dev->vbi_dev and
dev->vdev have been allocated, and so should be freed on failure.  The
error-handling code is moved to the end of the function, to avoid code
duplication.
Signed-off-by: default avatarJulia Lawall <Julia.Lawall@lip6.fr>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@redhat.com>
parent bcb2cf6e
...@@ -1881,7 +1881,7 @@ int au0828_analog_register(struct au0828_dev *dev, ...@@ -1881,7 +1881,7 @@ int au0828_analog_register(struct au0828_dev *dev,
int retval = -ENOMEM; int retval = -ENOMEM;
struct usb_host_interface *iface_desc; struct usb_host_interface *iface_desc;
struct usb_endpoint_descriptor *endpoint; struct usb_endpoint_descriptor *endpoint;
int i; int i, ret;
dprintk(1, "au0828_analog_register called!\n"); dprintk(1, "au0828_analog_register called!\n");
...@@ -1951,8 +1951,8 @@ int au0828_analog_register(struct au0828_dev *dev, ...@@ -1951,8 +1951,8 @@ int au0828_analog_register(struct au0828_dev *dev,
dev->vbi_dev = video_device_alloc(); dev->vbi_dev = video_device_alloc();
if (NULL == dev->vbi_dev) { if (NULL == dev->vbi_dev) {
dprintk(1, "Can't allocate vbi_device.\n"); dprintk(1, "Can't allocate vbi_device.\n");
kfree(dev->vdev); ret = -ENOMEM;
return -ENOMEM; goto err_vdev;
} }
/* Fill the video capture device struct */ /* Fill the video capture device struct */
...@@ -1971,8 +1971,8 @@ int au0828_analog_register(struct au0828_dev *dev, ...@@ -1971,8 +1971,8 @@ int au0828_analog_register(struct au0828_dev *dev,
if (retval != 0) { if (retval != 0) {
dprintk(1, "unable to register video device (error = %d).\n", dprintk(1, "unable to register video device (error = %d).\n",
retval); retval);
video_device_release(dev->vdev); ret = -ENODEV;
return -ENODEV; goto err_vbi_dev;
} }
/* Register the vbi device */ /* Register the vbi device */
...@@ -1981,13 +1981,18 @@ int au0828_analog_register(struct au0828_dev *dev, ...@@ -1981,13 +1981,18 @@ int au0828_analog_register(struct au0828_dev *dev,
if (retval != 0) { if (retval != 0) {
dprintk(1, "unable to register vbi device (error = %d).\n", dprintk(1, "unable to register vbi device (error = %d).\n",
retval); retval);
video_device_release(dev->vbi_dev); ret = -ENODEV;
video_device_release(dev->vdev); goto err_vbi_dev;
return -ENODEV;
} }
dprintk(1, "%s completed!\n", __func__); dprintk(1, "%s completed!\n", __func__);
return 0; return 0;
err_vbi_dev:
video_device_release(dev->vbi_dev);
err_vdev:
video_device_release(dev->vdev);
return ret;
} }
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment