diff options
| author | Joel Fernandes <joelaf@google.com> | 2019-01-10 11:24:11 -0500 |
|---|---|---|
| committer | Joel Fernandes <joelaf@google.com> | 2019-01-11 08:59:46 -0500 |
| commit | a03aced8b7c9dee7d71ae77cd9997d8725ab57a6 (patch) | |
| tree | 428750571b7c5583fd18a76d399cfaa0ab4aa637 /server/main.cpp | |
| parent | e45746650275e72427640a69b6ac7f38184e0655 (diff) | |
| download | platform_system_netd-a03aced8b7c9dee7d71ae77cd9997d8725ab57a6.tar.gz platform_system_netd-a03aced8b7c9dee7d71ae77cd9997d8725ab57a6.tar.bz2 platform_system_netd-a03aced8b7c9dee7d71ae77cd9997d8725ab57a6.zip | |
Make netd wait for BPF programs to get loaded
BPF programs are being loaded by bpfloader started by init. Since there
is a possible race where bpfloader starts before netd starts, because make sure
netd waits if bpfloader started too soon.
Test: force bpfloader to start later and see netd wait.
Bug: 112334572
Change-Id: I1cff053f228cc8ee852d5e2de79cafb5d42d6aff
Signed-off-by: Joel Fernandes <joelaf@google.com>
Diffstat (limited to 'server/main.cpp')
| -rw-r--r-- | server/main.cpp | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/server/main.cpp b/server/main.cpp index b9ff33f0e..4b06ada1f 100644 --- a/server/main.cpp +++ b/server/main.cpp @@ -14,6 +14,7 @@ * limitations under the License. */ +#include <chrono> #include <stdio.h> #include <stdlib.h> #include <signal.h> @@ -31,6 +32,7 @@ #include "log/log.h" +#include <android-base/properties.h> #include <binder/IPCThreadState.h> #include <binder/IServiceManager.h> #include <binder/ProcessState.h> @@ -90,6 +92,12 @@ int main() { // Before we start any threads, populate the resolver stub pointers. resolv_stub_init(); + // Make sure BPF programs are loaded before doing anything + while (!android::base::WaitForProperty("bpf.progs_loaded", "1", + std::chrono::seconds(5))) { + ALOGD("netd waited 5s for bpf.progs_loaded, still waiting..."); + } + NetlinkManager *nm = NetlinkManager::Instance(); if (nm == nullptr) { ALOGE("Unable to create NetlinkManager"); |
