This is the mail archive of the libc-alpha@sourceware.org mailing list for the glibc project.
| Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
|---|---|---|
| Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
| Other format: | [Raw text] | |
On Tue, Apr 01, 2014 at 11:26:16AM -0700, Roland McGrath wrote:
> If you bzero before explicitly filling fields, does the compiler optimize
> to only zeroing the one unused field? If so, that seems more futureproof.
It doesn't quite, but (now that I checked) it really only results in a
couple of additional instructions (as opposed to a function call that
I had implicitly assumed), so I'll add it anyway if you think it is
OK. This obviously also needs the previous patch that consolidates
the head initialization code.
Siddhesh
[BZ #16791]
* nscd/nscd-client.h (datahead_init_common): Initialize entire
structure.
(datahead_init_pos): Call datahead_init_common early.
(datahead_init_neg): Likewise.
diff --git a/nscd/nscd-client.h b/nscd/nscd-client.h
index c069bf6..e2d04f2 100644
--- a/nscd/nscd-client.h
+++ b/nscd/nscd-client.h
@@ -240,6 +240,10 @@ static inline time_t
datahead_init_common (struct datahead *head, nscd_ssize_t allocsize,
nscd_ssize_t recsize, uint32_t ttl)
{
+ /* Initialize so that we don't write out junk in uninitialized data to the
+ cache. */
+ bzero (head, sizeof (*head));
+
head->allocsize = allocsize;
head->recsize = recsize;
head->usable = true;
@@ -253,18 +257,21 @@ static inline time_t
datahead_init_pos (struct datahead *head, nscd_ssize_t allocsize,
nscd_ssize_t recsize, uint8_t nreloads, uint32_t ttl)
{
+ time_t ret = datahead_init_common (head, allocsize, recsize, ttl);
head->notfound = false;
head->nreloads = nreloads;
- return datahead_init_common (head, allocsize, recsize, ttl);
+ return ret;
}
static inline time_t
datahead_init_neg (struct datahead *head, nscd_ssize_t allocsize,
nscd_ssize_t recsize, uint32_t ttl)
{
+ time_t ret = datahead_init_common (head, allocsize, recsize, ttl);
+ /* We don't need to touch nreloads here since it is set to our desired value
+ (0) when we bzero the structure. */
head->notfound = true;
- head->nreloads = 0;
- return datahead_init_common (head, allocsize, recsize, ttl);
+ return ret;
}
/* Structure for one hash table entry. */
Attachment:
pgpaN64wjsQbP.pgp
Description: PGP signature
| Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
|---|---|---|
| Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |