Hi,
Stefan Taferner wrote:
I'm facing a deadlock situation, when the below code is modified to ignore the "r == 0" cases (= original code in vdr-xine-0.7.2):
r==0 means that there is no data available. Are you sure you want to block in xread until data is available?
Yes, because there is nothing else to do at that point in time.
This function is used to retrieve the result of a "remote procedure call" (e. g. in execFuncGetPTS()).
If you want to ignore the r==0 cases, why don't you simply open the file in blocking mode (remove O_NONBLOCK from xineLib.c:2160) ?
O_NONBLOCK is just used to be able to open the FIFO while xine still needs to connect to the FIFO. After opening the FIFOs, O_NONBLOCK is removed in lines 2164 and 2165.
But the FIFO used in the above example (fd_result) has never been opended nonblocking (see line 2162).
If you want to wait for data (and keep the non-blocking) you should wait some time (200ms or so). If you are not sure about the cPoller, use the select function with a timeout. Then you get exact error codes and all that.
All I'd like to do is to block until the requested data is ready and "r == 0" should just indicate that the FIFO was closed by xine.
But for any reason, "r == 0" happens still without the FIFO beeing closed. Can someone tell me, how to handle this situation properly?
Bye.