1
1

odls/alps: close the directory

Close the /proc/self/fd dir after checking for open fds.

Signed-off-by: Howard Pritchard <howardp@lanl.gov>
Этот коммит содержится в:
Howard Pritchard 2015-10-06 11:13:44 -07:00
родитель 81757d411a
Коммит d899320574

Просмотреть файл

@ -356,21 +356,15 @@ static void send_error_show_help(int fd, int exit_status,
static int close_open_file_descriptors(int write_fd, orte_iof_base_io_conf_t opts)
{
int pid, rc, fd;
char *fds_dir = NULL;
int rc, fd;
DIR *dir = NULL;
struct dirent *files;
int app_alps_filedes[2],alps_app_filedes[2];
int app_alps_filedes[2], alps_app_filedes[2];
pid = getpid();
rc = asprintf(&fds_dir, "/proc/%d/fd", pid);
if (rc < 0) return ORTE_ERR_OUT_OF_RESOURCE;
dir = opendir(fds_dir);
free(fds_dir);
if (dir == NULL) return ORTE_ERR_FILE_OPEN_FAILURE;
dir = opendir("/proc/self/fd");
if (NULL == dir) {
return ORTE_ERR_FILE_OPEN_FAILURE;
}
/* close all file descriptors w/ exception of stdin/stdout/stderr,
the pipe used for the IOF INTERNAL messages, and the pipe up to
@ -380,6 +374,7 @@ static int close_open_file_descriptors(int write_fd, orte_iof_base_io_conf_t opt
rc = alps_app_lli_pipes(app_alps_filedes,alps_app_filedes);
if (0 != rc) {
closedir(dir);
return ORTE_ERR_FILE_OPEN_FAILURE;
}
@ -387,7 +382,10 @@ static int close_open_file_descriptors(int write_fd, orte_iof_base_io_conf_t opt
if(!strncmp(files->d_name,".",1) || !strncmp(files->d_name,"..",2)) continue;
fd = strtoul(files->d_name, NULL, 10);
if (errno == EINVAL || errno == ERANGE) return ORTE_ERR_TYPE_MISMATCH;
if (EINVAL == errno || ERANGE == errno) {
closedir(dir);
return ORTE_ERR_TYPE_MISMATCH;
}
/*
* skip over the pipes we have open to apshepherd or slurmd
@ -404,6 +402,8 @@ static int close_open_file_descriptors(int write_fd, orte_iof_base_io_conf_t opt
close(fd);
}
}
closedir(dir);
return ORTE_SUCCESS;
}