diff options
author | Holger Waechtler <devnull@localhost> | 2003-06-02 11:36:06 +0000 |
---|---|---|
committer | Holger Waechtler <devnull@localhost> | 2003-06-02 11:36:06 +0000 |
commit | c28a30cf1dfe4df5abb1a5fa83c3e066569cb8fc (patch) | |
tree | f06e1c64f8c4b8e70dacd63a767e28d6843a3eaf /linux/drivers | |
parent | 9a742d320c1110a34904ad2a646922ae5ea4f254 (diff) | |
download | mediapointer-dvb-s2-c28a30cf1dfe4df5abb1a5fa83c3e066569cb8fc.tar.gz mediapointer-dvb-s2-c28a30cf1dfe4df5abb1a5fa83c3e066569cb8fc.tar.bz2 |
Deadlock. Bei einem blockierenden FE_GET_EVENT wird der fe-thread am
weiterarbeiten gehindert. Folglich auch keine weiteren Events...
found by wjoost
Diffstat (limited to 'linux/drivers')
-rw-r--r-- | linux/drivers/media/dvb/dvb-core/dvb_frontend.c | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/linux/drivers/media/dvb/dvb-core/dvb_frontend.c b/linux/drivers/media/dvb/dvb-core/dvb_frontend.c index ebc550147..2f7594734 100644 --- a/linux/drivers/media/dvb/dvb-core/dvb_frontend.c +++ b/linux/drivers/media/dvb/dvb-core/dvb_frontend.c @@ -268,8 +268,14 @@ int dvb_frontend_get_event (struct dvb_frontend_data *fe, if (flags & O_NONBLOCK) return -EWOULDBLOCK; + up(&fe->sem); + ret = wait_event_interruptible (events->wait_queue, events->eventw != events->eventr); + + if (down_interruptible (&fe->sem)) + return -ERESTARTSYS; + if (ret < 0) return ret; } |