Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 9c71a0e

Browse files
committed
Issue 51564 - cloned TraceableStack operates differently than StackMiddleware
Tested fixing the issue by implementing __clone() for TraceableStack.
1 parent 4888da0 commit 9c71a0e

File tree

2 files changed

+31
-0
lines changed

2 files changed

+31
-0
lines changed

src/Symfony/Component/Messenger/Middleware/TraceableMiddleware.php

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,4 +88,10 @@ public function stop(): void
8888
}
8989
$this->currentEvent = null;
9090
}
91+
92+
public function __clone(): void
93+
{
94+
$this->stack = clone $this->stack;
95+
$this->stopwatch = clone $this->stopwatch;
96+
}
9197
}

src/Symfony/Component/Messenger/Tests/Middleware/TraceableMiddlewareTest.php

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,14 @@
1616
use Symfony\Component\Messenger\Middleware\StackInterface;
1717
use Symfony\Component\Messenger\Middleware\StackMiddleware;
1818
use Symfony\Component\Messenger\Middleware\TraceableMiddleware;
19+
use Symfony\Component\Messenger\Middleware\TraceableStack;
1920
use Symfony\Component\Messenger\Test\Middleware\MiddlewareTestCase;
2021
use Symfony\Component\Messenger\Tests\Fixtures\DummyMessage;
2122
use Symfony\Component\Stopwatch\Stopwatch;
2223
use Symfony\Component\Stopwatch\StopwatchEvent;
2324

25+
class_exists(TraceableMiddleware::class);
26+
2427
/**
2528
* @author Maxime Steinhausser <[email protected]>
2629
*/
@@ -140,4 +143,26 @@ public function handle(Envelope $envelope, StackInterface $stack): Envelope
140143
$traced->handle($envelope, new StackMiddleware(new \ArrayIterator([null, $middleware])));
141144
$this->assertSame(1, $middleware->calls);
142145
}
146+
147+
public function testCloneTraceableStack(): void
148+
{
149+
$middlewareIterator = [
150+
$this->createMock(MiddlewareInterface::class),
151+
$this->createMock(MiddlewareInterface::class),
152+
];
153+
154+
$stack = new TraceableStack(
155+
new StackMiddleware($middlewareIterator),
156+
$this->createMock(Stopwatch::class),
157+
'command.bus',
158+
'test'
159+
);
160+
161+
$clonedStack = clone $stack;
162+
163+
$nextFrame = $stack->next();
164+
$clonedStackNextFrame = $clonedStack->next();
165+
166+
self::assertSame($nextFrame, $clonedStackNextFrame);
167+
}
143168
}

0 commit comments

Comments
 (0)