From ea17b018d834038f2e65b1716c0cbc02a27a7838 Mon Sep 17 00:00:00 2001 From: Dmitry Stogov Date: Tue, 22 Jul 2014 11:12:49 +0400 Subject: [PATCH] Fixed dtrace support --- Zend/zend_dtrace.c | 9 +++++++-- Zend/zend_exceptions.c | 7 +++---- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/Zend/zend_dtrace.c b/Zend/zend_dtrace.c index 2c1deadec0..285f6c044e 100644 --- a/Zend/zend_dtrace.c +++ b/Zend/zend_dtrace.c @@ -26,8 +26,13 @@ /* PHP DTrace probes {{{ */ static inline const char *dtrace_get_executed_filename(TSRMLS_D) { - if (EG(current_execute_data) && EG(current_execute_data)->op_array) { - return EG(current_execute_data)->op_array->filename; + zend_execute_data *ex = EG(current_execute_data); + + while (ex && (!ex->func || !ZEND_USER_CODE(ex->func->type))) { + ex = ex->prev_execute_data; + } + if (ex) { + return ex->func->op_array.filename->val; } else { return zend_get_executed_filename(TSRMLS_C); } diff --git a/Zend/zend_exceptions.c b/Zend/zend_exceptions.c index 90487bf762..754927b577 100644 --- a/Zend/zend_exceptions.c +++ b/Zend/zend_exceptions.c @@ -88,12 +88,11 @@ void zend_throw_exception_internal(zval *exception TSRMLS_DC) /* {{{ */ { #ifdef HAVE_DTRACE if (DTRACE_EXCEPTION_THROWN_ENABLED()) { - const char *classname; - zend_uint name_len; + zend_string *classname; if (exception != NULL) { - zend_get_object_classname(Z_OBJ_P(exception), &classname, &name_len TSRMLS_CC); - DTRACE_EXCEPTION_THROWN((char *)classname); + classname = zend_get_object_classname(Z_OBJ_P(exception) TSRMLS_CC); + DTRACE_EXCEPTION_THROWN(classname->val); } else { DTRACE_EXCEPTION_THROWN(NULL); } -- 2.40.0