diff --git a/util.c b/util.c index 36162c437..e83f0b81e 100644 --- a/util.c +++ b/util.c @@ -174,6 +174,7 @@ int move_img_fd(int *img_fd, int want_fd) static pid_t open_proc_pid = PROC_NONE; static int open_proc_fd = -1; +static pid_t open_proc_self_pid; static int open_proc_self_fd = -1; static inline void set_proc_self_fd(int fd) @@ -182,6 +183,7 @@ static inline void set_proc_self_fd(int fd) close(open_proc_self_fd); open_proc_self_fd = fd; + open_proc_self_pid = getpid(); } static inline void set_proc_pid_fd(int pid, int fd) @@ -195,9 +197,13 @@ static inline void set_proc_pid_fd(int pid, int fd) static inline int get_proc_fd(int pid) { - if (pid == PROC_SELF) + if (pid == PROC_SELF) { + if (open_proc_self_fd != -1 && open_proc_self_pid != getpid()) { + close(open_proc_self_fd); + open_proc_self_fd = -1; + } return open_proc_self_fd; - else if (pid == open_proc_pid) + } else if (pid == open_proc_pid) return open_proc_fd; else return -1;