<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><div><br></div><div>    Bruce</div></div>