@@ -267,6 +267,9 @@ static zend_object *zend_default_exception_new_ex(zend_class_entry *class_type,
267267 }
268268 zend_update_property_ex (base_ce , object , ZSTR_KNOWN (ZEND_STR_TRACE ), & trace );
269269
270+ ZVAL_BOOL (& tmp , EG (current_fiber ));
271+ zend_update_property_ex (base_ce , object , ZSTR_KNOWN (ZEND_STR_FIBER ), & tmp );
272+
270273 return object ;
271274}
272275/* }}} */
@@ -340,6 +343,7 @@ ZEND_METHOD(Exception, __wakeup)
340343 CHECK_EXC_TYPE (ZEND_STR_CODE , IS_LONG );
341344 CHECK_EXC_TYPE (ZEND_STR_FILE , IS_STRING );
342345 CHECK_EXC_TYPE (ZEND_STR_LINE , IS_LONG );
346+ CHECK_EXC_TYPE (ZEND_STR_FIBER , _IS_BOOL );
343347 /* The type of $trace and $previous is enforced through typed properties. */
344348}
345349/* }}} */
@@ -606,7 +610,7 @@ static void _build_trace_string(smart_str *str, HashTable *ht, uint32_t num) /*
606610/* {{{ Obtain the backtrace for the exception as a string (instead of an array) */
607611ZEND_METHOD (Exception , getTraceAsString )
608612{
609- zval * trace , * frame , rv ;
613+ zval * trace , * frame , * fiber , rv ;
610614 zend_ulong index ;
611615 zval * object ;
612616 zend_class_entry * base_ce ;
@@ -634,9 +638,11 @@ ZEND_METHOD(Exception, getTraceAsString)
634638 _build_trace_string (& str , Z_ARRVAL_P (frame ), num ++ );
635639 } ZEND_HASH_FOREACH_END ();
636640
641+ fiber = zend_read_property_ex (base_ce , Z_OBJ_P (object ), ZSTR_KNOWN (ZEND_STR_FIBER ), 1 , & rv );
642+
637643 smart_str_appendc (& str , '#' );
638644 smart_str_append_long (& str , num );
639- smart_str_appends (& str , " {main}" );
645+ smart_str_appends (& str , Z_TYPE_P ( fiber ) == IS_TRUE ? " {fiber}" : " {main}" );
640646 smart_str_0 (& str );
641647
642648 RETURN_NEW_STR (str .s );
0 commit comments