diff --git a/src/slurmd/slurmstepd/io.c b/src/slurmd/slurmstepd/io.c index 2796c99e3e3367bf0ff845bd507f9e1a4c8cdf73..0f177ea258e50aec0b2627e3277e2dec0fd9b9a8 100644 --- a/src/slurmd/slurmstepd/io.c +++ b/src/slurmd/slurmstepd/io.c @@ -893,6 +893,7 @@ io_close_task_fds(slurmd_job_t *job) void io_close_all(slurmd_job_t *job) { + int devnull; #if 0 int i; for (i = 0; i < job->ntasks; i++) @@ -902,7 +903,17 @@ io_close_all(slurmd_job_t *job) /* No more debug info will be received by client after this point */ debug("Closing debug channel"); - close(STDERR_FILENO); + + /* + * Send stderr to /dev/null since debug channel is closing + * and log facility may still try to write to stderr. + */ + if ((devnull = open("/dev/null", O_RDWR)) < 0) { + error("Unable to open /dev/null: %m"); + } else { + if (dup2(devnull, STDERR_FILENO) < 0) + error("Unable to dup /dev/null onto stderr\n"); + } /* Signal IO thread to close appropriate * client connections