diff options
author | Android Build Coastguard Worker <android-build-coastguard-worker@google.com> | 2023-12-15 09:37:50 +0000 |
---|---|---|
committer | Android Build Coastguard Worker <android-build-coastguard-worker@google.com> | 2023-12-15 09:37:50 +0000 |
commit | 4b98420f3ad5011a0930985b91debd4af2738680 (patch) | |
tree | 126d6a0a6a2e01d592aba8253fd36fdfb9048571 | |
parent | 26d0ec42159f57942ecfa0212b4be5a5b5b5b13e (diff) | |
parent | d8437412547b8c410bd950edfbbfc73ea81fcff0 (diff) | |
download | netd-aml_tz5_341510010.tar.gz |
Snap for 11224086 from d8437412547b8c410bd950edfbbfc73ea81fcff0 to mainline-tzdata5-releaseaml_tz5_341510070aml_tz5_341510050aml_tz5_341510010aml_tz5_341510010
Change-Id: Id4addea1363487bd2df8dd10db7608848e995fd1
-rw-r--r-- | client/Android.bp | 4 | ||||
-rw-r--r-- | server/MDnsSdListener.cpp | 35 | ||||
-rw-r--r-- | server/MDnsSdListener.h | 4 |
3 files changed, 27 insertions, 16 deletions
diff --git a/client/Android.bp b/client/Android.bp index 528b3548..968178e0 100644 --- a/client/Android.bp +++ b/client/Android.bp @@ -31,11 +31,9 @@ cc_library { "dnsproxyd_protocol_headers", // NETID_USE_LOCAL_NAMESERVERS "libnetd_client_headers", "libbase_headers", // for unique_fd.h + "libnetd_utils_headers", ], export_header_lib_headers: ["libnetd_client_headers"], - include_dirs: [ - "frameworks/libs/net/common/netd/libnetdutils/include", - ], defaults: ["netd_defaults"], sanitize: { cfi: true, diff --git a/server/MDnsSdListener.cpp b/server/MDnsSdListener.cpp index d2422f6b..7c9ceff2 100644 --- a/server/MDnsSdListener.cpp +++ b/server/MDnsSdListener.cpp @@ -31,6 +31,7 @@ #include <sys/poll.h> #include <sys/socket.h> #include <sys/types.h> +#include <thread> #define LOG_TAG "MDnsDS" #define DBG 1 @@ -376,12 +377,18 @@ MDnsSdListener::Monitor::Monitor() { mPollSize = 10; socketpair(AF_LOCAL, SOCK_STREAM | SOCK_CLOEXEC, 0, mCtrlSocketPair); - const int rval = ::android::netdutils::threadLaunch(this); - if (rval != 0) { - ALOGW("Error spawning monitor thread: %s (%d)", strerror(-rval), -rval); - } + mRescanThread = new std::thread(&Monitor::run, this); + if (!mRescanThread->joinable()) ALOGE("Unable to launch thread."); } +MDnsSdListener::Monitor::~Monitor() { + if (VDBG) ALOGD("Monitor recycling"); + close(mCtrlSocketPair[1]); // interrupt poll in MDnsSdListener::Monitor::run() and revent will + // be 17 = POLLIN | POLLHUP + mRescanThread->join(); + delete mRescanThread; + if (VDBG) ALOGD("Monitor recycled"); +} #define NAP_TIME 200 // 200 ms between polls static int wait_for_property(const char *name, const char *desired_value, int maxwait) { @@ -461,14 +468,18 @@ void MDnsSdListener::Monitor::run() { } } if (VDBG) ALOGD("controlSocket shows revent= %d", mPollFds[0].revents); - switch (mPollFds[0].revents) { - case POLLIN: { - char readBuf[2]; - read(mCtrlSocketPair[0], &readBuf, 1); - if (DBG) ALOGD("MDnsSdListener::Monitor got %c", readBuf[0]); - if (memcmp(RESCAN, readBuf, 1) == 0) { - pollCount = rescan(); - } + if (mPollFds[0].revents & POLLHUP) { + free(mPollFds); + free(mPollRefs); + if (VDBG) ALOGD("Monitor thread leaving."); + return; + } + if (mPollFds[0].revents == POLLIN) { + char readBuf[2]; + read(mCtrlSocketPair[0], &readBuf, 1); + if (DBG) ALOGD("MDnsSdListener::Monitor got %c", readBuf[0]); + if (memcmp(RESCAN, readBuf, 1) == 0) { + pollCount = rescan(); } } mPollFds[0].revents = 0; diff --git a/server/MDnsSdListener.h b/server/MDnsSdListener.h index f9c2e87e..8f049126 100644 --- a/server/MDnsSdListener.h +++ b/server/MDnsSdListener.h @@ -22,6 +22,7 @@ #include <sysutils/FrameworkListener.h> #include <mutex> #include <string> +#include <thread> #include "NetdCommand.h" @@ -83,7 +84,7 @@ class MDnsSdListener { class Monitor { public: Monitor(); - virtual ~Monitor() {} + ~Monitor(); DNSServiceRef *allocateServiceRef(int id, Context *c); void startMonitoring(int id); DNSServiceRef *lookupServiceRef(int id); @@ -114,6 +115,7 @@ class MDnsSdListener { int mPollSize; int mCtrlSocketPair[2]; std::mutex mMutex; + std::thread* mRescanThread; }; Monitor mMonitor; }; |