diff options
author | Thomas Haller <thaller@redhat.com> | 2017-02-09 21:22:39 +0000 |
---|---|---|
committer | android-build-merger <android-build-merger@google.com> | 2017-02-09 21:22:39 +0000 |
commit | 4a6550acc83572664f83d5cfc6c4d29daa201223 (patch) | |
tree | 0c4e9ef309f29ff9d4f04a6e73a041d7d8b6b59a | |
parent | 1f1af42a19149c50dfb009f61c7ddc2729e27dd8 (diff) | |
parent | c9bc7966fa26641f0b87acb81c5112e69b653b0c (diff) | |
download | libnl-4a6550acc83572664f83d5cfc6c4d29daa201223.tar.gz |
lib/utils.c: add mutex to get_psched_settings() am: 920dc7f13d am: 45218277cd am: be91606750
am: c9bc7966fa
Change-Id: Ia72e11c9da9bd49d26119653886c562797a97f4b
-rw-r--r-- | lib/utils.c | 32 |
1 files changed, 20 insertions, 12 deletions
diff --git a/lib/utils.c b/lib/utils.c index 70b5253d..7b44243c 100644 --- a/lib/utils.c +++ b/lib/utils.c @@ -408,13 +408,20 @@ static void get_psched_settings(void) char name[FILENAME_MAX]; FILE *fd; int got_hz = 0; - static int initialized = 0; - if (initialized == 1) { + static volatile int initialized = 0; + const char *ev; + NL_LOCK(mutex); + + if (initialized == 1) return; - } - if (getenv("HZ")) { - long hz = strtol(getenv("HZ"), NULL, 0); + nl_lock(&mutex); + + if (initialized == 1) + return; + + if ((ev = getenv("HZ"))) { + long hz = strtol(ev, NULL, 0); if (LONG_MIN != hz && LONG_MAX != hz) { user_hz = hz; @@ -427,16 +434,15 @@ static void get_psched_settings(void) psched_hz = user_hz; - if (getenv("TICKS_PER_USEC")) { - double t = strtod(getenv("TICKS_PER_USEC"), NULL); + if ((ev = getenv("TICKS_PER_USEC"))) { + double t = strtod(ev, NULL); ticks_per_usec = t; } else { - if (getenv("PROC_NET_PSCHED")) - snprintf(name, sizeof(name), "%s", getenv("PROC_NET_PSCHED")); - else if (getenv("PROC_ROOT")) - snprintf(name, sizeof(name), "%s/net/psched", - getenv("PROC_ROOT")); + if ((ev = getenv("PROC_NET_PSCHED"))) + snprintf(name, sizeof(name), "%s", ev); + else if ((ev = getenv("PROC_ROOT"))) + snprintf(name, sizeof(name), "%s/net/psched", ev); else strncpy(name, "/proc/net/psched", sizeof(name) - 1); @@ -461,6 +467,8 @@ static void get_psched_settings(void) } } initialized = 1; + + nl_unlock(&mutex); } |