@@ -238,13 +238,15 @@ ZEND_API void zend_fiber_switch_context(zend_fiber_context *to) /* {{{ */
238
238
}
239
239
/* }}} */
240
240
241
- ZEND_API void zend_fiber_suspend_context (zend_fiber_context * current ) /* {{{ */
241
+ ZEND_API zend_fiber_context * zend_fiber_suspend_context (zend_fiber_context * current ) /* {{{ */
242
242
{
243
243
ZEND_ASSERT (current && current -> caller && current -> stack .pointer && "Invalid fiber context" );
244
244
245
245
transfer_t transfer = jump_fcontext (current -> caller , NULL );
246
246
247
247
current -> caller = transfer .context ;
248
+
249
+ return transfer .data ;
248
250
}
249
251
/* }}} */
250
252
@@ -258,7 +260,16 @@ static void zend_fiber_suspend(zend_fiber *fiber) /* {{{ */
258
260
259
261
ZEND_FIBER_BACKUP_EG (stack , stack_page_size , execute_data , error_reporting , jit_trace_num );
260
262
261
- zend_fiber_suspend_context (& fiber -> context );
263
+ #if defined(VARIANT_SANITIZE )
264
+ void * fake_stack = NULL ;
265
+ __sanitizer_start_switch_fiber (& fake_stack , fiber -> context -> stack .pointer , fiber -> context -> stack .size );
266
+ #endif
267
+
268
+ zend_fiber_context * from = zend_fiber_suspend_context (& fiber -> context );
269
+
270
+ #if defined(VARIANT_SANITIZE )
271
+ __sanitizer_finish_switch_fiber (& fake_stack , from -> context -> stack .pointer , from -> context -> stack .size );
272
+ #endif
262
273
263
274
ZEND_FIBER_RESTORE_EG (stack , stack_page_size , execute_data , error_reporting , jit_trace_num );
264
275
}
@@ -281,8 +292,17 @@ static void zend_fiber_switch_to(zend_fiber *fiber) /* {{{ */
281
292
282
293
EG (current_fiber ) = fiber ;
283
294
295
+ #if defined(VARIANT_SANITIZE )
296
+ void * fake_stack = NULL ;
297
+ __sanitizer_start_switch_fiber (& fake_stack , fiber -> context -> stack .pointer , fiber -> context -> stack .size );
298
+ #endif
299
+
284
300
zend_fiber_switch_context (& fiber -> context );
285
301
302
+ #if defined(VARIANT_SANITIZE )
303
+ __sanitizer_finish_switch_fiber (fake_stack , NULL , NULL );
304
+ #endif
305
+
286
306
EG (current_fiber ) = previous ;
287
307
288
308
ZEND_FIBER_RESTORE_EG (stack , stack_page_size , execute_data , error_reporting , jit_trace_num );
0 commit comments