1
1

- 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.
Этот коммит содержится в:
Matthias Jurenz 2010-03-04 08:08:20 +00:00
родитель 18d9e96301
Коммит 5b9515225d
3 изменённых файлов: 22 добавлений и 10 удалений

Просмотреть файл

@ -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 -- */