From 04e6364af73922fa21f53a9a01b9589562abdbe7 Mon Sep 17 00:00:00 2001 From: "Stephen R. van den Berg" <srb@cuci.nl> Date: Mon, 3 Jul 2017 15:48:42 +0200 Subject: [PATCH] pgsql: Support spurious syncs in a stashed queue. --- lib/modules/Sql.pmod/pgsql.pike | 2 +- lib/modules/Sql.pmod/pgsql_util.pmod | 14 ++++++-------- 2 files changed, 7 insertions(+), 9 deletions(-) diff --git a/lib/modules/Sql.pmod/pgsql.pike b/lib/modules/Sql.pmod/pgsql.pike index 4fc0c6c424..c190f72a20 100644 --- a/lib/modules/Sql.pmod/pgsql.pike +++ b/lib/modules/Sql.pmod/pgsql.pike @@ -1327,7 +1327,7 @@ private int reconnect() { catch(c->close()); unnamedstatement = 0; termlock = 0; - destruct(c); + catch(destruct(c)); PD("Flushing old cache\n"); foreach(_prepareds;;mapping tp) m_delete(tp,"preparedname"); diff --git a/lib/modules/Sql.pmod/pgsql_util.pmod b/lib/modules/Sql.pmod/pgsql_util.pmod index 82ef4f6907..8959dec8ea 100644 --- a/lib/modules/Sql.pmod/pgsql_util.pmod +++ b/lib/modules/Sql.pmod/pgsql_util.pmod @@ -189,16 +189,15 @@ class bufcon { final void sendcmd(int mode,void|sql_result portal) { Thread.MutexKey lock=realbuffer->shortmux->lock(); - if(portal) { + if (portal) realbuffer->stashqueue->write(portal); - if (mode == SYNCSEND) { - add(PGSYNC); - realbuffer->stashqueue->write(1); - mode = SENDOUT; // Demote it to prevent an extra SYNC upon stashflush - } + if (mode == SYNCSEND) { + add(PGSYNC); + realbuffer->stashqueue->write(1); + mode = SENDOUT; // Demote it to prevent an extra SYNC upon stashflush } realbuffer->stash->add(this); - PD("%d>Got stash mode %d > %d\n", + PD("%d>Stashed mode %d > %d\n", realbuffer->socket->query_fd(), mode, realbuffer->stashflushmode); if (mode > realbuffer->stashflushmode) realbuffer->stashflushmode = mode; @@ -387,7 +386,6 @@ outer: PD("%d>Skip flush %d Queue %O\n", socket->query_fd(), mode, (string)this); break outer; - case FLUSHLOGSEND: case FLUSHSEND: PD("Flush\n"); add(PGFLUSH); -- GitLab