Fix for D25504 - segfault because of double free()-ing in shutdown code.
authorJonathan Peyton <jonathan.l.peyton@intel.com>
Mon, 21 Nov 2016 16:18:57 +0000 (16:18 +0000)
committerJonathan Peyton <jonathan.l.peyton@intel.com>
Mon, 21 Nov 2016 16:18:57 +0000 (16:18 +0000)
Paul Osmialowski pointed out a double free bug in shutdown code.  This patch
Moves the freeing of the implicit task to above the freeing of all fast memory
to prevent the double-free issue.

Differential Revision: https://reviews.llvm.org/D26860

llvm-svn: 287551

openmp/runtime/src/kmp_runtime.c

index c875f58..da602d9 100644 (file)
@@ -5707,6 +5707,8 @@ __kmp_reap_thread(
         --__kmp_thread_pool_nth;
     }; // if
 
+    __kmp_free_implicit_task(thread);
+
     // Free the fast memory for tasking
     #if USE_FAST_MEMORY
         __kmp_free_fast_memory( thread );
@@ -5762,7 +5764,6 @@ __kmp_reap_thread(
     }; // if
 #endif /* KMP_AFFINITY_SUPPORTED */
 
-    __kmp_free_implicit_task(thread);
     __kmp_reap_team( thread->th.th_serial_team );
     thread->th.th_serial_team = NULL;
     __kmp_free( thread );