@@ -388,6 +388,9 @@ ZEND_API void zend_fiber_switch_context(zend_fiber_transfer *transfer)
388
388
389
389
static ZEND_STACK_ALIGNED void zend_fiber_execute (zend_fiber_transfer * transfer )
390
390
{
391
+ ZEND_ASSERT (Z_TYPE (transfer -> value ) == IS_NULL && "Initial transfer value to fiber context must be NULL" );
392
+ ZEND_ASSERT (!transfer -> flags && "No flags should be set on initial transfer" );
393
+
391
394
zend_fiber * fiber = EG (active_fiber );
392
395
393
396
/* Determine the current error_reporting ini setting. */
@@ -398,7 +401,6 @@ static ZEND_STACK_ALIGNED void zend_fiber_execute(zend_fiber_transfer *transfer)
398
401
}
399
402
400
403
EG (vm_stack ) = NULL ;
401
- transfer -> flags = 0 ;
402
404
403
405
zend_first_try {
404
406
zend_vm_stack stack = zend_vm_stack_new_page (ZEND_FIBER_VM_STACK_SIZE , NULL );
@@ -436,8 +438,6 @@ static ZEND_STACK_ALIGNED void zend_fiber_execute(zend_fiber_transfer *transfer)
436
438
}
437
439
438
440
zend_clear_exception ();
439
- } else {
440
- ZVAL_COPY (& transfer -> value , & fiber -> result );
441
441
}
442
442
} zend_catch {
443
443
fiber -> flags |= ZEND_FIBER_FLAG_BAILOUT ;
@@ -454,19 +454,14 @@ static ZEND_STACK_ALIGNED void zend_fiber_execute(zend_fiber_transfer *transfer)
454
454
455
455
/* Handles forwarding of result / error from a transfer into the running fiber. */
456
456
static zend_always_inline void zend_fiber_delegate_transfer_result (
457
- zend_fiber * fiber , zend_fiber_transfer * transfer , INTERNAL_FUNCTION_PARAMETERS
457
+ zend_fiber_transfer * transfer , INTERNAL_FUNCTION_PARAMETERS
458
458
) {
459
459
if (transfer -> flags & ZEND_FIBER_TRANSFER_FLAG_ERROR ) {
460
460
/* Use internal throw to skip the Throwable-check that would fail for (graceful) exit. */
461
461
zend_throw_exception_internal (Z_OBJ (transfer -> value ));
462
462
RETURN_THROWS ();
463
463
}
464
464
465
- if (fiber -> context .status == ZEND_FIBER_STATUS_DEAD ) {
466
- zval_ptr_dtor (& transfer -> value );
467
- RETURN_NULL ();
468
- }
469
-
470
465
RETURN_COPY_VALUE (& transfer -> value );
471
466
}
472
467
@@ -625,7 +620,7 @@ ZEND_METHOD(Fiber, start)
625
620
626
621
zend_fiber_transfer transfer = zend_fiber_resume (fiber , NULL , false);
627
622
628
- zend_fiber_delegate_transfer_result (fiber , & transfer , INTERNAL_FUNCTION_PARAM_PASSTHRU );
623
+ zend_fiber_delegate_transfer_result (& transfer , INTERNAL_FUNCTION_PARAM_PASSTHRU );
629
624
}
630
625
631
626
ZEND_METHOD (Fiber , suspend )
@@ -668,7 +663,7 @@ ZEND_METHOD(Fiber, suspend)
668
663
RETURN_THROWS ();
669
664
}
670
665
671
- zend_fiber_delegate_transfer_result (fiber , & transfer , INTERNAL_FUNCTION_PARAM_PASSTHRU );
666
+ zend_fiber_delegate_transfer_result (& transfer , INTERNAL_FUNCTION_PARAM_PASSTHRU );
672
667
}
673
668
674
669
ZEND_METHOD (Fiber , resume )
@@ -697,7 +692,7 @@ ZEND_METHOD(Fiber, resume)
697
692
698
693
zend_fiber_transfer transfer = zend_fiber_resume (fiber , value , false);
699
694
700
- zend_fiber_delegate_transfer_result (fiber , & transfer , INTERNAL_FUNCTION_PARAM_PASSTHRU );
695
+ zend_fiber_delegate_transfer_result (& transfer , INTERNAL_FUNCTION_PARAM_PASSTHRU );
701
696
}
702
697
703
698
ZEND_METHOD (Fiber , throw )
@@ -725,7 +720,7 @@ ZEND_METHOD(Fiber, throw)
725
720
726
721
zend_fiber_transfer transfer = zend_fiber_resume (fiber , exception , true);
727
722
728
- zend_fiber_delegate_transfer_result (fiber , & transfer , INTERNAL_FUNCTION_PARAM_PASSTHRU );
723
+ zend_fiber_delegate_transfer_result (& transfer , INTERNAL_FUNCTION_PARAM_PASSTHRU );
729
724
}
730
725
731
726
ZEND_METHOD (Fiber , isStarted )
0 commit comments