@@ -388,10 +388,6 @@ ZEND_API void zend_fiber_switch_context(zend_fiber_transfer *transfer)
388
388
389
389
zend_observer_fiber_switch_notify (from , to );
390
390
391
- if (from -> kind == zend_ce_fiber ) {
392
- zend_fiber_from_context (from )-> execute_data = EG (current_execute_data );
393
- }
394
-
395
391
zend_fiber_capture_vm_state (& state );
396
392
397
393
to -> status = ZEND_FIBER_STATUS_RUNNING ;
@@ -558,6 +554,10 @@ static zend_always_inline zend_fiber_transfer zend_fiber_resume(zend_fiber *fibe
558
554
{
559
555
zend_fiber * previous = EG (active_fiber );
560
556
557
+ if (previous ) {
558
+ previous -> execute_data = EG (current_execute_data );
559
+ }
560
+
561
561
fiber -> caller = EG (current_fiber_context );
562
562
EG (active_fiber ) = fiber ;
563
563
@@ -575,6 +575,7 @@ static zend_always_inline zend_fiber_transfer zend_fiber_suspend(zend_fiber *fib
575
575
zend_fiber_context * caller = fiber -> caller ;
576
576
fiber -> previous = EG (current_fiber_context );
577
577
fiber -> caller = NULL ;
578
+ fiber -> execute_data = EG (current_execute_data );
578
579
579
580
return zend_fiber_switch_to (caller , value , false);
580
581
}
@@ -745,7 +746,6 @@ ZEND_METHOD(Fiber, suspend)
745
746
746
747
ZEND_ASSERT (fiber -> context .status == ZEND_FIBER_STATUS_RUNNING || fiber -> context .status == ZEND_FIBER_STATUS_SUSPENDED );
747
748
748
- fiber -> execute_data = EG (current_execute_data );
749
749
fiber -> stack_bottom -> prev_execute_data = NULL ;
750
750
751
751
zend_fiber_transfer transfer = zend_fiber_suspend (fiber , value );
0 commit comments