summaryrefslogtreecommitdiff
path: root/linux/drivers
diff options
context:
space:
mode:
authorHolger Waechtler <devnull@localhost>2003-06-02 11:36:06 +0000
committerHolger Waechtler <devnull@localhost>2003-06-02 11:36:06 +0000
commitc28a30cf1dfe4df5abb1a5fa83c3e066569cb8fc (patch)
treef06e1c64f8c4b8e70dacd63a767e28d6843a3eaf /linux/drivers
parent9a742d320c1110a34904ad2a646922ae5ea4f254 (diff)
downloadmediapointer-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.c6
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;
}