Browse Source

V4L/DVB: DiB3000MC: set FE to NULL after being freed

DiB3000MC: set FE to NULL after being freed

Signed-off-by: Patrick Boettcher <pb@linuxtv.org>
Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
Patrick Boettcher 19 years ago
parent
commit
4e66c97c92

+ 5 - 4
drivers/media/dvb/dvb-usb/dvb-usb-dvb.c

@@ -175,7 +175,7 @@ static int dvb_usb_fe_sleep(struct dvb_frontend *fe)
 int dvb_usb_fe_init(struct dvb_usb_device* d)
 {
 	if (d->props.frontend_attach == NULL) {
-		err("strange '%s' doesn't want to attach a frontend.",d->desc->name);
+		err("strange: '%s' doesn't want to attach a frontend.",d->desc->name);
 		return 0;
 	}
 
@@ -186,8 +186,7 @@ int dvb_usb_fe_init(struct dvb_usb_device* d)
 
 		if (dvb_register_frontend(&d->dvb_adap, d->fe)) {
 			err("Frontend registration failed.");
-			if (d->fe->ops.release)
-				d->fe->ops.release(d->fe);
+			dvb_frontend_detach(d->fe);
 			d->fe = NULL;
 			return -ENODEV;
 		}
@@ -203,7 +202,9 @@ int dvb_usb_fe_init(struct dvb_usb_device* d)
 
 int dvb_usb_fe_exit(struct dvb_usb_device *d)
 {
-	if (d->fe != NULL)
+	if (d->fe != NULL) {
 		dvb_unregister_frontend(d->fe);
+		dvb_frontend_detach(d->fe);
+	}
 	return 0;
 }

+ 3 - 2
drivers/media/dvb/frontends/dib3000mc.c

@@ -899,9 +899,10 @@ int dib3000mc_attach(struct i2c_adapter *i2c_adap, int no_of_demods, u8	default_
 	return 0;
 
 error:
-	for (k = 0; k < num; k++)
+	for (k = 0; k < num; k++) {
 		kfree(demod[k]->demodulator_priv);
-
+		demod[k] = NULL;
+	}
 	return -EINVAL;
 }