summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBhavna Sharma <sbhavna@codeaurora.org>2019-05-30 16:33:04 -0700
committerGerrit - the friendly Code Review server <code-review@localhost>2019-06-26 15:23:13 -0700
commit5f21e4fdef66129845322113ab98b33db420ca75 (patch)
tree52dc413c411e896491bb8237927008ae08b91f76
parent8d4a16cef0da4ea344a844e041c2f8c96c714f67 (diff)
downloadgps-5f21e4fdef66129845322113ab98b33db420ca75.tar.gz
Send abort msg explictly to loopback address
To abort inet receiver thread, an abort message must be sent explictly to loopback address. For reciever to receive abort message it must be open to receive messages on INADDR_ANY and not just specific IP address. CRs-Fixed: 2462833 Change-Id: I9ab3266d582bc774655fcabfc086dab33010f7d8
-rw-r--r--utils/LocIpc.cpp11
1 files changed, 8 insertions, 3 deletions
diff --git a/utils/LocIpc.cpp b/utils/LocIpc.cpp
index e857817..f4dd0b4 100644
--- a/utils/LocIpc.cpp
+++ b/utils/LocIpc.cpp
@@ -193,7 +193,8 @@ public:
mSockType(sockType),
mSock(make_shared<Sock>((nullptr == name) ? -1 : (::socket(AF_INET, mSockType, 0)))),
mName((nullptr == name) ? "" : name),
- mAddr({.sin_family=AF_INET, .sin_port=htons(port), .sin_addr={htonl(INADDR_ANY)}}) {
+ mAddr({.sin_family = AF_INET, .sin_port = htons(port),
+ .sin_addr = {htonl(INADDR_ANY)}}) {
if (mSock != nullptr && mSock->isValid() && nullptr != name) {
struct hostent* hp = gethostbyname(name);
if (nullptr != hp) {
@@ -222,12 +223,14 @@ public:
};
class LocIpcInetRecver : public LocIpcInetSender, public LocIpcRecver {
+ int32_t mPort;
protected:
virtual ssize_t recv() const = 0;
public:
inline LocIpcInetRecver(const shared_ptr<ILocIpcListener>& listener, const char* name,
int32_t port, int sockType) :
- LocIpcInetSender(name, port, sockType), LocIpcRecver(listener, *this) {
+ LocIpcInetSender(name, port, sockType), LocIpcRecver(listener, *this),
+ mPort(port) {
if (mSock->isValid() && ::bind(mSock->mSid, (struct sockaddr*)&mAddr, sizeof(mAddr)) < 0) {
LOC_LOGe("bind socket error. sock fd: %d, reason: %s", mSock->mSid, strerror(errno));
mSock->close();
@@ -237,7 +240,9 @@ public:
inline virtual const char* getName() const override { return mName.data(); };
inline virtual void abort() const override {
if (isSendable()) {
- mSock->sendAbort(0, (struct sockaddr*)&mAddr, sizeof(mAddr));
+ sockaddr_in loopBackAddr = {.sin_family = AF_INET, .sin_port = htons(mPort),
+ .sin_addr = {htonl(INADDR_LOOPBACK)}};
+ mSock->sendAbort(0, (struct sockaddr*)&loopBackAddr, sizeof(loopBackAddr));
}
}