@@ -114,11 +114,12 @@ void opdi::ParallelOmpLogic::deleteFunc(void* dataPtr) {
114114
115115void * opdi::ParallelOmpLogic::onParallelBegin (int maxThreads) {
116116
117- if (tool->getThreadLocalTape () != nullptr && tool-> isActive (tool-> getThreadLocalTape ()) ) {
117+ if (tool->getThreadLocalTape () != nullptr ) {
118118
119119 Data* data = new Data;
120120
121121 data->maxThreads = maxThreads;
122+ data->activeParallelRegion = tool->isActive (tool->getThreadLocalTape ());
122123 data->masterTape = tool->getThreadLocalTape ();
123124 data->tapes = new void *[maxThreads]();
124125 data->positions .resize (maxThreads);
@@ -155,14 +156,19 @@ void opdi::ParallelOmpLogic::onParallelEnd(void* dataPtr) {
155156 }
156157 #endif
157158
158- Handle* handle = new Handle;
159- handle->data = (void *) data;
160- handle->reverseFunc = ParallelOmpLogic::reverseFunc;
161- handle->deleteFunc = ParallelOmpLogic::deleteFunc;
159+ if (data->activeParallelRegion ) {
162160
163- tool->pushExternalFunction (data->masterTape , handle);
161+ Handle* handle = new Handle;
162+ handle->data = (void *) data;
163+ handle->reverseFunc = ParallelOmpLogic::reverseFunc;
164+ handle->deleteFunc = ParallelOmpLogic::deleteFunc;
164165
165- // do not delete data, it is deleted with the handle
166+ tool->pushExternalFunction (data->masterTape , handle);
167+
168+ // do not delete data, it is deleted with the handle
169+ } else {
170+ delete data;
171+ }
166172 }
167173 #if OPDI_OMP_LOGIC_INSTRUMENT
168174 else {
0 commit comments