mirror of
https://github.com/ZoneMinder/zoneminder.git
synced 2026-06-01 10:25:57 -04:00
ZoneMinder::Logger->logPrint runs INSERT INTO Logs on the same dbh. Calling Debug()/Error() from zmDbDo's failure path inside a caller-managed transaction would execute another statement on the connection, clearing the err/errstr state the caller needs to see for rollback/retry. The result could be a caller observing err=0 after a deadlock-victim TX and committing what looks like success but is actually a rolled-back no-op. Bail silently from zmDbDo when AutoCommit is off; the caller owns the retry loop and is responsible for logging. Logging in the autocommit path is still safe because each statement is its own TX.