# 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 (
) 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;
}