diff options
author | Patrick Boettcher <pb@linuxtv.org> | 2006-02-07 03:49:12 -0500 |
---|---|---|
committer | Mauro Carvalho Chehab <mchehab@infradead.org> | 2006-02-07 03:53:05 -0500 |
commit | eba841ed1d00e13144c1063b304c1537b774a747 (patch) | |
tree | 9ded43e6b6789163169e75e8521ee33ed4a4d39a | |
parent | 63631366dc3e159d1209838fb074d5df4edac76a (diff) |
V4L/DVB (3312): FIX: Multiple usage of VP7045-based devices
Reassigning function pointers in a static led to infinite loops when using
multiple VP7045-based device at the same time on one system. Using kmalloc'd
copies for reassignments is better.
Signed-off-by: Patrick Boettcher <pb@linuxtv.org>
Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
-rw-r--r-- | drivers/media/dvb/dvb-usb/vp7045-fe.c | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/drivers/media/dvb/dvb-usb/vp7045-fe.c b/drivers/media/dvb/dvb-usb/vp7045-fe.c index 5242cca5db4a..9999336aeeb6 100644 --- a/drivers/media/dvb/dvb-usb/vp7045-fe.c +++ b/drivers/media/dvb/dvb-usb/vp7045-fe.c | |||
@@ -23,10 +23,11 @@ | |||
23 | 23 | ||
24 | struct vp7045_fe_state { | 24 | struct vp7045_fe_state { |
25 | struct dvb_frontend fe; | 25 | struct dvb_frontend fe; |
26 | struct dvb_frontend_ops ops; | ||
27 | |||
26 | struct dvb_usb_device *d; | 28 | struct dvb_usb_device *d; |
27 | }; | 29 | }; |
28 | 30 | ||
29 | |||
30 | static int vp7045_fe_read_status(struct dvb_frontend* fe, fe_status_t *status) | 31 | static int vp7045_fe_read_status(struct dvb_frontend* fe, fe_status_t *status) |
31 | { | 32 | { |
32 | struct vp7045_fe_state *state = fe->demodulator_priv; | 33 | struct vp7045_fe_state *state = fe->demodulator_priv; |
@@ -150,7 +151,8 @@ struct dvb_frontend * vp7045_fe_attach(struct dvb_usb_device *d) | |||
150 | goto error; | 151 | goto error; |
151 | 152 | ||
152 | s->d = d; | 153 | s->d = d; |
153 | s->fe.ops = &vp7045_fe_ops; | 154 | memcpy(&s->ops, &vp7045_fe_ops, sizeof(struct dvb_frontend_ops)); |
155 | s->fe.ops = &s->ops; | ||
154 | s->fe.demodulator_priv = s; | 156 | s->fe.demodulator_priv = s; |
155 | 157 | ||
156 | goto success; | 158 | goto success; |