- Calls exit() when getting the I/O error from the socket fd
- Checks whether the disconnected loader process is equal to the current process
Change-Id: I1a1690a0ef188b21ea7a4276d17247d593d57950
Signed-off-by: Hwankyu Jhun <h.jhun@samsung.com>
void LoaderContext::HandleLoaderClientEvent(int condition) {
if (condition &
(IOChannel::IOCondition::IO_HUP | IOChannel::IOCondition::IO_NVAL)) {
- SECURE_LOGE("Type %d loader was disconnected. pid: %d", GetType(), pid_);
- SetPid(0);
- Dispose();
- Prepare();
+ auto peer_cred = PeerCredentials::Get(client_socket_->GetFd());
+ if (!peer_cred) return;
+
+ if (peer_cred->GetPid() == pid_) {
+ SECURE_LOGE("Type %d loader was disconnected. pid: %d", GetType(), pid_);
+ Dispose();
+ Prepare();
+ } else {
+ SECURE_LOGE("pid(%d) was disconnected", peer_cred->GetPid());
+ }
}
}
int ret = socket.Receive(static_cast<void*>(&data_size), sizeof(data_size));
if (ret != 0) {
_E("Failed to receive the data from socket. error(%d)", ret);
- return;
+ exit(-1);
}
std::vector<uint8_t> data(data_size);
ret = socket.Receive(data.data(), data.size());
if (ret != 0) {
_E("Failed to receive the data from socket. error(%d)", ret);
- return;
+ exit(-1);
}
tizen_base::Parcel parcel(data.data(), data.size());