From 3919a3581fae44ec1f231ca8d3ab99122e1d9807 Mon Sep 17 00:00:00 2001
From: bve-odoo <bve@odoo.com>
Date: Wed, 8 Feb 2023 17:30:42 +0100
Subject: [PATCH] [FIX] core: force disabling of database when request ends
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

closes odoo/odoo#95123

Signed-off-by: Rémy Voet <ryv@odoo.com>
---
 addons/web/controllers/main.py | 2 --
 odoo/http.py                   | 9 +++++----
 2 files changed, 5 insertions(+), 6 deletions(-)

diff --git a/addons/web/controllers/main.py b/addons/web/controllers/main.py
index ad165e8e9034..972f1589e427 100644
--- a/addons/web/controllers/main.py
+++ b/addons/web/controllers/main.py
@@ -1053,7 +1053,6 @@ class WebClient(http.Controller):
         :param lang: the language of the user
         :return:
         """
-        request.disable_db = False
 
         if mods:
             mods = mods.split(',')
@@ -1229,7 +1228,6 @@ class Session(http.Controller):
     def get_session_info(self):
         request.session.check_security()
         request.uid = request.session.uid
-        request.disable_db = False
         return request.env['ir.http'].session_info()
 
     @http.route('/web/session/authenticate', type='json', auth="none")
diff --git a/odoo/http.py b/odoo/http.py
index 27614315bc10..47a673e8f157 100644
--- a/odoo/http.py
+++ b/odoo/http.py
@@ -198,10 +198,10 @@ class WebRequest(object):
     def __init__(self, httprequest):
         self.httprequest = httprequest
         self.httpresponse = None
-        self.disable_db = False
         self.endpoint = None
         self.endpoint_arguments = None
         self.auth_method = None
+        self._db = self.session.db
         self._cr = None
         self._uid = None
         self._context = None
@@ -285,7 +285,7 @@ class WebRequest(object):
             finally:
                 self._cr.close()
         # just to be sure no one tries to re-use the request
-        self.disable_db = True
+        self._db = None
         self.uid = None
 
     def set_handler(self, endpoint, arguments, auth):
@@ -393,7 +393,9 @@ class WebRequest(object):
         The database linked to this request. Can be ``None``
         if the current request uses the ``none`` authentication.
         """
-        return self.session.db if not self.disable_db else None
+        if not self._db:
+            self._db = self.session.db
+        return self._db
 
     def csrf_token(self, time_limit=None):
         """ Generates and returns a CSRF token for the current session
@@ -1033,7 +1035,6 @@ class OpenERPSession(sessions.Session):
         self.rotate = True
         self.db = db
         self.login = login
-        request.disable_db = False
 
         user = request.env(user=uid)['res.users'].browse(uid)
         if not user._mfa_url():
-- 
GitLab