X-Git-Url: https://git.heureux-cyclage.org/?a=blobdiff_plain;f=includes%2Fpoolcounter%2FPoolCounterWork.php;h=c0be7a1b08fb81510251c0dc888d3d1d3bbc9424;hb=de6393d19099df4c5c120784c304738fb5885944;hp=523e9e019474db07501a6adbea3ae1402c2d7b69;hpb=67c63613de88d4919d232118e18fd91424697a0d;p=lhc%2Fweb%2Fwiklou.git diff --git a/includes/poolcounter/PoolCounterWork.php b/includes/poolcounter/PoolCounterWork.php index 523e9e0194..c0be7a1b08 100644 --- a/includes/poolcounter/PoolCounterWork.php +++ b/includes/poolcounter/PoolCounterWork.php @@ -64,6 +64,9 @@ abstract class PoolCounterWork { /** * Do something with the error, like showing it to the user. + * + * @param Status $status + * * @return bool */ public function error( $status ) { @@ -112,6 +115,10 @@ abstract class PoolCounterWork { } switch ( $status->value ) { + case PoolCounter::LOCK_HELD: + // Better to ignore nesting pool counter limits than to fail. + // Assume that the outer pool limiting is reasonable enough. + /* no break */ case PoolCounter::LOCKED: $result = $this->doWork(); $this->poolCounter->release(); @@ -151,73 +158,3 @@ abstract class PoolCounterWork { } } } - -/** - * Convenience class for dealing with PoolCounters using callbacks - * @since 1.22 - */ -class PoolCounterWorkViaCallback extends PoolCounterWork { - /** @var callable */ - protected $doWork; - /** @var callable|null */ - protected $doCachedWork; - /** @var callable|null */ - protected $fallback; - /** @var callable|null */ - protected $error; - - /** - * Build a PoolCounterWork class from a type, key, and callback map. - * - * The callback map must at least have a callback for the 'doWork' method. - * Additionally, callbacks can be provided for the 'doCachedWork', 'fallback', - * and 'error' methods. Methods without callbacks will be no-ops that return false. - * If a 'doCachedWork' callback is provided, then execute() may wait for any prior - * process in the pool to finish and reuse its cached result. - * - * @param string $type - * @param string $key - * @param array $callbacks Map of callbacks - * @throws MWException - */ - public function __construct( $type, $key, array $callbacks ) { - parent::__construct( $type, $key ); - foreach ( array( 'doWork', 'doCachedWork', 'fallback', 'error' ) as $name ) { - if ( isset( $callbacks[$name] ) ) { - if ( !is_callable( $callbacks[$name] ) ) { - throw new MWException( "Invalid callback provided for '$name' function." ); - } - $this->$name = $callbacks[$name]; - } - } - if ( !isset( $this->doWork ) ) { - throw new MWException( "No callback provided for 'doWork' function." ); - } - $this->cacheable = isset( $this->doCachedWork ); - } - - public function doWork() { - return call_user_func_array( $this->doWork, array() ); - } - - public function getCachedWork() { - if ( $this->doCachedWork ) { - return call_user_func_array( $this->doCachedWork, array() ); - } - return false; - } - - public function fallback() { - if ( $this->fallback ) { - return call_user_func_array( $this->fallback, array() ); - } - return false; - } - - public function error( $status ) { - if ( $this->error ) { - return call_user_func_array( $this->error, array( $status ) ); - } - return false; - } -}