From b982c0c65ab5cf6c24d13a28a6cc32061efcccc9 Mon Sep 17 00:00:00 2001 From: "Stephen R. van den Berg" <srb@cuci.nl> Date: Fri, 14 Oct 2016 10:49:34 +0200 Subject: [PATCH] pgsql: Drop callbacks on destruct of conxion, force short close. --- lib/modules/Sql.pmod/pgsql.pike | 2 +- lib/modules/Sql.pmod/pgsql_util.pmod | 13 +++++++++---- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/lib/modules/Sql.pmod/pgsql.pike b/lib/modules/Sql.pmod/pgsql.pike index 30c93353f0..afcf57d391 100644 --- a/lib/modules/Sql.pmod/pgsql.pike +++ b/lib/modules/Sql.pmod/pgsql.pike @@ -316,7 +316,7 @@ private .pgsql_util.conxion getsocket(void|int nossl) { .pgsql_util.conxion lcon=getsocket(2); lcon->add_int32(16)->add_int32(PG_PROTOCOL(1234,5678)) ->add_int32(backendpid)->add(cancelsecret)->sendcmd(FLUSHSEND); - lcon=0; + destruct(lcon); // Destruct explicitly to avoid delayed close #ifdef PG_DEBUGMORE PD("Closetrace %O\n",backtrace()); #endif diff --git a/lib/modules/Sql.pmod/pgsql_util.pmod b/lib/modules/Sql.pmod/pgsql_util.pmod index f0077a1455..fff0261f78 100644 --- a/lib/modules/Sql.pmod/pgsql_util.pmod +++ b/lib/modules/Sql.pmod/pgsql_util.pmod @@ -279,10 +279,14 @@ class conxion { } private int write_cb() { - Thread.MutexKey lock=shortmux->lock(); - towrite-=output_to(socket,towrite); - lock=0; - if(!i->fillread && !sizeof(this)) + Thread.MutexKey lock = shortmux->lock(); + towrite -= output_to(socket,towrite); + lock = 0; +#ifdef PG_DEBUG + if (!i->fillread) + PD("%d>Delayed close to go %d\n", socket->query_fd(), sizeof(this)); +#endif + if (!i->fillread && !sizeof(this)) close(); return 0; } @@ -364,6 +368,7 @@ outer: } protected void destroy() { + PD("%d>Close conxion %d\n", socket ? socket->query_fd() : -1, !!nostash); if(nostash) { catch { while(sizeof(closecallbacks)) -- GitLab