Browse Source

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
master
Stefan Bühler 1 week ago
parent
commit
140a3c9018
  1. 3
      src/main/stream.c
  2. 1
      src/main/stream_simple_socket.c
  3. 2
      src/modules/fastcgi_stream.c
  4. 1
      src/modules/mod_openssl.c

3
src/main/stream.c

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

1
src/main/stream_simple_socket.c

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

2
src/modules/fastcgi_stream.c

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

1
src/modules/mod_openssl.c

@ -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…
Cancel
Save