On 9/16/21 10:35 AM, Guillaume Charifi wrote:
@@ -788,7 +791,13 @@ static void free_poll_req( void *private ) if (req->timeout) remove_timeout_user( req->timeout );
for (i = 0; i < req->count; ++i)
- {
if (req->sockets[i].sock->main_poll == req)
req->sockets[i].sock->main_poll = NULL;
release_object( req->sockets[i].sock );
- }
release_object( req->async ); release_object( req->iosb ); list_remove( &req->entry );
This is too late, for the reasons mentioned earlier; it needs to be done when the request is terminated, so in complete_async_polls(), async_poll_timeout(), and poll_socket(). We shouldn't need to worry about doing it in sock_close_handle(), since we can't queue any more requests.