Skip to content

Commit 2a387f9

Browse files
authored
Fix finalization segfaults (#174)
- update timemory submodule with fixes to papi components and signals update
1 parent 7d7a8f2 commit 2a387f9

File tree

14 files changed

+94
-84
lines changed

14 files changed

+94
-84
lines changed

external/timemory

Submodule timemory updated 40 files

source/bin/omnitrace/omnitrace.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,8 @@
2929
#include <timemory/hash.hpp>
3030
#include <timemory/log/macros.hpp>
3131
#include <timemory/manager.hpp>
32-
#include <timemory/sampling/signals.hpp>
3332
#include <timemory/settings.hpp>
33+
#include <timemory/signals/signal_mask.hpp>
3434
#include <timemory/utility/console.hpp>
3535
#include <timemory/utility/demangle.hpp>
3636
#include <timemory/utility/signals.hpp>
@@ -202,8 +202,8 @@ int
202202
main(int argc, char** argv)
203203
{
204204
{
205-
using signal_settings = tim::signal_settings;
206-
using sys_signal = tim::sys_signal;
205+
using signal_settings = tim::signals::signal_settings;
206+
using sys_signal = tim::signals::sys_signal;
207207

208208
// default signals to catch
209209
for(const auto& itr :
@@ -239,7 +239,7 @@ main(int argc, char** argv)
239239

240240
signal_settings::set_exit_action(_exit_action);
241241
signal_settings::check_environment();
242-
tim::enable_signal_detection(signal_settings::get_enabled());
242+
tim::signals::enable_signal_detection(signal_settings::get_enabled());
243243
}
244244

245245
argv0 = argv[0];

source/lib/omnitrace/library.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@
5454
#include <timemory/hash/types.hpp>
5555
#include <timemory/manager/manager.hpp>
5656
#include <timemory/operations/types/file_output_message.hpp>
57-
#include <timemory/sampling/signals.hpp>
57+
#include <timemory/signals/signal_mask.hpp>
5858
#include <timemory/settings/types.hpp>
5959
#include <timemory/utility/backtrace.hpp>
6060
#include <timemory/utility/procfs/maps.hpp>
@@ -585,8 +585,8 @@ omnitrace_finalize_hidden(void)
585585

586586
thread_info::set_stop(comp::wall_clock::record());
587587

588-
tim::sampling::block_signals(get_sampling_signals(),
589-
tim::sampling::sigmask_scope::process);
588+
tim::signals::block_signals(get_sampling_signals(),
589+
tim::signals::sigmask_scope::process);
590590

591591
// some functions called during finalization may alter the push/pop count so we need
592592
// to save them here

source/lib/omnitrace/library/components/mpi_gotcha.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@
3232
#include <timemory/backends/mpi.hpp>
3333
#include <timemory/backends/process.hpp>
3434
#include <timemory/mpl/types.hpp>
35-
#include <timemory/sampling/signals.hpp>
35+
#include <timemory/signals/signal_mask.hpp>
3636
#include <timemory/utility/locking.hpp>
3737

3838
#include <cstdint>
@@ -114,7 +114,7 @@ omnitrace_mpi_set_attr()
114114
OMNITRACE_DEBUG("MPI Comm attribute finalize\n");
115115
auto _blocked = get_sampling_signals();
116116
if(!_blocked.empty())
117-
tim::sampling::block_signals(_blocked, tim::sampling::sigmask_scope::process);
117+
tim::signals::block_signals(_blocked, tim::signals::sigmask_scope::process);
118118
if(mpip_index != std::numeric_limits<uint64_t>::max())
119119
comp::deactivate_mpip<mpip_bundle_t, project::omnitrace>(mpip_index);
120120
omnitrace_finalize_hidden();
@@ -249,7 +249,7 @@ mpi_gotcha::audit(const gotcha_data_t& _data, audit::incoming)
249249

250250
auto _blocked = get_sampling_signals();
251251
if(!_blocked.empty())
252-
tim::sampling::block_signals(_blocked, tim::sampling::sigmask_scope::process);
252+
tim::signals::block_signals(_blocked, tim::signals::sigmask_scope::process);
253253

254254
if(mpip_index != std::numeric_limits<uint64_t>::max())
255255
comp::deactivate_mpip<mpip_bundle_t, project::omnitrace>(mpip_index);

source/lib/omnitrace/library/components/pthread_create_gotcha.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -400,7 +400,7 @@ pthread_create_gotcha::operator()(pthread_t* thread, const pthread_attr_t* attr,
400400
if(_enable_sampling && !_blocked.empty())
401401
{
402402
OMNITRACE_DEBUG("blocking signals...\n");
403-
tim::sampling::block_signals(_blocked, tim::sampling::sigmask_scope::process);
403+
tim::signals::block_signals(_blocked, tim::signals::sigmask_scope::process);
404404
}
405405

406406
if(_use_bundle)
@@ -425,7 +425,7 @@ pthread_create_gotcha::operator()(pthread_t* thread, const pthread_attr_t* attr,
425425
if(_enable_sampling && !_blocked.empty())
426426
{
427427
OMNITRACE_DEBUG("unblocking signals...\n");
428-
tim::sampling::unblock_signals(_blocked, tim::sampling::sigmask_scope::process);
428+
tim::signals::unblock_signals(_blocked, tim::signals::sigmask_scope::process);
429429
}
430430

431431
OMNITRACE_DEBUG("returning success...\n");

source/lib/omnitrace/library/components/pthread_mutex_gotcha.cpp

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -171,7 +171,7 @@ pthread_mutex_gotcha::operator()(uintptr_t&& _id, int (*_callee)(Args...),
171171
{
172172
using bundle_t = category_region<category::pthread>;
173173

174-
if(is_disabled())
174+
if(is_disabled() || m_protect)
175175
{
176176
if(!_callee)
177177
{
@@ -225,39 +225,41 @@ int
225225
pthread_mutex_gotcha::operator()(int (*_callee)(pthread_mutex_t*),
226226
pthread_mutex_t* _mutex) const
227227
{
228-
if(m_protect) return (*_callee)(_mutex);
228+
if(get_state() != ::omnitrace::State::Active || m_protect) return (*_callee)(_mutex);
229229
return (*this)(reinterpret_cast<uintptr_t>(_mutex), _callee, _mutex);
230230
}
231231

232232
int
233233
pthread_mutex_gotcha::operator()(int (*_callee)(pthread_spinlock_t*),
234234
pthread_spinlock_t* _lock) const
235235
{
236-
if(m_protect) return (*_callee)(_lock);
236+
if(get_state() != ::omnitrace::State::Active || m_protect) return (*_callee)(_lock);
237237
return (*this)(reinterpret_cast<uintptr_t>(_lock), _callee, _lock);
238238
}
239239

240240
int
241241
pthread_mutex_gotcha::operator()(int (*_callee)(pthread_rwlock_t*),
242242
pthread_rwlock_t* _lock) const
243243
{
244-
if(m_protect) return (*_callee)(_lock);
244+
if(get_state() != ::omnitrace::State::Active || m_protect) return (*_callee)(_lock);
245245
return (*this)(reinterpret_cast<uintptr_t>(_lock), _callee, _lock);
246246
}
247247

248248
int
249249
pthread_mutex_gotcha::operator()(int (*_callee)(pthread_barrier_t*),
250250
pthread_barrier_t* _barrier) const
251251
{
252-
if(m_protect) return (*_callee)(_barrier);
252+
if(get_state() != ::omnitrace::State::Active || m_protect)
253+
return (*_callee)(_barrier);
253254
return (*this)(reinterpret_cast<uintptr_t>(_barrier), _callee, _barrier);
254255
}
255256

256257
int
257258
pthread_mutex_gotcha::operator()(int (*_callee)(pthread_t, void**), pthread_t _thr,
258259
void** _tinfo) const
259260
{
260-
if(m_protect) return (*_callee)(_thr, _tinfo);
261+
if(get_state() != ::omnitrace::State::Active || m_protect)
262+
return (*_callee)(_thr, _tinfo);
261263
return (*this)(static_cast<uintptr_t>(threading::get_id()), _callee, _thr, _tinfo);
262264
}
263265

source/lib/omnitrace/library/components/roctracer.cpp

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -137,15 +137,15 @@ roctracer::setup()
137137
};
138138
#endif
139139

140-
ROCTRACER_CALL(roctracer_set_properties(ACTIVITY_DOMAIN_HIP_API, nullptr));
140+
OMNITRACE_ROCTRACER_CALL(roctracer_set_properties(ACTIVITY_DOMAIN_HIP_API, nullptr));
141141

142142
// Allocating tracing pool
143143
roctracer_properties_t properties{};
144144
memset(&properties, 0, sizeof(roctracer_properties_t));
145145
// properties.mode = 0x1000;
146146
properties.buffer_size = 0x100;
147147
properties.buffer_callback_fun = hip_activity_callback;
148-
ROCTRACER_CALL(roctracer_open_pool(&properties));
148+
OMNITRACE_ROCTRACER_CALL(roctracer_open_pool(&properties));
149149

150150
#if OMNITRACE_HIP_VERSION_MAJOR == 4 && OMNITRACE_HIP_VERSION_MINOR >= 4
151151
// HIP 4.5.0 has an invalid warning
@@ -155,15 +155,15 @@ roctracer::setup()
155155
"invalid domain ID(4) in: roctracer_enable_activity()" };
156156
#endif
157157

158-
ROCTRACER_CALL(roctracer_enable_domain_callback(ACTIVITY_DOMAIN_HIP_API,
159-
hip_api_callback, nullptr));
158+
OMNITRACE_ROCTRACER_CALL(roctracer_enable_domain_callback(ACTIVITY_DOMAIN_HIP_API,
159+
hip_api_callback, nullptr));
160160
if(get_use_roctx())
161161
{
162-
ROCTRACER_CALL(roctracer_enable_domain_callback(ACTIVITY_DOMAIN_ROCTX,
163-
roctx_api_callback, nullptr));
162+
OMNITRACE_ROCTRACER_CALL(roctracer_enable_domain_callback(
163+
ACTIVITY_DOMAIN_ROCTX, roctx_api_callback, nullptr));
164164
}
165165
// Enable HIP activity tracing
166-
ROCTRACER_CALL(roctracer_enable_domain_activity(ACTIVITY_DOMAIN_HIP_OPS));
166+
OMNITRACE_ROCTRACER_CALL(roctracer_enable_domain_activity(ACTIVITY_DOMAIN_HIP_OPS));
167167

168168
// callback for HSA
169169
for(auto& itr : roctracer_setup_routines())
@@ -212,19 +212,19 @@ roctracer::shutdown()
212212
};
213213
#endif
214214

215-
// ROCTRACER_CALL(roctracer_disable_domain_callback(ACTIVITY_DOMAIN_ROCTX));
215+
// OMNITRACE_ROCTRACER_CALL(roctracer_disable_domain_callback(ACTIVITY_DOMAIN_ROCTX));
216216
OMNITRACE_VERBOSE_F(
217217
2, "executing roctracer_disable_domain_callback(ACTIVITY_DOMAIN_HIP_API)...\n");
218-
ROCTRACER_CALL(roctracer_disable_domain_callback(ACTIVITY_DOMAIN_HIP_API));
218+
OMNITRACE_ROCTRACER_CALL(roctracer_disable_domain_callback(ACTIVITY_DOMAIN_HIP_API));
219219

220220
OMNITRACE_VERBOSE_F(
221221
2, "executing roctracer_disable_domain_activity(ACTIVITY_DOMAIN_HIP_OPS)...\n");
222-
ROCTRACER_CALL(roctracer_disable_domain_activity(ACTIVITY_DOMAIN_HIP_OPS));
222+
OMNITRACE_ROCTRACER_CALL(roctracer_disable_domain_activity(ACTIVITY_DOMAIN_HIP_OPS));
223223

224224
if(roctracer_activity_count() == 0)
225225
{
226226
OMNITRACE_VERBOSE_F(2, "executing roctracer_flush_activity()...\n");
227-
ROCTRACER_CALL(roctracer_flush_activity());
227+
OMNITRACE_ROCTRACER_CALL(roctracer_flush_activity());
228228
}
229229
else
230230
{

source/lib/omnitrace/library/config.cpp

Lines changed: 20 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -189,7 +189,7 @@ void
189189
finalize()
190190
{
191191
OMNITRACE_DEBUG("[omnitrace_finalize] Disabling signal handling...\n");
192-
tim::disable_signal_detection();
192+
tim::signals::disable_signal_detection();
193193
_settings_are_configured() = false;
194194
}
195195

@@ -930,12 +930,12 @@ configure_signal_handler()
930930

931931
if(_config->get_enable_signal_handler())
932932
{
933-
using signal_settings = tim::signal_settings;
934-
using sys_signal = tim::sys_signal;
935-
tim::disable_signal_detection();
933+
using signal_settings = tim::signals::signal_settings;
934+
using sys_signal = tim::signals::sys_signal;
935+
tim::signals::disable_signal_detection();
936936
auto _exit_action = [](int nsig) {
937-
tim::sampling::block_signals(get_sampling_signals(),
938-
tim::sampling::sigmask_scope::process);
937+
tim::signals::block_signals(get_sampling_signals(),
938+
tim::signals::sigmask_scope::process);
939939
OMNITRACE_BASIC_PRINT(
940940
"Finalizing afer signal %i :: %s\n", nsig,
941941
signal_settings::str(static_cast<sys_signal>(nsig)).c_str());
@@ -950,29 +950,27 @@ configure_signal_handler()
950950
if(_ignore_dyninst_trampoline)
951951
signal_settings::disable(static_cast<sys_signal>(_dyninst_trampoline_signal));
952952
auto enabled_signals = signal_settings::get_enabled();
953-
tim::enable_signal_detection(enabled_signals);
953+
tim::signals::enable_signal_detection(enabled_signals);
954954
}
955955

956956
if(_ignore_dyninst_trampoline)
957957
{
958-
using signal_handler_t = void (*)(int);
959-
static signal_handler_t _old_handler = nullptr;
960-
static auto _trampoline_handler = [](int _v) {
961-
if(_v == _dyninst_trampoline_signal)
958+
using signal_handler_t = void (*)(int);
959+
static auto _trampoline_handler = [](int _v) {
960+
if(get_verbose_env() >= 2)
962961
{
963-
auto _info =
964-
::tim::signal_settings::get_info(static_cast<tim::sys_signal>(_v));
965-
OMNITRACE_VERBOSE(
966-
2,
967-
"signal %s (%i) ignored (OMNITRACE_IGNORE_DYNINST_TRAMPOLINE=ON)\n",
968-
std::get<0>(_info).c_str(), _v);
969-
if(get_verbose_env() > 1 || get_debug_env())
970-
timemory_print_demangled_backtrace<64>();
971-
if(_old_handler) _old_handler(_v);
962+
::omnitrace::debug::flush();
963+
::omnitrace::debug::lock _debug_lk{};
964+
OMNITRACE_FPRINTF_STDERR_COLOR(warning);
965+
fprintf(::omnitrace::debug::get_file(),
966+
"signal %i ignored (OMNITRACE_IGNORE_DYNINST_TRAMPOLINE=ON)\n",
967+
_v);
968+
::omnitrace::debug::flush();
969+
timemory_print_demangled_backtrace<64>();
972970
}
973971
};
974-
_old_handler = signal(_dyninst_trampoline_signal,
975-
static_cast<signal_handler_t>(_trampoline_handler));
972+
::signal(_dyninst_trampoline_signal,
973+
static_cast<signal_handler_t>(_trampoline_handler));
976974
}
977975
}
978976

source/lib/omnitrace/library/debug.hpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -353,7 +353,7 @@ get_chars(T&& _c, std::index_sequence<Idx...>)
353353
fprintf(::omnitrace::debug::get_file(), __VA_ARGS__); \
354354
::omnitrace::debug::flush(); \
355355
::omnitrace::set_state(::omnitrace::State::Finalized); \
356-
::tim::disable_signal_detection(); \
356+
::tim::signals::disable_signal_detection(); \
357357
timemory_print_demangled_backtrace<64>(); \
358358
METHOD; \
359359
}
@@ -368,7 +368,7 @@ get_chars(T&& _c, std::index_sequence<Idx...>)
368368
fprintf(::omnitrace::debug::get_file(), __VA_ARGS__); \
369369
::omnitrace::debug::flush(); \
370370
::omnitrace::set_state(::omnitrace::State::Finalized); \
371-
::tim::disable_signal_detection(); \
371+
::tim::signals::disable_signal_detection(); \
372372
timemory_print_demangled_backtrace<64>(); \
373373
METHOD; \
374374
}
@@ -385,7 +385,7 @@ get_chars(T&& _c, std::index_sequence<Idx...>)
385385
fprintf(::omnitrace::debug::get_file(), __VA_ARGS__); \
386386
::omnitrace::debug::flush(); \
387387
::omnitrace::set_state(::omnitrace::State::Finalized); \
388-
::tim::disable_signal_detection(); \
388+
::tim::signals::disable_signal_detection(); \
389389
timemory_print_demangled_backtrace<64>(); \
390390
METHOD; \
391391
}
@@ -400,7 +400,7 @@ get_chars(T&& _c, std::index_sequence<Idx...>)
400400
fprintf(::omnitrace::debug::get_file(), __VA_ARGS__); \
401401
::omnitrace::debug::flush(); \
402402
::omnitrace::set_state(::omnitrace::State::Finalized); \
403-
::tim::disable_signal_detection(); \
403+
::tim::signals::disable_signal_detection(); \
404404
timemory_print_demangled_backtrace<64>(); \
405405
METHOD; \
406406
}

source/lib/omnitrace/library/ompt.cpp

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -126,13 +126,7 @@ ompt_start_tool(unsigned int omp_version, const char* runtime_version)
126126
return 1; // success
127127
};
128128

129-
static auto ompt_finalize = [](ompt_data_t* tool_data) {
130-
if(_use_ompt)
131-
{
132-
TIMEMORY_PRINTF(stderr, "OpenMP-tools finalized\n\n");
133-
tim::consume_parameters(tool_data);
134-
}
135-
};
129+
static auto ompt_finalize = [](ompt_data_t*) {};
136130

137131
static auto data = ompt_start_tool_result_t{ ompt_initialize, ompt_finalize, { 0 } };
138132
return (ompt_start_tool_result_t*) &data;

0 commit comments

Comments
 (0)