Do not cache negative results in nscd if these are transient

This commit is contained in:
Ulrich Drepper 2012-01-20 22:39:54 -05:00
parent 6e4b210745
commit 3e1aa84e7f
7 changed files with 34 additions and 18 deletions

View file

@ -1,3 +1,13 @@
2012-01-20 Ulrich Drepper <drepper@gmail.com>
* nscd/aicache.c (addhstaiX): Do not cache negative results of
transient errors.
* nscd/grpcache.c (cache_addgr): Likewise.
* nscd/hstcache.c (cache_addhst): Likewise.
* nscd/initgrcache.c (addinitgroupsX): Likewise.
* nscd/pwdcache.c (cache_addpw): Likewise.
* nscd/servicescache.c (cache_addserv): Likewise.
2012-01-16 Ulrich Drepper <drepper@gmail.com>
* malloc/malloc.c: Various cleanups.

View file

@ -1,5 +1,5 @@
/* Cache handling for host lookup.
Copyright (C) 2004-2008, 2009, 2010, 2011 Free Software Foundation, Inc.
Copyright (C) 2004-2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@redhat.com>, 2004.
@ -514,8 +514,9 @@ next_nip:
if (fd != -1)
TEMP_FAILURE_RETRY (send (fd, &notfound, total, MSG_NOSIGNAL));
/* If we cannot permanently store the result, so be it. */
if (__builtin_expect (db->negtimeout == 0, 0))
/* If we have a transient error or cannot permanently store the
result, so be it. */
if (rc4 == EAGAIN || __builtin_expect (db->negtimeout == 0, 0))
{
/* Mark the old entry as obsolete. */
if (dh != NULL)

View file

@ -1,5 +1,5 @@
/* Cache handling for group lookup.
Copyright (C) 1998-2008, 2009, 2011 Free Software Foundation, Inc.
Copyright (C) 1998-2008, 2009, 2011, 2012 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1998.
@ -120,8 +120,9 @@ cache_addgr (struct database_dyn *db, int fd, request_header *req,
else
written = total;
/* If we cannot permanently store the result, so be it. */
if (db->negtimeout == 0)
/* If we have a transient error or cannot permanently store
the result, so be it. */
if (errno == EAGAIN || __builtin_expect (db->negtimeout == 0, 0))
{
/* Mark the old entry as obsolete. */
if (dh != NULL)

View file

@ -1,5 +1,5 @@
/* Cache handling for host lookup.
Copyright (C) 1998-2008, 2009, 2011 Free Software Foundation, Inc.
Copyright (C) 1998-2008, 2009, 2011, 2012 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1998.
@ -141,8 +141,9 @@ cache_addhst (struct database_dyn *db, int fd, request_header *req,
MSG_NOSIGNAL)) != total)
all_written = false;
/* If we cannot permanently store the result, so be it. */
if (__builtin_expect (db->negtimeout == 0, 0))
/* If we have a transient error or cannot permanently store
the result, so be it. */
if (errval == EAGAIN || __builtin_expect (db->negtimeout == 0, 0))
{
/* Mark the old entry as obsolete. */
if (dh != NULL)

View file

@ -1,5 +1,5 @@
/* Cache handling for host lookup.
Copyright (C) 2004-2006, 2008, 2009, 2011 Free Software Foundation, Inc.
Copyright (C) 2004-2006, 2008, 2009, 2011, 2012 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@redhat.com>, 2004.
@ -202,8 +202,9 @@ addinitgroupsX (struct database_dyn *db, int fd, request_header *req,
written = TEMP_FAILURE_RETRY (send (fd, &notfound, total,
MSG_NOSIGNAL));
/* If we cannot permanently store the result, so be it. */
if (__builtin_expect (db->negtimeout == 0, 0))
/* If we have a transient error or cannot permanently store
the result, so be it. */
if (all_tryagain || __builtin_expect (db->negtimeout == 0, 0))
{
/* Mark the old entry as obsolete. */
if (dh != NULL)

View file

@ -1,5 +1,5 @@
/* Cache handling for passwd lookup.
Copyright (C) 1998-2008, 2009, 2011 Free Software Foundation, Inc.
Copyright (C) 1998-2008, 2009, 2011, 2012 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1998.
@ -124,8 +124,9 @@ cache_addpw (struct database_dyn *db, int fd, request_header *req,
written = TEMP_FAILURE_RETRY (send (fd, &notfound, total,
MSG_NOSIGNAL));
/* If we cannot permanently store the result, so be it. */
if (__builtin_expect (db->negtimeout == 0, 0))
/* If we have a transient error or cannot permanently store
the result, so be it. */
if (errno == EAGAIN || __builtin_expect (db->negtimeout == 0, 0))
{
/* Mark the old entry as obsolete. */
if (dh != NULL)

View file

@ -1,5 +1,5 @@
/* Cache handling for services lookup.
Copyright (C) 2007, 2008, 2009, 2011 Free Software Foundation, Inc.
Copyright (C) 2007, 2008, 2009, 2011, 2012 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@drepper.com>, 2007.
@ -108,8 +108,9 @@ cache_addserv (struct database_dyn *db, int fd, request_header *req,
written = TEMP_FAILURE_RETRY (send (fd, &notfound, total,
MSG_NOSIGNAL));
/* If we cannot permanently store the result, so be it. */
if (__builtin_expect (db->negtimeout == 0, 0))
/* If we have a transient error or cannot permanently store
the result, so be it. */
if (errval == EAGAIN || __builtin_expect (db->negtimeout == 0, 0))
{
/* Mark the old entry as obsolete. */
if (dh != NULL)