- fixed stack shutdown if maximum number of buffer flushes was reached
- fixed potential stack underflow in vtfilter which might be cause a segmentation fault This commit was SVN r22773.
Этот коммит содержится в:
родитель
18d9e96301
Коммит
5b9515225d
@ -18,6 +18,9 @@
|
||||
- use more portable 'nm' command instead of the BFD library to collect
|
||||
symbol information for instrumentation with the GNU, Intel, PathScale,
|
||||
and PGI 9 compiler
|
||||
- fixed stack shutdown if maximum number of buffer flushes was reached
|
||||
- fixed potential stack underflow in vtfilter which might be cause a
|
||||
segmentation fault
|
||||
- fixed detection of unique node id on MacOS platforms
|
||||
- fixed support for LAM/MPI
|
||||
- fixed build error: do not add objects from the static version of the
|
||||
|
@ -76,10 +76,12 @@ void Filter::addLeave( uint32_t process, uint64_t time ) {
|
||||
stack<StackItem>& rstack= callStack.insert(
|
||||
pair<uint32_t, stack<StackItem> >( process, stack<StackItem>() ) ).first->second;
|
||||
|
||||
rstack.top().it->second.accDurationIncl+= time;
|
||||
rstack.top().it->second.accDurationExcl+= time;
|
||||
|
||||
rstack.pop();
|
||||
if( false == rstack.empty() ) {
|
||||
rstack.top().it->second.accDurationIncl+= time;
|
||||
rstack.top().it->second.accDurationExcl+= time;
|
||||
|
||||
rstack.pop();
|
||||
}
|
||||
|
||||
if( false == rstack.empty() ) {
|
||||
|
||||
|
@ -1835,10 +1835,8 @@ uint8_t vt_enter(uint64_t* time, uint32_t rid) {
|
||||
if (VTTHRD_TRACE_STATUS(VTThrdv[VT_MY_THREAD]) ==
|
||||
VT_TRACE_OFF_PERMANENT) return 0;
|
||||
|
||||
VTTHRD_STACK_PUSH(VTThrdv[VT_MY_THREAD]);
|
||||
|
||||
do_trace = ((VTTHRD_TRACE_STATUS(VTThrdv[VT_MY_THREAD]) == VT_TRACE_ON) &&
|
||||
(VTTHRD_STACK_LEVEL(VTThrdv[VT_MY_THREAD]) <= max_stack_depth));
|
||||
(VTTHRD_STACK_LEVEL(VTThrdv[VT_MY_THREAD]) < max_stack_depth));
|
||||
|
||||
#if !defined(VT_DISABLE_RFG)
|
||||
if( !RFG_Regions_stackPush(VTTHRD_RFGREGIONS(VTThrdv[VT_MY_THREAD]),
|
||||
@ -1926,6 +1924,12 @@ uint8_t vt_enter(uint64_t* time, uint32_t rid) {
|
||||
/* update resource usage counters (VT_RUSAGE) */
|
||||
UPDATE_RUSAGE(time);
|
||||
}
|
||||
|
||||
/* push call stack, if tracing was not disabled by this event
|
||||
(max buffer flushes reached) */
|
||||
if (VTTHRD_TRACE_STATUS(VTThrdv[VT_MY_THREAD]) != VT_TRACE_OFF_PERMANENT)
|
||||
VTTHRD_STACK_PUSH(VTThrdv[VT_MY_THREAD]);
|
||||
|
||||
return do_trace;
|
||||
}
|
||||
|
||||
@ -1941,10 +1945,8 @@ void vt_exit(uint64_t* time) {
|
||||
if (VTTHRD_TRACE_STATUS(VTThrdv[VT_MY_THREAD]) ==
|
||||
VT_TRACE_OFF_PERMANENT) return;
|
||||
|
||||
VTTHRD_STACK_POP(VTThrdv[VT_MY_THREAD]);
|
||||
|
||||
do_trace = ((VTTHRD_TRACE_STATUS(VTThrdv[VT_MY_THREAD]) == VT_TRACE_ON) &&
|
||||
(VTTHRD_STACK_LEVEL(VTThrdv[VT_MY_THREAD])+1 <= max_stack_depth));
|
||||
(VTTHRD_STACK_LEVEL(VTThrdv[VT_MY_THREAD]) <= max_stack_depth));
|
||||
|
||||
#if !defined(VT_DISABLE_RFG)
|
||||
if (!RFG_Regions_stackPop(VTTHRD_RFGREGIONS(VTThrdv[VT_MY_THREAD]),
|
||||
@ -1994,6 +1996,11 @@ void vt_exit(uint64_t* time) {
|
||||
0, NULL);
|
||||
# endif /* VT_METR */
|
||||
}
|
||||
|
||||
/* pop call stack, if tracing was not disabled by this event
|
||||
(max buffer flushes reached) */
|
||||
if (VTTHRD_TRACE_STATUS(VTThrdv[VT_MY_THREAD]) != VT_TRACE_OFF_PERMANENT)
|
||||
VTTHRD_STACK_POP(VTThrdv[VT_MY_THREAD]);
|
||||
}
|
||||
|
||||
/* -- File I/O -- */
|
||||
|
Загрузка…
Ссылка в новой задаче
Block a user