From ebf77b779db42398cd5ee884402a89fdcc7a2b51 Mon Sep 17 00:00:00 2001 From: "Crane.z" <1481445951@qq.com> Date: Wed, 5 Aug 2026 14:41:21 +0800 Subject: [PATCH] fix: manage database connections in LDAP worker threads --- apps/common/db/utils.py | 6 ++++-- apps/settings/ws.py | 7 ++++--- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/apps/common/db/utils.py b/apps/common/db/utils.py index 5613f6359..3798b864c 100644 --- a/apps/common/db/utils.py +++ b/apps/common/db/utils.py @@ -60,8 +60,10 @@ def close_old_connections(**kwargs): @contextmanager def safe_db_connection(): close_old_connections() - yield - close_old_connections() + try: + yield + finally: + close_old_connections() @contextmanager diff --git a/apps/settings/ws.py b/apps/settings/ws.py index 3a175a3ed..b6202377f 100644 --- a/apps/settings/ws.py +++ b/apps/settings/ws.py @@ -11,7 +11,7 @@ from django.core.cache import cache from django.utils import translation from django.utils.translation import gettext_lazy as _ -from common.db.utils import close_old_connections +from common.db.utils import close_old_connections, safe_db_connection from common.utils import get_logger from orgs.mixins.ws import OrgMixin from orgs.models import Organization @@ -148,8 +148,9 @@ class LdapWebsocket(AsyncJsonWebsocketConsumer, OrgMixin): await self.send_msg(msg='Exception: %s' % error) def run_func(self, func_name, data): - with translation.override(getattr(self.scope['user'], 'lang') or settings.LANGUAGE_CODE): - return getattr(self, func_name)(data) + with safe_db_connection(): + with translation.override(getattr(self.scope['user'], 'lang') or settings.LANGUAGE_CODE): + return getattr(self, func_name)(data) async def send_msg(self, ok=True, msg=''): await self.send_json({'ok': ok, 'msg': f'{msg}'})