11494, 11521, 11677, 11837, 11959, 12047, 12097, 12193, 12297, 12298,
12301, 12340, 12354, 13058, 13361, 13525, 13526, 13527, 13528, 13529,
13530, 13531, 13532, 13533, 13547, 13551, 13552, 13553, 13555, 13556,
- 13559, 13563, 13566, 13583, 13592, 13613, 13618, 13637, 13656, 13658,
- 13673, 13691, 13695, 13704, 13705, 13706, 13726, 13738, 13739, 13750,
- 13758, 13760, 13761, 13775, 13786, 13787, 13792, 13806, 13824, 13840,
- 13841, 13844, 13846, 13851, 13852, 13854, 13871, 13872, 13873, 13879,
- 13883, 13884, 13885, 13886, 13892, 13895, 13908, 13910, 13911, 13912,
- 13913, 13914, 13915, 13916, 13917, 13918, 13919, 13920, 13921, 13922,
- 13923, 13924, 13926, 13927, 13928, 13938, 13941, 13942, 13954, 13955,
- 13956, 13963, 13967, 13970, 13973, 13979, 13983, 13986, 14012, 14027,
- 14033, 14034, 14040, 14043, 14044, 14049, 14053, 14055, 14064, 14080,
- 14083, 14103, 14104
+ 13559, 13563, 13566, 13583, 13592, 13594, 13613, 13618, 13637, 13656,
+ 13658, 13673, 13691, 13695, 13704, 13705, 13706, 13726, 13738, 13739,
+ 13750, 13758, 13760, 13761, 13775, 13786, 13787, 13792, 13806, 13824,
+ 13840, 13841, 13844, 13846, 13851, 13852, 13854, 13871, 13872, 13873,
+ 13879, 13883, 13884, 13885, 13886, 13892, 13895, 13908, 13910, 13911,
+ 13912, 13913, 13914, 13915, 13916, 13917, 13918, 13919, 13920, 13921,
+ 13922, 13923, 13924, 13926, 13927, 13928, 13938, 13941, 13942, 13954,
+ 13955, 13956, 13963, 13967, 13970, 13973, 13979, 13983, 13986, 14012,
+ 14027, 14033, 14034, 14040, 14043, 14044, 14049, 14053, 14055, 14064,
+ 14080, 14083, 14103, 14104
* ISO C11 support:
-/* Copyright (C) 1998-2005, 2006, 2007, 2008, 2009, 2011
- Free Software Foundation, Inc.
+/* Copyright (C) 1998-2012 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1998.
uint32_t
__nscd_get_nl_timestamp (void)
{
+ uint32_t retval;
if (__nss_not_use_nscd_hosts != 0)
return 0;
+ /* __nscd_get_mapping can change hst_map_handle.mapped to NO_MAPPING.
+ However, __nscd_get_mapping assumes the prior value was not NO_MAPPING.
+ Thus we have to acquire the lock to prevent this thread from changing
+ hst_map_handle.mapped to NO_MAPPING while another thread is inside
+ __nscd_get_mapping. */
+ if (!__nscd_acquire_maplock (&__hst_map_handle))
+ return 0;
+
struct mapped_database *map = __hst_map_handle.mapped;
if (map == NULL
map = __nscd_get_mapping (GETFDHST, "hosts", &__hst_map_handle.mapped);
if (map == NO_MAPPING)
- return 0;
+ retval = 0;
+ else
+ retval = map->head->extra_data[NSCD_HST_IDX_CONF_TIMESTAMP];
+
+ /* Release the lock. */
+ __hst_map_handle.lock = 0;
- return map->head->extra_data[NSCD_HST_IDX_CONF_TIMESTAMP];
+ return retval;
}