@@ -, +, @@ duplicate emails if message_queue is not writable. --- C4/Letters.pm | 12 ++++++++++++ 1 file changed, 12 insertions(+) --- a/C4/Letters.pm +++ a/C4/Letters.pm @@ -1445,8 +1445,20 @@ sub _set_message_status { my $dbh = C4::Context->dbh(); my $statement = 'UPDATE message_queue SET status= ? WHERE message_id = ?'; my $sth = $dbh->prepare( $statement ); + + my $lock_sth = $dbh->prepare('LOCK TABLES message_queue WRITE'); + my $attempts = 0; + until ( $sth->execute() ) { + $attempts++; + die 'Unable to lock message_queue to update message status: ' . $dbh->errstr() if $attempts > 10; + sleep 1; + } + my $result = $sth->execute( $params->{'status'}, $params->{'message_id'} ); + + $dbh->do('UNLOCK TABLES'); + return $result; } --