@@ -, +, @@ prevent locking --- C4/Circulation.pm | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) --- a/C4/Circulation.pm +++ a/C4/Circulation.pm @@ -3364,7 +3364,7 @@ sub SendCirculationAlert { # LOCK TABLES is not transaction-safe and implicitly commits any active transaction before attempting to lock the tables. # If the LOCK/UNLOCK statements are executed from tests, the current transaction will be committed. # To avoid that we need to guess if this code is execute from tests or not (yes it is a bit hacky) - my $called_from_tests = exists $ENV{_} and $ENV{_} =~ m|prove|; + my $do_not_lock = ( exists $ENV{_} && $ENV{_} =~ m|prove| ) || $ENV{KOHA_NO_TABLE_LOCKS}; for my $mtt (@transports) { my $letter = C4::Letters::GetPreparedLetter ( @@ -3383,17 +3383,17 @@ sub SendCirculationAlert { ) or next; $schema->storage->txn_begin; - C4::Context->dbh->do(q|LOCK TABLE message_queue READ|) unless $called_from_tests; - C4::Context->dbh->do(q|LOCK TABLE message_queue WRITE|) unless $called_from_tests; + C4::Context->dbh->do(q|LOCK TABLE message_queue READ|) unless $do_not_lock; + C4::Context->dbh->do(q|LOCK TABLE message_queue WRITE|) unless $do_not_lock; my $message = C4::Message->find_last_message($borrower, $type, $mtt); unless ( $message ) { - C4::Context->dbh->do(q|UNLOCK TABLES|) unless $called_from_tests; + C4::Context->dbh->do(q|UNLOCK TABLES|) unless $do_not_lock; C4::Message->enqueue($letter, $borrower, $mtt); } else { $message->append($letter); $message->update; } - C4::Context->dbh->do(q|UNLOCK TABLES|) unless $called_from_tests; + C4::Context->dbh->do(q|UNLOCK TABLES|) unless $do_not_lock; $schema->storage->txn_commit; } --