X-Git-Url: https://git.heureux-cyclage.org/?p=lhc%2Fweb%2Fwiklou.git;a=blobdiff_plain;f=includes%2Fsession%2FSessionBackend.php;h=8633715d60c079734bb09a7b72105ce30fa594d7;hp=0439b36d48392995eecb947b8bb8f055c909604c;hb=e758226c91935a1df2b6fd3ed1f18922d8bfb45b;hpb=8c807b8f1f6f8bee9649f7789eef728445ece1b0 diff --git a/includes/session/SessionBackend.php b/includes/session/SessionBackend.php index 0439b36d48..8633715d60 100644 --- a/includes/session/SessionBackend.php +++ b/includes/session/SessionBackend.php @@ -586,11 +586,11 @@ final class SessionBackend { * * Calls to save() will not be delayed. * - * @return \ScopedCallback When this goes out of scope, a save will be triggered + * @return \Wikimedia\ScopedCallback When this goes out of scope, a save will be triggered */ public function delaySave() { $this->delaySave++; - return new \ScopedCallback( function () { + return new \Wikimedia\ScopedCallback( function () { if ( --$this->delaySave <= 0 ) { $this->delaySave = 0; $this->save(); @@ -599,7 +599,8 @@ final class SessionBackend { } /** - * Save and persist session data, unless delayed + * Save the session, unless delayed + * @see SessionBackend::save() */ private function autosave() { if ( $this->delaySave <= 0 ) { @@ -608,7 +609,12 @@ final class SessionBackend { } /** - * Save and persist session data + * Save the session + * + * Update both the backend data and the associated WebRequest(s) to + * reflect the state of the the SessionBackend. This might include + * persisting or unpersisting the session. + * * @param bool $closing Whether the session is being closed */ public function save( $closing = false ) { @@ -636,7 +642,11 @@ final class SessionBackend { ] ); $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; } @@ -741,7 +751,7 @@ final class SessionBackend { private function checkPHPSession() { if ( !$this->checkPHPSessionRecursionGuard ) { $this->checkPHPSessionRecursionGuard = true; - $reset = new \ScopedCallback( function () { + $reset = new \Wikimedia\ScopedCallback( function () { $this->checkPHPSessionRecursionGuard = false; } );