Merge "init: Cleanly exit subcontext processes upon init's death"
This commit is contained in:
commit
f86e85cb0a
|
@ -62,7 +62,9 @@ constexpr size_t kBufferSize = 4096;
|
||||||
Result<std::string> ReadMessage(int socket) {
|
Result<std::string> ReadMessage(int socket) {
|
||||||
char buffer[kBufferSize] = {};
|
char buffer[kBufferSize] = {};
|
||||||
auto result = TEMP_FAILURE_RETRY(recv(socket, buffer, sizeof(buffer), 0));
|
auto result = TEMP_FAILURE_RETRY(recv(socket, buffer, sizeof(buffer), 0));
|
||||||
if (result <= 0) {
|
if (result == 0) {
|
||||||
|
return Error();
|
||||||
|
} else if (result < 0) {
|
||||||
return ErrnoError();
|
return ErrnoError();
|
||||||
}
|
}
|
||||||
return std::string(buffer, result);
|
return std::string(buffer, result);
|
||||||
|
@ -175,6 +177,12 @@ void SubcontextProcess::MainLoop() {
|
||||||
|
|
||||||
auto init_message = ReadMessage(init_fd_);
|
auto init_message = ReadMessage(init_fd_);
|
||||||
if (!init_message) {
|
if (!init_message) {
|
||||||
|
if (init_message.error_errno() == 0) {
|
||||||
|
// If the init file descriptor was closed, let's exit quietly. If
|
||||||
|
// this was accidental, init will restart us. If init died, this
|
||||||
|
// avoids calling abort(3) unnecessarily.
|
||||||
|
return;
|
||||||
|
}
|
||||||
LOG(FATAL) << "Could not read message from init: " << init_message.error();
|
LOG(FATAL) << "Could not read message from init: " << init_message.error();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue