diff --git a/lib/modules/Sql.pmod/pgsql.pike b/lib/modules/Sql.pmod/pgsql.pike
index 4c997e1abd8a6f9adf921c45e4b996f96e2c5430..adbc103aeb3495066d240d7364e51aa6fb72b810 100644
--- a/lib/modules/Sql.pmod/pgsql.pike
+++ b/lib/modules/Sql.pmod/pgsql.pike
@@ -612,17 +612,15 @@ final void _processloop(.pgsql_util.conxion ci) {
     plugbuffer->add_int8(0);
     PD("%O\n",(string)plugbuffer);
     if(catch(ci->start()->add_hstring(plugbuffer,4,4)->sendcmd(SENDOUT))) {
-#ifdef PG_DEBUG
-      if(!_options)
-        PD("_options is zero, %O\n",this);
-#endif
-      if(_options && _options.reconnect)	// FIXME why can _options be 0?
-        _connectfail();
-      else
-        destruct(waitforauthready);
-    } else	      // Do not flush at this point, PostgreSQL 9.4 disapproves
-      procmessage();
-  }
+      if(this)				// Only when not destructed yet
+        if(_options.reconnect)
+          _connectfail();
+        else
+          destruct(waitforauthready);
+      return;
+    }
+  }		      // Do not flush at this point, PostgreSQL 9.4 disapproves
+  procmessage();
 }
 
 private void procmessage() {
@@ -1174,7 +1172,8 @@ private void procmessage() {
     break;
   }
   PD("Closing database processloop %O\n",err);
-  _delayederror=err;
+  if(this)
+    _delayederror=err;
   for(;objectp(portal);portal=qportals->read())
     if(objectp(portal)) {
 #ifdef PG_DEBUG
@@ -1184,9 +1183,9 @@ private void procmessage() {
     }
   if(!ci->close() && !terminating && _options.reconnect)
     _connectfail();
-  else
+  else if(this)
     destruct(waitforauthready);
-  if(err && !stringp(err))
+  if(this && err && !stringp(err))
     throw(err);
 }
 
diff --git a/lib/modules/Sql.pmod/pgsql_util.pmod b/lib/modules/Sql.pmod/pgsql_util.pmod
index 28faff9a064744fb42c55463359cdc2952bcbac9..19a1bb61c50226572ee127a01c585884cf947c57 100644
--- a/lib/modules/Sql.pmod/pgsql_util.pmod
+++ b/lib/modules/Sql.pmod/pgsql_util.pmod
@@ -207,8 +207,8 @@ class conxiin {
   final int read_cb(mixed id,mixed b) {
     PD("Read callback %O\n",(string)b);
     Thread.MutexKey lock=fillreadmux->lock();
-    if(procmsg)
-      procmsg=0,lock=0,Thread.Thread(id());
+    if(procmsg&&id)
+      procmsg=0,lock=0,Thread.Thread(id);
     else if(fillread)
       didreadcb=1, fillread.signal();
     lock=0;