fix refcount issue: don't drop rc in li_iostream_reset
... so li_stream_simple_socket_close doesn't need to acquire (when the rc might already be 0). Instead call li_iostream_reset in all places that didn't acquire before, and drop the acquire. Change-Id: I347f49eb57989738ed811a1f3a31b8942ff32881
This commit is contained in:
parent
850aea7a5d
commit
140a3c9018
|
@ -506,6 +506,7 @@ void li_iostream_acquire(liIOStream* iostream) {
|
|||
}
|
||||
|
||||
void li_iostream_release(liIOStream* iostream) {
|
||||
if (iostream == NULL) return;
|
||||
li_stream_release(&iostream->stream_in);
|
||||
li_stream_release(&iostream->stream_out);
|
||||
}
|
||||
|
@ -526,8 +527,6 @@ int li_iostream_reset(liIOStream *iostream) {
|
|||
li_stream_disconnect(&iostream->stream_out);
|
||||
li_stream_disconnect_dest(&iostream->stream_in);
|
||||
|
||||
li_iostream_release(iostream);
|
||||
|
||||
return fd;
|
||||
}
|
||||
|
||||
|
|
|
@ -19,7 +19,6 @@ void li_stream_simple_socket_close(liIOStream *stream, gboolean aborted) {
|
|||
}
|
||||
|
||||
if (aborted || stream->in_closed) {
|
||||
li_iostream_acquire(stream);
|
||||
fd = li_iostream_reset(stream);
|
||||
if (-1 != fd) {
|
||||
shutdown(fd, SHUT_RDWR);
|
||||
|
|
|
@ -200,6 +200,7 @@ static void backend_close(liBackendPool *bpool, liWorker *wrk, liBackendConnecti
|
|||
li_stream_simple_socket_close(ctx->iostream, FALSE);
|
||||
fd = li_iostream_reset(ctx->iostream);
|
||||
LI_FORCE_ASSERT(-1 == fd);
|
||||
li_iostream_release(ctx->iostream);
|
||||
ctx->iostream = NULL;
|
||||
}
|
||||
li_stream_reset(&ctx->fcgi_in);
|
||||
|
@ -281,6 +282,7 @@ static void fastcgi_reset(liFastCGIBackendContext *ctx) {
|
|||
li_stream_simple_socket_close(iostream, TRUE);
|
||||
fd = li_iostream_reset(iostream);
|
||||
LI_FORCE_ASSERT(-1 == fd);
|
||||
li_iostream_release(iostream);
|
||||
|
||||
li_stream_disconnect(&ctx->fcgi_out);
|
||||
li_stream_disconnect_dest(&ctx->fcgi_in);
|
||||
|
|
|
@ -213,6 +213,7 @@ static gboolean openssl_con_new(liConnection *con, int fd) {
|
|||
ERROR(srv, "SSL_new: %s", ERR_error_string(ERR_get_error(), NULL));
|
||||
fd = li_iostream_reset(conctx->sock_stream);
|
||||
close(fd);
|
||||
li_iostream_release(conctx->sock_stream);
|
||||
g_slice_free(openssl_connection_ctx, conctx);
|
||||
return FALSE;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue