[Openmp-commits] [PATCH] D91869: [OpenMP] change shm name to include UID, call unregister_lib on SIGTERM

Todd Erdner via Phabricator via Openmp-commits openmp-commits at lists.llvm.org
Fri Nov 20 07:05:43 PST 2020

terdner created this revision.
terdner added reviewers: AndreyChurbanov, tlwilmar, hbae, jlpeyton, Nawrin.
terdner added a project: OpenMP.
Herald added subscribers: guansong, yaxunl.
terdner requested review of this revision.
Herald added a reviewer: jdoerfert.
Herald added a subscriber: sstefan1.

With the change to using shared memory, there were a few problems that need to be fixed.

1. The previous filename that was used for SHM only used process id.  Given that process is

usually based on 16bit number, this was causing some conflicts on machines.  Thus we add
UID to the name to prevent this.

2. It appears under some conditions (SIGTERM, etc) the shared memory files were not getting

cleaned up.  Added  a call to clean up the shm files under those conditions.

  rG LLVM Github Monorepo



Index: openmp/runtime/src/z_Linux_util.cpp
--- openmp/runtime/src/z_Linux_util.cpp
+++ openmp/runtime/src/z_Linux_util.cpp
@@ -1149,6 +1149,7 @@
       if (__kmp_debug_buf) {
+      __kmp_unregister_library(); // cleanup shared memory
       KMP_MB(); // Flush all pending memory write invalidates.
       TCW_4(__kmp_global.g.g_abort, signo);
       KMP_MB(); // Flush all pending memory write invalidates.
Index: openmp/runtime/src/kmp_runtime.cpp
--- openmp/runtime/src/kmp_runtime.cpp
+++ openmp/runtime/src/kmp_runtime.cpp
@@ -98,7 +98,6 @@
 static int __kmp_unregister_root_other_thread(int gtid);
-static void __kmp_unregister_library(void); // called by __kmp_internal_end()
 static void __kmp_reap_thread(kmp_info_t *thread, int is_root);
 kmp_info_t *__kmp_thread_pool_insert_pt = NULL;
@@ -6360,7 +6359,8 @@
      each thread. If registration and unregistration go in different threads
      (omp_misc_other_root_exit.cpp test case), the name of registered_lib_env
      env var can not be found, because the name will contain different pid. */
-  return __kmp_str_format("__KMP_REGISTERED_LIB_%d", (int)getpid());
+  return __kmp_str_format("__KMP_REGISTERED_LIB_%d_%d", (int)getpid(),
+                          (int)getuid());
 } // __kmp_reg_status_get
 void __kmp_register_library_startup(void) {
Index: openmp/runtime/src/kmp.h
--- openmp/runtime/src/kmp.h
+++ openmp/runtime/src/kmp.h
@@ -3132,6 +3132,7 @@
 extern int __kmp_register_root(int initial_thread);
 extern void __kmp_unregister_root(int gtid);
+extern void __kmp_unregister_library(void); // called by __kmp_internal_end()
 extern int __kmp_ignore_mppbeg(void);
 extern int __kmp_ignore_mppend(void);

-------------- next part --------------
A non-text attachment was scrubbed...
Name: D91869.306683.patch
Type: text/x-patch
Size: 1966 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/openmp-commits/attachments/20201120/6c02de0d/attachment-0001.bin>

More information about the Openmp-commits mailing list