diff --git a/src/slurmd/elan_interconnect.c b/src/slurmd/elan_interconnect.c index fd07c6ad46981578f1b24b3153ac7df6bb22e538..7a114f5767a509dadd96afaa60a88bd639a16a18 100644 --- a/src/slurmd/elan_interconnect.c +++ b/src/slurmd/elan_interconnect.c @@ -29,6 +29,7 @@ static int do_env(int nodeid, int nnodes, int procid, int nprocs) ; /*launch_tasks should really be named launch_job_step*/ int launch_tasks ( launch_tasks_request_msg_t * launch_msg ) { + pthread_atfork ( NULL , NULL , pthread_fork_child_after ) ; return interconnect_init ( launch_msg ); } diff --git a/src/slurmd/no_interconnect.c b/src/slurmd/no_interconnect.c index 5e463187009c00aab32cff5687b141bca67c9b9b..198a50096403ee95673e8a6f95f0e71f3513d63d 100644 --- a/src/slurmd/no_interconnect.c +++ b/src/slurmd/no_interconnect.c @@ -6,6 +6,7 @@ /*launch_tasks should really be named launch_job_step*/ int launch_tasks ( launch_tasks_request_msg_t * launch_msg ) { + pthread_atfork ( NULL , NULL , pthread_fork_child_after ) ; return interconnect_init ( launch_msg ); } diff --git a/src/slurmd/task_mgr.c b/src/slurmd/task_mgr.c index 04eaa8a1d1d35987290c867f60ecc66de873fe84..8fa1577a4e23a217a18b869e84bce5d8bb880efd 100644 --- a/src/slurmd/task_mgr.c +++ b/src/slurmd/task_mgr.c @@ -319,3 +319,18 @@ int reattach_tasks_streams ( reattach_tasks_streams_msg_t * req_msg ) } return error_code ; } + +void pthread_fork_before ( void ) +{ +} + +void pthread_fork_parent_after ( void ) +{ +} + +void pthread_fork_child_after ( void ) +{ + log_options_t log_opts_def = LOG_OPTS_STDERR_ONLY ; + log_init( "slurmd", log_opts_def, SYSLOG_FACILITY_DAEMON, NULL); +} + diff --git a/src/slurmd/task_mgr.h b/src/slurmd/task_mgr.h index 0d85af381c7201cca8be7a163fd2c1abd159221b..8095866737b8cee789b09dd49fd3edbc81ea0404 100644 --- a/src/slurmd/task_mgr.h +++ b/src/slurmd/task_mgr.h @@ -52,6 +52,10 @@ int reattach_tasks_streams ( reattach_tasks_streams_msg_t * req_msg ) ; void * task_exec_thread ( void * arg ) ; +void pthread_fork_before ( void ); +void pthread_fork_parent_after ( void ); +void pthread_fork_child_after ( void ); + typedef struct task_start { /*task control thread id*/