From eda1bd2bb94d4227460cc835842f3c8124914d0d Mon Sep 17 00:00:00 2001
From: "Stephen R. van den Berg" <srb@cuci.nl>
Date: Thu, 17 May 2018 15:38:26 +0200
Subject: [PATCH] pgsql: Avoid lock recursion and a deadlock.

---
 lib/modules/Sql.pmod/pgsql_util.pmod | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/lib/modules/Sql.pmod/pgsql_util.pmod b/lib/modules/Sql.pmod/pgsql_util.pmod
index 81d1df436c..e8365393b8 100644
--- a/lib/modules/Sql.pmod/pgsql_util.pmod
+++ b/lib/modules/Sql.pmod/pgsql_util.pmod
@@ -1324,7 +1324,7 @@ class sql_result {
   }
 
   final void _releasestatement() {
-    Thread.MutexKey lock = closemux->lock(2);
+    Thread.MutexKey lock = closemux->lock();
     if (_state <= BOUND) {
       _state = COMMITTED;
       stmtifkey = 0;
@@ -1367,7 +1367,8 @@ class sql_result {
     switch (_state) {
       case PARSING:
       case BOUND:
-        _releasestatement();
+        _state = COMMITTED;	// Avoid _releasestatement() to prevent
+        stmtifkey = 0;		// lock recursion and lock inversion deadlock
     }
     switch (_state) {
       case PORTALINIT:
-- 
GitLab