]>
Commit | Line | Data |
---|---|---|
570f0260 JP |
1 | diff --git a/nss/nss_database.c b/nss/nss_database.c |
2 | index d56c5b798d..a0522ea7d2 100644 | |
3 | --- a/nss/nss_database.c | |
4 | +++ b/nss/nss_database.c | |
5 | @@ -424,17 +424,21 @@ nss_database_check_reload_and_get (struct nss_database_state *local, | |
6 | errors here are very unlikely, but the chance that we're entering | |
7 | a container is also very unlikely, so we err on the side of both | |
8 | very unlikely things not happening at the same time. */ | |
9 | - if (__stat64_time64 ("/", &str) != 0 | |
10 | - || (local->root_ino != 0 | |
11 | - && (str.st_ino != local->root_ino | |
12 | - || str.st_dev != local->root_dev))) | |
13 | - { | |
14 | + if (__stat64_time64 ("/", &str) != 0) { | |
15 | + __libc_lock_unlock (local->lock); | |
16 | + return false; | |
17 | + } | |
18 | + | |
19 | + if (local->root_ino != 0 && (str.st_ino != local->root_ino | |
20 | + || str.st_dev != local->root_dev)) | |
21 | + { | |
22 | /* Change detected; disable reloading and return current state. */ | |
23 | atomic_store_release (&local->data.reload_disabled, 1); | |
24 | *result = local->data.services[database_index]; | |
25 | __libc_lock_unlock (local->lock); | |
26 | return true; | |
27 | } | |
28 | + | |
29 | local->root_ino = str.st_ino; | |
30 | local->root_dev = str.st_dev; | |
31 | __libc_lock_unlock (local->lock); |