/** * Emits an error event for a request and accounts for the propagation * of an error event being stopped to prevent the exception from being * thrown. * * @param TransactionInterface $transaction * @param \Exception $e * @param array $stats * * @throws \GuzzleHttp\Exception\RequestException */ public static function emitError(TransactionInterface $transaction, \Exception $e, array $stats = []) { $request = $transaction->getRequest(); // Convert non-request exception to a wrapped exception if (!$e instanceof RequestException) { $e = new RequestException($e->getMessage(), $request, null, $e); } // Mark the exception as having been emitted for an error event. This // works in tandem with the emitBefore method to prevent the error // event from being triggered twice for the same exception. $e->emittedError(true); // Dispatch an event and allow interception if (!$request->getEmitter()->emit('error', new ErrorEvent($transaction, $e, $stats))->isPropagationStopped()) { throw $e; } }