diff options
author | Thomas Haller <thaller@redhat.com> | 2017-02-09 21:16:53 +0000 |
---|---|---|
committer | android-build-merger <android-build-merger@google.com> | 2017-02-09 21:16:53 +0000 |
commit | c9bc7966fa26641f0b87acb81c5112e69b653b0c (patch) | |
tree | 0c4e9ef309f29ff9d4f04a6e73a041d7d8b6b59a | |
parent | 43085d6e5b81ac5e37cfafdb341b8480a8a6159a (diff) | |
parent | be91606750d5313cc6087faa29a91bb88113d7b6 (diff) | |
download | libnl-c9bc7966fa26641f0b87acb81c5112e69b653b0c.tar.gz |
lib/utils.c: add mutex to get_psched_settings() am: 920dc7f13d am: 45218277cd
am: be91606750
Change-Id: I09304682c81d5cf8c9bec099d7d693fed0a7d279
-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); } |