2
0
Fork 0

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:
Stefan Bühler 2021-05-03 23:24:45 +02:00
parent 850aea7a5d
commit 140a3c9018
4 changed files with 4 additions and 3 deletions

View File

@ -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;
}

View File

@ -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);

View File

@ -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);

View File

@ -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;
}