Skip to content

Commit b231a2d

Browse files
committed
Make sure blackfire probe is ended even if things go run (thanks gpt-5.6-terra default)
1 parent 2c66469 commit b231a2d

2 files changed

Lines changed: 46 additions & 6 deletions

File tree

‎src/Adapter/BlackfireOnMessageAdapter.php‎

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -33,13 +33,13 @@ public function __invoke(WorkermanTcpConnection $workermanTcpConnection, Workerm
3333

3434
$probe = $this->startProbe();
3535

36-
$this->onRequest->__invoke($workermanTcpConnection, $workermanRequest);
37-
38-
if (!$probe instanceof Probe) {
39-
return;
36+
try {
37+
$this->onRequest->__invoke($workermanTcpConnection, $workermanRequest);
38+
} finally {
39+
if ($probe instanceof Probe) {
40+
$this->endProbe($probe);
41+
}
4042
}
41-
42-
$this->endProbe($probe);
4343
}
4444

4545
private function startProbe(): ?Probe

‎tests/Unit/Adapter/BlackfireOnMessageAdapterTest.php‎

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -201,4 +201,44 @@ public function testInvokeWithExceptionOnProbeEnd(): void
201201
$adapter = new BlackfireOnMessageAdapter($onMessage, $client, $config, $logger);
202202
$adapter($workermanTcpConnection, $workermanRequest);
203203
}
204+
205+
public function testInvokeEndsProbeWhenRequestHandlingFails(): void
206+
{
207+
$builder = new MockObjectBuilder();
208+
209+
/** @var WorkermanTcpConnection $workermanTcpConnection */
210+
$workermanTcpConnection = $builder->create(WorkermanTcpConnection::class, []);
211+
212+
/** @var WorkermanRequest $workermanRequest */
213+
$workermanRequest = $builder->create(WorkermanRequest::class, [
214+
new WithReturn('header', ['x-blackfire-query', null], 'workerman'),
215+
]);
216+
217+
$exception = new \RuntimeException('Request handling failed');
218+
219+
$onMessage = new class($exception) implements OnMessageInterface {
220+
public function __construct(private readonly \RuntimeException $exception) {}
221+
222+
public function __invoke(WorkermanTcpConnection $workermanTcpConnection, WorkermanRequest $workermanRequest): void
223+
{
224+
throw $this->exception;
225+
}
226+
};
227+
228+
/** @var Probe $probe */
229+
$probe = $builder->create(Probe::class, []);
230+
231+
$config = new Configuration();
232+
233+
/** @var Client $client */
234+
$client = $builder->create(Client::class, [
235+
new WithReturn('createProbe', [$config, true], $probe),
236+
new WithoutReturn('endProbe', [$probe]),
237+
]);
238+
239+
$adapter = new BlackfireOnMessageAdapter($onMessage, $client, $config);
240+
241+
$this->expectExceptionObject($exception);
242+
$adapter($workermanTcpConnection, $workermanRequest);
243+
}
204244
}

0 commit comments

Comments
 (0)