diff --git a/lib/modules/Sql.pmod/pgsql.pike b/lib/modules/Sql.pmod/pgsql.pike
index 61ec1dcfdd037f79f288d128f6f397b3f066a22c..8358616b369523ff867724962a82c42f9eefb504 100644
--- a/lib/modules/Sql.pmod/pgsql.pike
+++ b/lib/modules/Sql.pmod/pgsql.pike
@@ -1314,8 +1314,10 @@ private void procmessage() {
   };
   if (err) {
     PD("Terminating processloop due to %s\n", describe_backtrace(err));
+    _delayederror = err;
   }
-  catch(_connectfail(err));
+  destruct(waitforauthready);
+  destruct(c);
 }
 
 //! Closes the connection to the database, any running queries are
@@ -1357,15 +1359,6 @@ protected void destroy() {
     werror("%s\n", errstring);		// Add missing terminating newline
 }
 
-final void _connectfail(void|mixed err) {
-  if (err) {
-    PD("Connect failed %O\n", err);
-    _delayederror = err;
-  }
-  destruct(waitforauthready);
-  destruct(c);
-}
-
 //! For PostgreSQL this function performs the same function as @[resync()].
 //!
 //! @seealso
diff --git a/lib/modules/Sql.pmod/pgsql_util.pmod b/lib/modules/Sql.pmod/pgsql_util.pmod
index 029862c0b0e46cde5f4c4e700f3b3cba7858a113..c3e6675681f13b2f66ae609fd22d017d5f7a55ab 100644
--- a/lib/modules/Sql.pmod/pgsql_util.pmod
+++ b/lib/modules/Sql.pmod/pgsql_util.pmod
@@ -334,7 +334,6 @@ class conxion {
   private int closenext;
 
   final sfile socket;
-  private function(void|mixed:void) connectfail;
   private int towrite;
   final multiset(function(void|mixed:void)) closecallbacks=(<>);
 
@@ -458,7 +457,7 @@ outer:
       return;
     };
     lock=0;
-    catch(connectfail());
+    destruct(this);
   }
 
   final int close() {
@@ -495,7 +494,6 @@ outer:
         socket->close();
       };
     }
-    catch(connectfail = 0);
   }
 
   final void connectloop(object pgsqlsess, int nossl) {
@@ -534,19 +532,16 @@ outer:
 #endif
         break;
       }
-      connectfail=pgsqlsess->_connectfail;
       if(!socket->is_open())
         error(strerror(socket->errno())+".\n");
       socket->set_backend(local_backend);
       socket->set_buffer_mode(i,0);
       socket->set_nonblocking(i->read_cb,write_cb,close);
-      if (nossl != 2) {
-        connectfail=pgsqlsess->_connectfail;
+      if (nossl != 2)
         Thread.Thread(pgsqlsess->_processloop,this);
-      }
       return;
     };
-    catch(connectfail(err));
+    destruct(this);
   }
 
   private string _sprintf(int type, void|mapping flags) {