diff --git a/odoo/addons/base/models/ir_module.py b/odoo/addons/base/models/ir_module.py
index f197a154b140751933fb5de1ce24a4017b9dbdca..6dd1228491078a0f17bd8176c5038a529c8d35c2 100644
--- a/odoo/addons/base/models/ir_module.py
+++ b/odoo/addons/base/models/ir_module.py
@@ -614,6 +614,10 @@ class Module(models.Model):
         self._cr.commit()
         registry = modules.registry.Registry.new(self._cr.dbname, update_module=True)
         self._cr.commit()
+        if request and request.registry is self.env.registry:
+            request.env.cr.reset()
+            request.registry = request.env.registry
+            assert request.env.registry is registry
         self._cr.reset()
         assert self.env.registry is registry
 
diff --git a/odoo/http.py b/odoo/http.py
index 575554ba93e66d1cc852d3be7573c90e3b0be3ab..aa7369e9a5f29b511598e542e7c576cff40cff71 100644
--- a/odoo/http.py
+++ b/odoo/http.py
@@ -1608,7 +1608,8 @@ class Request:
         ir_http._authenticate(rule.endpoint)
         ir_http._pre_dispatch(rule, args)
         response = self.dispatcher.dispatch(rule.endpoint, args)
-        ir_http._post_dispatch(response)
+        # the registry can have been reniewed by dispatch
+        self.registry['ir.http']._post_dispatch(response)
         return response