Quellcode durchsuchen

V4L/DVB (6475): Fix some troubles at list handling

- priv->count were wrong. Should be incremented since the first usage;
- forgot to use list_del() to remove the driver;
- Release memory if an error occurs during _attach

Thanks to Aidan Thornton <makosoft@googlemail.com> for pointing this.

Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
Mauro Carvalho Chehab vor 17 Jahren
Ursprung
Commit
1808a698a8
1 geänderte Dateien mit 3 neuen und 1 gelöschten Zeilen
  1. 3 1
      drivers/media/video/tuner-xc2028.c

+ 3 - 1
drivers/media/video/tuner-xc2028.c

@@ -639,6 +639,8 @@ static int xc2028_dvb_release(struct dvb_frontend *fe)
 	priv->count--;
 
 	if (!priv->count) {
+		list_del(&priv->xc2028_list);
+
 		if (priv->ctrl.fname)
 			kfree(priv->ctrl.fname);
 
@@ -728,7 +730,6 @@ int xc2028_attach(struct dvb_frontend *fe, struct i2c_adapter* i2c_adap,
 	list_for_each_entry(priv, &xc2028_list, xc2028_list) {
 		if (priv->dev == dev) {
 			dev = NULL;
-			priv->count++;
 		}
 	}
 
@@ -754,6 +755,7 @@ int xc2028_attach(struct dvb_frontend *fe, struct i2c_adapter* i2c_adap,
 
 		list_add_tail(&priv->xc2028_list,&xc2028_list);
 	}
+	priv->count++;
 
 	memcpy(&fe->ops.tuner_ops, &xc2028_dvb_tuner_ops,
 					       sizeof(xc2028_dvb_tuner_ops));