fix(PIWaitEvent): use -1 as pipe_fd sentinel instead of 0
File descriptor 0 is stdin (a valid fd). Using 0 as the 'not-open'
sentinel caused isCreate() to return false and destroy() to skip
close() when pipe() happened to allocate fds {0, 1} (e.g. in daemons
with closed stdio). POSIX convention: -1 = invalid fd.
This commit is contained in:
@@ -65,9 +65,9 @@ void PIWaitEvent::destroy() {
|
|||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
for (int i = 0; i < 2; ++i) {
|
for (int i = 0; i < 2; ++i) {
|
||||||
if (pipe_fd[i] != 0) {
|
if (pipe_fd[i] != -1) {
|
||||||
::close(pipe_fd[i]);
|
::close(pipe_fd[i]);
|
||||||
pipe_fd[i] = 0;
|
pipe_fd[i] = -1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
@@ -140,7 +140,7 @@ bool PIWaitEvent::isCreate() const {
|
|||||||
#ifdef WINDOWS
|
#ifdef WINDOWS
|
||||||
return event;
|
return event;
|
||||||
#else
|
#else
|
||||||
return pipe_fd[ReadEnd] != 0;
|
return pipe_fd[ReadEnd] != -1;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -55,7 +55,7 @@ private:
|
|||||||
#ifdef WINDOWS
|
#ifdef WINDOWS
|
||||||
void * event = nullptr;
|
void * event = nullptr;
|
||||||
#else
|
#else
|
||||||
int pipe_fd[2] = {0, 0};
|
int pipe_fd[2] = {-1, -1};
|
||||||
fd_set fds[3];
|
fd_set fds[3];
|
||||||
enum {
|
enum {
|
||||||
ReadEnd = 0,
|
ReadEnd = 0,
|
||||||
|
|||||||
Reference in New Issue
Block a user