fix: wakeup pipe create failed
This commit is contained in:
@@ -67,30 +67,43 @@ bool WakeUpPipe::PipeDestroy() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool WakeUpPipe::PipeCreate() {
|
bool WakeUpPipe::PipeCreate() {
|
||||||
|
bool status = false;
|
||||||
//in filedes[0]
|
//in filedes[0]
|
||||||
//out filedes[1]
|
//out filedes[1]
|
||||||
int filedes[2];
|
int filedes[2]= {};
|
||||||
if (pipe(filedes) == -1) {
|
if (pipe(filedes) == -1) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
do {
|
||||||
|
int flags = 0;
|
||||||
|
if ((flags = fcntl(filedes[0], F_GETFD)) == -1) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
int flags = 0;
|
flags |= FD_CLOEXEC;
|
||||||
if ((flags = fcntl(filedes[0], F_GETFL|O_NONBLOCK)) == -1) {
|
if (fcntl(filedes[0], F_SETFD, flags) == -1) {
|
||||||
return false;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
flags |= FD_CLOEXEC;
|
flags = 0;
|
||||||
if (fcntl(filedes[0], F_SETFL, flags) == -1) {
|
if ((flags = fcntl(filedes[1], F_GETFD)) == -1) {
|
||||||
return false;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
flags = 0;
|
flags |= FD_CLOEXEC;
|
||||||
if ((flags = fcntl(filedes[1], F_GETFD)) == -1) {
|
if (fcntl(filedes[1], F_SETFD, flags) == -1) {
|
||||||
return false;
|
break;
|
||||||
}
|
}
|
||||||
|
status = true;
|
||||||
|
} while(0);
|
||||||
|
|
||||||
flags |= FD_CLOEXEC;
|
if (!status) {
|
||||||
if (fcntl(filedes[1], F_SETFD, flags) == -1) {
|
if (filedes[0] > 0) {
|
||||||
|
close(filedes[0]);
|
||||||
|
}
|
||||||
|
if (filedes[1] > 0) {
|
||||||
|
close(filedes[1]);
|
||||||
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
pipe_out_ = filedes[0];
|
pipe_out_ = filedes[0];
|
||||||
|
|||||||
Reference in New Issue
Block a user