From 1412aecd2bf9130b14f8873ba2ba45ac5e6b4c5d Mon Sep 17 00:00:00 2001
From: "Stephen R. van den Berg" <srb@cuci.nl>
Date: Fri, 18 Sep 2015 17:31:03 +0200
Subject: [PATCH] pgsql: Avoid race during failed connects.

---
 lib/modules/Sql.pmod/pgsql.pike      | 7 ++++---
 lib/modules/Sql.pmod/pgsql_util.pmod | 2 +-
 2 files changed, 5 insertions(+), 4 deletions(-)

diff --git a/lib/modules/Sql.pmod/pgsql.pike b/lib/modules/Sql.pmod/pgsql.pike
index 44d55d4e99..4984407c5e 100644
--- a/lib/modules/Sql.pmod/pgsql.pike
+++ b/lib/modules/Sql.pmod/pgsql.pike
@@ -617,9 +617,10 @@ final void _processloop(.pgsql_util.conxion ci) {
         _connectfail();
       else
         destruct(waitforauthready);
-    } else	      // Do not flush at this point, PostgreSQL 9.4 disapproves
-      procmessage();
-  }
+      return;
+    }
+  }		      // Do not flush at this point, PostgreSQL 9.4 disapproves
+  procmessage();
 }
 
 private void procmessage() {
diff --git a/lib/modules/Sql.pmod/pgsql_util.pmod b/lib/modules/Sql.pmod/pgsql_util.pmod
index cd4aeef354..1bb6250fee 100644
--- a/lib/modules/Sql.pmod/pgsql_util.pmod
+++ b/lib/modules/Sql.pmod/pgsql_util.pmod
@@ -392,10 +392,10 @@ outer:
       }
       if(!socket->is_open())
         error(strerror(socket->errno()));
+      connectfail=pgsqlsess->_connectfail;
       socket->set_backend(local_backend);
       socket->set_buffer_mode(i,0);
       socket->set_nonblocking(i->read_cb,write_cb,close);
-      connectfail=pgsqlsess->_connectfail;
       Thread.Thread(pgsqlsess->_processloop,this);
       return;
     };
-- 
GitLab