dbw = $dbw; $this->fname = $fname; $this->callback = $callback; // Register DB connections for which uncommitted changes are related to this update $conns[] = $dbw; foreach ( $conns as $conn ) { if ( $conn->trxLevel() ) { $conn->onTransactionResolution( [ $this, 'cancelOnRollback' ], $fname ); } } } public function doUpdate() { if ( $this->callback ) { $this->dbw->doAtomicSection( $this->fname, $this->callback ); } } /** * @private This method is public so that it works with onTransactionResolution() * @param int $trigger */ public function cancelOnRollback( $trigger ) { if ( $trigger === IDatabase::TRIGGER_ROLLBACK ) { $this->callback = null; } } public function getOrigin() { return $this->fname; } }