Allow registering multiple event listeners from the same process
Rather than store the listener in a map keyed by the pid of thecaller,
we simply store them in a set keyed by the unique address of the binder
interface itself.
Test: system/netd/tests/runtests.sh
Change-Id: I811ff356653334df9fb4afa8501cd9375f1bdd68
diff --git a/server/NetlinkHandler.cpp b/server/NetlinkHandler.cpp
index af369e2..6e9a1e0 100644
--- a/server/NetlinkHandler.cpp
+++ b/server/NetlinkHandler.cpp
@@ -52,16 +52,15 @@
res; \
})
-#define LOG_EVENT_FUNC(retry, func, ...) \
- do { \
- const auto listenerMap = gCtls->eventReporter.getNetdUnsolicitedEventListenerVec(); \
- for (auto& listener : listenerMap) { \
- auto entry = \
- gUnsolicitedLog.newEntry().function(#func).args(__VA_ARGS__, listener.first); \
- if (retry(listener.second->func(__VA_ARGS__))) { \
- gUnsolicitedLog.log(entry.withAutomaticDuration()); \
- } \
- } \
+#define LOG_EVENT_FUNC(retry, func, ...) \
+ do { \
+ const auto listeners = gCtls->eventReporter.getNetdUnsolicitedEventListeners(); \
+ for (auto& listener : listeners) { \
+ auto entry = gUnsolicitedLog.newEntry().function(#func).args(__VA_ARGS__); \
+ if (retry(listener->func(__VA_ARGS__))) { \
+ gUnsolicitedLog.log(entry.withAutomaticDuration()); \
+ } \
+ } \
} while (0)
namespace android {