diff --git a/lib/modules/Sql.pmod/pgsql_util.pmod b/lib/modules/Sql.pmod/pgsql_util.pmod
index 99a854e7b7cc041db17d98e39429a085695b89a2..3b6f232fe29ac586e476b5487b880cdedf0070fb 100644
--- a/lib/modules/Sql.pmod/pgsql_util.pmod
+++ b/lib/modules/Sql.pmod/pgsql_util.pmod
@@ -1389,8 +1389,8 @@ class sql_result {
   final void _releasestatement() {
     Thread.MutexKey lock = closemux->lock();
     if (_state <= BOUND) {
-      _state = COMMITTED;
       stmtifkey = 0;
+      _state = COMMITTED;
     }
   }
 
@@ -1406,17 +1406,7 @@ class sql_result {
     {
       Thread.MutexKey lock = closemux->lock();
       _fetchlimit = 0;				   // disables further Executes
-      switch (_state) {
-        case COPYINPROGRESS:
-        case COMMITTED:
-        case BOUND:
-          portalsifkey = 0;
-      }
-      switch (_state) {
-        case BOUND:
-        case PARSING:
-          stmtifkey = 0;
-      }
+      stmtifkey = portalsifkey = 0;
       _state = PURGED;
     }
     releaseconditions();
@@ -1427,12 +1417,7 @@ class sql_result {
     int retval = KEEP;
     PD("%O Try Closeportal %d\n", _portalname, _state);
     _fetchlimit = 0;				   // disables further Executes
-    switch (_state) {
-      case PARSING:
-      case BOUND:
-        _state = COMMITTED;	// Avoid _releasestatement() to prevent
-        stmtifkey = 0;		// lock recursion and lock inversion deadlock
-    }
+    stmtifkey = 0;
     switch (_state) {
       case PORTALINIT:
       case PARSING:
@@ -1529,8 +1514,8 @@ class sql_result {
       plugbuffer->sendcmd(_closeportal(plugbuffer, reflock));
     reflock = 0;
     if (_state < CLOSED) {
-      _state = CLOSED;
       stmtifkey = 0;
+      _state = CLOSED;
     }
     datarows->write(1);				// Signal EOF
     releaseconditions();