mirror of
https://github.com/moodle/moodle.git
synced 2025-04-21 00:12:56 +02:00
MDL-19470 detection of unfinished transactions and transactions interrupted by exceptions
This commit is contained in:
parent
18e8f3ab9e
commit
1fbdf76ddb
@ -278,7 +278,8 @@ abstract class moodle_database {
|
||||
*/
|
||||
public function dispose() {
|
||||
if ($this->intransaction) {
|
||||
error_log('Active database transaction detected when disposing database!'); // probably can not write to console anymore, log problem instead
|
||||
// unfortunately we can not access global $CFG any more and can not print debug
|
||||
error_log('Active database transaction detected when disposing database!');
|
||||
}
|
||||
if ($this->used_for_db_sessions) {
|
||||
// this is needed because we need to save session to db before closing it
|
||||
|
@ -119,7 +119,17 @@ class invalid_state_exception extends moodle_exception {
|
||||
* Default exception handler, uncought exceptions are equivalent to using print_error()
|
||||
*/
|
||||
function default_exception_handler($ex) {
|
||||
global $CFG;
|
||||
global $CFG, $DB, $SCRIPT;
|
||||
|
||||
// detect active db transactions, rollback and log as error
|
||||
if ($DB->is_transaction_started()) {
|
||||
error_log('Database transaction aborted by exception in '.$CFG->dirroot.$SCRIPT);
|
||||
try {
|
||||
// note: transaction blocks should never change current $_SESSION
|
||||
$DB->rollback_sql();
|
||||
} catch (Exception $ignored) {
|
||||
}
|
||||
}
|
||||
|
||||
$backtrace = $ex->getTrace();
|
||||
$place = array('file'=>$ex->getFile(), 'line'=>$ex->getLine(), 'exception'=>get_class($ex));
|
||||
|
Loading…
x
Reference in New Issue
Block a user