Commit 1808a698 authored by Mauro Carvalho Chehab's avatar Mauro Carvalho Chehab

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: default avatarMauro Carvalho Chehab <mchehab@infradead.org>
parent 882876bf
...@@ -639,6 +639,8 @@ static int xc2028_dvb_release(struct dvb_frontend *fe) ...@@ -639,6 +639,8 @@ static int xc2028_dvb_release(struct dvb_frontend *fe)
priv->count--; priv->count--;
if (!priv->count) { if (!priv->count) {
list_del(&priv->xc2028_list);
if (priv->ctrl.fname) if (priv->ctrl.fname)
kfree(priv->ctrl.fname); kfree(priv->ctrl.fname);
...@@ -728,7 +730,6 @@ int xc2028_attach(struct dvb_frontend *fe, struct i2c_adapter* i2c_adap, ...@@ -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) { list_for_each_entry(priv, &xc2028_list, xc2028_list) {
if (priv->dev == dev) { if (priv->dev == dev) {
dev = NULL; dev = NULL;
priv->count++;
} }
} }
...@@ -754,6 +755,7 @@ int xc2028_attach(struct dvb_frontend *fe, struct i2c_adapter* i2c_adap, ...@@ -754,6 +755,7 @@ int xc2028_attach(struct dvb_frontend *fe, struct i2c_adapter* i2c_adap,
list_add_tail(&priv->xc2028_list,&xc2028_list); list_add_tail(&priv->xc2028_list,&xc2028_list);
} }
priv->count++;
memcpy(&fe->ops.tuner_ops, &xc2028_dvb_tuner_ops, memcpy(&fe->ops.tuner_ops, &xc2028_dvb_tuner_ops,
sizeof(xc2028_dvb_tuner_ops)); sizeof(xc2028_dvb_tuner_ops));
......
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