summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Haller <thaller@redhat.com>2017-02-09 21:22:39 +0000
committerandroid-build-merger <android-build-merger@google.com>2017-02-09 21:22:39 +0000
commit4a6550acc83572664f83d5cfc6c4d29daa201223 (patch)
tree0c4e9ef309f29ff9d4f04a6e73a041d7d8b6b59a
parent1f1af42a19149c50dfb009f61c7ddc2729e27dd8 (diff)
parentc9bc7966fa26641f0b87acb81c5112e69b653b0c (diff)
downloadlibnl-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.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);
}