diff --git a/tracetools/include/tracetools/tracetools.h b/tracetools/include/tracetools/tracetools.h index fe040a2..d00d4dd 100644 --- a/tracetools/include/tracetools/tracetools.h +++ b/tracetools/include/tracetools/tracetools.h @@ -157,8 +157,8 @@ void TRACEPOINT( */ void TRACEPOINT( rclcpp_callback_register, - const void * handle, - const void * callback); + const void * callback, + const void * function_target); #ifdef __cplusplus } diff --git a/tracetools/lttng/tp_call.tp b/tracetools/lttng/tp_call.tp index 1a833c9..4a964cd 100644 --- a/tracetools/lttng/tp_call.tp +++ b/tracetools/lttng/tp_call.tp @@ -224,11 +224,11 @@ TRACEPOINT_EVENT( ros2, rclcpp_callback_register, TP_ARGS( - const void *, handle_arg, - const char *, callback_arg + const void *, callback_arg, + const char *, symbol_arg ), TP_FIELDS( - ctf_integer_hex(const void *, handle, handle_arg) - ctf_string(callback, callback_arg) + ctf_integer_hex(const void *, callback, callback_arg) + ctf_string(symbol, symbol_arg) ) ) diff --git a/tracetools/src/tracetools.c b/tracetools/src/tracetools.c index dea60bc..b27f290 100644 --- a/tracetools/src/tracetools.c +++ b/tracetools/src/tracetools.c @@ -12,12 +12,16 @@ const char * get_symbol(const void * function_ptr) { #if defined(WITH_LTTNG) && !defined(_WIN32) - char** symbols = backtrace_symbols(&function_ptr, 1); - const char * result = symbols[0]; - free(symbols); - return result; + // If it's actually a lambda + if (NULL == function_ptr) { + return ""; + } + char ** symbols = backtrace_symbols(&function_ptr, 1); + const char * result = symbols[0]; + free(symbols); + return result; #else - return ""; + return ""; #endif } @@ -166,8 +170,8 @@ void TRACEPOINT( void TRACEPOINT( rclcpp_callback_register, - const void * handle, - const void * callback) + const void * callback, + const void * function_target) { - CONDITIONAL_TP(ros2, rclcpp_callback_register, handle, get_symbol(callback)); + CONDITIONAL_TP(ros2, rclcpp_callback_register, callback, get_symbol(function_target)); }