diff --git a/lib/modules/Sql.pmod/pgsql.pike b/lib/modules/Sql.pmod/pgsql.pike
index 830b50728861054cde6d23a29cf877b82caec211..fd5071f32d3c1e6bfcf3b28f401476b83c32a44a 100644
--- a/lib/modules/Sql.pmod/pgsql.pike
+++ b/lib/modules/Sql.pmod/pgsql.pike
@@ -302,10 +302,6 @@ protected void create(void|string host, void|string database,
    ? !!reconnected : -1;
 }
 
-private .pgsql_util.conxion getsocket(void|int nossl) {
-  return .pgsql_util.conxion(this,qportals,(int)nossl);
-}
-
 //! Cancels all currently running queries in this session.
 //!
 //! @seealso
@@ -316,7 +312,7 @@ private .pgsql_util.conxion getsocket(void|int nossl) {
 //! through the generic SQL-interface.
 /*semi*/final void cancelquery() {
   PD("CancelRequest\n");
-  .pgsql_util.conxion lcon=getsocket(2);
+  .pgsql_util.conxion lcon = .pgsql_util.conxion(this, 0, 2);
   lcon->add_int32(16)->add_int32(PG_PROTOCOL(1234,5678))
    ->add_int32(backendpid)->add(cancelsecret)->sendcmd(FLUSHSEND);
   destruct(lcon);		// Destruct explicitly to avoid delayed close
@@ -1340,7 +1336,7 @@ private int reconnect() {
   _readyforquerycount=1;
   _waittocommit=0;
   qportals->write(1);
-  if(!(c=getsocket()))
+  if (!(c = .pgsql_util.conxion(this, qportals, 0)))
     ERROR("Couldn't connect to database on %s:%d\n",_host,_port);
   _runtimeparameter=([]);
   _unnamedportalmux=Thread.Mutex();
diff --git a/lib/modules/Sql.pmod/pgsql_util.pmod b/lib/modules/Sql.pmod/pgsql_util.pmod
index f7c98d650d15e86d694b7ba18f6a8983ef1f6583..b51d3cbf41139e1009ac679e3206596ce7ec148c 100644
--- a/lib/modules/Sql.pmod/pgsql_util.pmod
+++ b/lib/modules/Sql.pmod/pgsql_util.pmod
@@ -425,9 +425,10 @@ outer:
   protected void destroy() {
     PD("%d>Close conxion %d\n", socket ? socket->query_fd() : -1, !!nostash);
     int|.pgsql_util.sql_result portal;
-    while (portal = qportals->try_read())
-      if (objectp(portal))
-        portal->_purgeportal();
+    if (qportals)			// CancelRequest does not use qportals
+      while (portal = qportals->try_read())
+        if (objectp(portal))
+          portal->_purgeportal();
     if(nostash) {
       catch {
         while(sizeof(closecallbacks))
@@ -504,7 +505,7 @@ outer:
                     "queued portals: %d  output queue: %d/%d\n"
                     "started: %d\n",
                     fd,sizeof(i),i->_size_object(),
-                    qportals->size(),sizeof(this),_size_object(),
+                    qportals && qportals->size(), sizeof(this), _size_object(),
                     !!started);
         break;
     }