<div dir="ltr">I also see a call to libwebsocket_service_timeout_check() followed by polldf->revents = 0;<div>That can cause the same problem. There may be others.</div></div><div class="gmail_extra"><br><div class="gmail_quote">On Sat, May 30, 2015 at 1:14 PM, Bruce Perens <span dir="ltr"><<a href="mailto:bruce@perens.com" target="_blank">bruce@perens.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Libwebsockets can lose an event in a poll loop, if another of the FDs in the poll FD array is closed during that iteration of the poll loop.<div><br></div><div>At the end of<b> libsocket_service_fd()</b>, <b>libwebsocket_close_and_free_session()</b> causes a callback to the application with <b>LWS_CALLBACK_DEL_POLL_FD</b>. After that, it sets <b>pollfd->revents = 0;</b></div><div>But the application has changed the poll fd array in response to <b>LWS_CALLBACK_DEL_POLL_FD</b>, and <b>pollfd</b> now points to different data than it previously did. Thus, <b>revents</b> is zeroed for the wrong FD.</div><div><br></div><div>The symptom of this is that poll() returns a positive integer, and the number of FDs with revents set is less than the value poll() returned.</div><div><br></div><div>    Thanks</div><span class="HOEnZb"><font color="#888888"><div><br></div><div>    Bruce</div></font></span></div>
</blockquote></div><br></div>