server: Make sure a thread doesn't get freed while it's processing a request.
This commit is contained in:
parent
39d54523a3
commit
5532927ed3
|
@ -248,9 +248,11 @@ static void thread_poll_event( struct fd *fd, int event )
|
||||||
struct thread *thread = get_fd_user( fd );
|
struct thread *thread = get_fd_user( fd );
|
||||||
assert( thread->obj.ops == &thread_ops );
|
assert( thread->obj.ops == &thread_ops );
|
||||||
|
|
||||||
|
grab_object( thread );
|
||||||
if (event & (POLLERR | POLLHUP)) kill_thread( thread, 0 );
|
if (event & (POLLERR | POLLHUP)) kill_thread( thread, 0 );
|
||||||
else if (event & POLLIN) read_request( thread );
|
else if (event & POLLIN) read_request( thread );
|
||||||
else if (event & POLLOUT) write_reply( thread );
|
else if (event & POLLOUT) write_reply( thread );
|
||||||
|
release_object( thread );
|
||||||
}
|
}
|
||||||
|
|
||||||
/* cleanup everything that is no longer needed by a dead thread */
|
/* cleanup everything that is no longer needed by a dead thread */
|
||||||
|
|
Loading…
Reference in New Issue