fix crash on shutdown of compressed connection
the callback may destroy the socket, so it is very unwise to use it for buffering the return value. use a temporary instead.
This commit is contained in:
parent
c9b8cefc29
commit
13c742529c
|
@ -627,11 +627,13 @@ socket_fill( conn_t *sock )
|
||||||
{
|
{
|
||||||
#ifdef HAVE_LIBZ
|
#ifdef HAVE_LIBZ
|
||||||
if (sock->in_z) {
|
if (sock->in_z) {
|
||||||
|
int ret;
|
||||||
/* The timer will preempt reads until the buffer is empty. */
|
/* The timer will preempt reads until the buffer is empty. */
|
||||||
assert( !sock->in_z->avail_in );
|
assert( !sock->in_z->avail_in );
|
||||||
sock->in_z->next_in = (uchar *)sock->z_buf;
|
sock->in_z->next_in = (uchar *)sock->z_buf;
|
||||||
if ((sock->in_z->avail_in = do_read( sock, sock->z_buf, sizeof(sock->z_buf) )) <= 0)
|
if ((ret = do_read( sock, sock->z_buf, sizeof(sock->z_buf) )) <= 0)
|
||||||
return;
|
return;
|
||||||
|
sock->in_z->avail_in = ret;
|
||||||
socket_fill_z( sock );
|
socket_fill_z( sock );
|
||||||
} else
|
} else
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Reference in New Issue
Block a user