forked from OSchip/llvm-project
[OpenMP] libomp: change shm name to include UID, call unregister_lib on SIGTERM
With the change to using shared memory, there were a few problems that need to be fixed. - 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. - 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. For this user needs to set envirable KMP_HANDLE_SIGNALS to true. Patch by Erdner, Todd <todd.erdner@intel.com> Differential Revision: https://reviews.llvm.org/D91869
This commit is contained in:
parent
f6f28b44ad
commit
9615890db5
|
@ -3132,6 +3132,7 @@ extern void __kmp_internal_end_dest(void *);
|
||||||
|
|
||||||
extern int __kmp_register_root(int initial_thread);
|
extern int __kmp_register_root(int initial_thread);
|
||||||
extern void __kmp_unregister_root(int gtid);
|
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_mppbeg(void);
|
||||||
extern int __kmp_ignore_mppend(void);
|
extern int __kmp_ignore_mppend(void);
|
||||||
|
|
|
@ -98,7 +98,6 @@ static int __kmp_expand_threads(int nNeed);
|
||||||
#if KMP_OS_WINDOWS
|
#if KMP_OS_WINDOWS
|
||||||
static int __kmp_unregister_root_other_thread(int gtid);
|
static int __kmp_unregister_root_other_thread(int gtid);
|
||||||
#endif
|
#endif
|
||||||
static void __kmp_unregister_library(void); // called by __kmp_internal_end()
|
|
||||||
static void __kmp_reap_thread(kmp_info_t *thread, int is_root);
|
static void __kmp_reap_thread(kmp_info_t *thread, int is_root);
|
||||||
kmp_info_t *__kmp_thread_pool_insert_pt = NULL;
|
kmp_info_t *__kmp_thread_pool_insert_pt = NULL;
|
||||||
|
|
||||||
|
@ -6360,7 +6359,12 @@ static inline char *__kmp_reg_status_name() {
|
||||||
each thread. If registration and unregistration go in different threads
|
each thread. If registration and unregistration go in different threads
|
||||||
(omp_misc_other_root_exit.cpp test case), the name of registered_lib_env
|
(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. */
|
env var can not be found, because the name will contain different pid. */
|
||||||
|
#if KMP_OS_UNIX && KMP_DYNAMIC_LIB // shared memory is with dynamic library
|
||||||
|
return __kmp_str_format("__KMP_REGISTERED_LIB_%d_%d", (int)getpid(),
|
||||||
|
(int)getuid());
|
||||||
|
#else
|
||||||
return __kmp_str_format("__KMP_REGISTERED_LIB_%d", (int)getpid());
|
return __kmp_str_format("__KMP_REGISTERED_LIB_%d", (int)getpid());
|
||||||
|
#endif
|
||||||
} // __kmp_reg_status_get
|
} // __kmp_reg_status_get
|
||||||
|
|
||||||
void __kmp_register_library_startup(void) {
|
void __kmp_register_library_startup(void) {
|
||||||
|
|
|
@ -1149,6 +1149,7 @@ static void __kmp_team_handler(int signo) {
|
||||||
if (__kmp_debug_buf) {
|
if (__kmp_debug_buf) {
|
||||||
__kmp_dump_debug_buffer();
|
__kmp_dump_debug_buffer();
|
||||||
}
|
}
|
||||||
|
__kmp_unregister_library(); // cleanup shared memory
|
||||||
KMP_MB(); // Flush all pending memory write invalidates.
|
KMP_MB(); // Flush all pending memory write invalidates.
|
||||||
TCW_4(__kmp_global.g.g_abort, signo);
|
TCW_4(__kmp_global.g.g_abort, signo);
|
||||||
KMP_MB(); // Flush all pending memory write invalidates.
|
KMP_MB(); // Flush all pending memory write invalidates.
|
||||||
|
|
Loading…
Reference in New Issue