summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Haller <thaller@redhat.com>2017-02-09 21:16:53 +0000
committerandroid-build-merger <android-build-merger@google.com>2017-02-09 21:16:53 +0000
commitc9bc7966fa26641f0b87acb81c5112e69b653b0c (patch)
tree0c4e9ef309f29ff9d4f04a6e73a041d7d8b6b59a
parent43085d6e5b81ac5e37cfafdb341b8480a8a6159a (diff)
parentbe91606750d5313cc6087faa29a91bb88113d7b6 (diff)
downloadlibnl-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.c32
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);
}