From d7365902d48e664f1bf9d66fe5fb38e036adf8ba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9dric=20Krier?= Date: Wed, 9 Sep 2026 18:55:29 +0200 Subject: [PATCH] Execute the lock_id when computing the running values of cron Closes #15078 (grafted from 6166d6ed42c968ad1abbb6f21af7ca2cfc1fef0d) --HG-- branch : 8.0 --- trytond/trytond/ir/cron.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/trytond/trytond/ir/cron.py b/trytond/trytond/ir/cron.py index c0c6fefb35..533ae9537e 100644 --- a/trytond/trytond/ir/cron.py +++ b/trytond/trytond/ir/cron.py @@ -10,7 +10,7 @@ from collections import defaultdict from itertools import groupby from dateutil.relativedelta import relativedelta -from sql import Literal +from sql import Literal, Select from sql.conditionals import Case, Coalesce from sql.functions import CurrentTimestamp, Extract @@ -135,7 +135,11 @@ class Cron(DeactivableMixin, ModelSQL, ModelView): running = defaultdict(bool) if database.has_select_for(): # Avoid concurrent locking read - database.lock_id(str2bigint(f'{cls.__name__},running')) + cursor = transaction.connection.cursor() + cursor.execute(*Select([ + database.lock_id( + str2bigint(f'{cls.__name__},running'), + True)])) with transaction.new_transaction() as transaction: cursor = transaction.connection.cursor() For = database.get_select_for_skip_locked()