Skip to content

Commit ba3c802

Browse files
committed
Adds zend_fiber_startup at the right stage, moves setting of switch hooks
to correct stage In a threaded environment, these ought to be set before any threads are created, and they ought to be set once.
1 parent f460634 commit ba3c802

File tree

3 files changed

+10
-4
lines changed

3 files changed

+10
-4
lines changed

Zend/zend.c

+2
Original file line numberDiff line numberDiff line change
@@ -1010,6 +1010,8 @@ void zend_startup(zend_utility_functions *utility_functions) /* {{{ */
10101010
tsrm_set_new_thread_end_handler(zend_new_thread_end_handler);
10111011
tsrm_set_shutdown_handler(zend_interned_strings_dtor);
10121012
#endif
1013+
1014+
zend_fiber_startup();
10131015
}
10141016
/* }}} */
10151017

Zend/zend_fibers.c

+7-4
Original file line numberDiff line numberDiff line change
@@ -798,6 +798,13 @@ void zend_register_fiber_ce(void)
798798
zend_ce_fiber_error->create_object = zend_ce_error->create_object;
799799
}
800800

801+
void zend_fiber_startup(void)
802+
{
803+
zend_fiber_switch_block = fiber_switch_block;
804+
zend_fiber_switch_unblock = fiber_switch_unblock;
805+
zend_fiber_switch_blocked = fiber_switch_blocked;
806+
}
807+
801808
void zend_fiber_init(void)
802809
{
803810
zend_fiber_context *context = ecalloc(1, sizeof(zend_fiber_context));
@@ -813,10 +820,6 @@ void zend_fiber_init(void)
813820
EG(current_fiber_context) = context;
814821
EG(active_fiber) = NULL;
815822

816-
zend_fiber_switch_block = fiber_switch_block;
817-
zend_fiber_switch_unblock = fiber_switch_unblock;
818-
zend_fiber_switch_blocked = fiber_switch_blocked;
819-
820823
zend_fiber_switch_blocking = 0;
821824
}
822825

Zend/zend_fibers.h

+1
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ typedef enum {
4848
} zend_fiber_transfer_flag;
4949

5050
void zend_register_fiber_ce(void);
51+
void zend_fiber_startup();
5152
void zend_fiber_init(void);
5253
void zend_fiber_shutdown(void);
5354

0 commit comments

Comments
 (0)