Bug: T92357
Change-Id: Id4f4991aca1ceeb74b59e980f09863041246a4fc
// Do any deferred jobs
DeferredUpdates::doUpdates( 'enqueue' );
// Do any deferred jobs
DeferredUpdates::doUpdates( 'enqueue' );
+ DeferredUpdates::setImmediateMode( true );
// Make sure any lazy jobs are pushed
JobQueueGroup::pushLazyJobs();
// Make sure any lazy jobs are pushed
JobQueueGroup::pushLazyJobs();
private static $preSendUpdates = [];
/** @var DeferrableUpdate[] Updates to be deferred until after request end */
private static $postSendUpdates = [];
private static $preSendUpdates = [];
/** @var DeferrableUpdate[] Updates to be deferred until after request end */
private static $postSendUpdates = [];
+ /** @var bool Whether to just run updates in addUpdate() */
+ private static $immediateMode = false;
const ALL = 0; // all updates; in web requests, use only after flushing the output buffer
const PRESEND = 1; // for updates that should run before flushing output buffer
const ALL = 0; // all updates; in web requests, use only after flushing the output buffer
const PRESEND = 1; // for updates that should run before flushing output buffer
self::push( self::$postSendUpdates, $update );
}
self::push( self::$postSendUpdates, $update );
}
+ if ( self::$immediateMode ) {
+ // No more explicit doUpdates() calls will happen, so run this now
+ self::doUpdates( 'run' );
+ return;
+ }
+
// Try to run the updates now if in CLI mode and no transaction is active.
// This covers scripts that don't/barely use the DB but make updates to other stores.
if ( $wgCommandLineMode ) {
// Try to run the updates now if in CLI mode and no transaction is active.
// This covers scripts that don't/barely use the DB but make updates to other stores.
if ( $wgCommandLineMode ) {
+ /**
+ * @param bool $value Whether to just immediately run updates in addUpdate()
+ * @since 1.28
+ */
+ public static function setImmediateMode( $value ) {
+ self::$immediateMode = (bool)$value;
+ }
+
/**
* @param DeferrableUpdate[] $queue
* @param DeferrableUpdate $update
/**
* @param DeferrableUpdate[] $queue
* @param DeferrableUpdate $update
] );
$this->user->setToken();
if ( !wfReadOnly() ) {
] );
$this->user->setToken();
if ( !wfReadOnly() ) {
- $this->user->saveSettings();
+ // Promise that the token set here will be valid; save it at end of request
+ $user = $this->user;
+ \DeferredUpdates::addCallableUpdate( function () use ( $user ) {
+ $user->saveSettings();
+ } );
}
$this->metaDirty = true;
}
}
$this->metaDirty = true;
}