summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Haller <thaller@redhat.com>2017-02-09 21:04:51 +0000
committerandroid-build-merger <android-build-merger@google.com>2017-02-09 21:04:51 +0000
commit45218277cd5e2d460018b2d4f17431549dbe7f3b (patch)
tree9922cffc848a7bca0cfab6e98d31a044d5589415
parent605874c7813667e09282d83d861a9b76a0b2f769 (diff)
parent920dc7f13dcfc9b1d2f770f8d5182b315dc197b2 (diff)
downloadlibnl-45218277cd5e2d460018b2d4f17431549dbe7f3b.tar.gz
lib/utils.c: add mutex to get_psched_settings()
am: 920dc7f13d Change-Id: I5d4d1c3223be9ba9636ffd1e735aec1f422aa74c
-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);
}