From: Ulrich Drepper Date: Sat, 21 Jan 2012 03:39:54 +0000 (-0500) Subject: Do not cache negative results in nscd if these are transient X-Git-Tag: upstream/2.30~11691 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=3e1aa84e7f9f38815f5db9cd7654b1a9497cf6e4;p=external%2Fglibc.git Do not cache negative results in nscd if these are transient --- diff --git a/ChangeLog b/ChangeLog index 3d847a5..1dda738 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,13 @@ +2012-01-20 Ulrich Drepper + + * 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 * malloc/malloc.c: Various cleanups. diff --git a/nscd/aicache.c b/nscd/aicache.c index aaaf80d..e1f1244 100644 --- a/nscd/aicache.c +++ b/nscd/aicache.c @@ -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 , 2004. @@ -514,8 +514,9 @@ next_nip: if (fd != -1) TEMP_FAILURE_RETRY (send (fd, ¬found, 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) diff --git a/nscd/grpcache.c b/nscd/grpcache.c index e9607c6..a698f36 100644 --- a/nscd/grpcache.c +++ b/nscd/grpcache.c @@ -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 , 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) diff --git a/nscd/hstcache.c b/nscd/hstcache.c index 4d68ade..c72feaa 100644 --- a/nscd/hstcache.c +++ b/nscd/hstcache.c @@ -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 , 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) diff --git a/nscd/initgrcache.c b/nscd/initgrcache.c index 4ac9942..2019991 100644 --- a/nscd/initgrcache.c +++ b/nscd/initgrcache.c @@ -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 , 2004. @@ -202,8 +202,9 @@ addinitgroupsX (struct database_dyn *db, int fd, request_header *req, written = TEMP_FAILURE_RETRY (send (fd, ¬found, 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) diff --git a/nscd/pwdcache.c b/nscd/pwdcache.c index 49e130c..e2ba09d 100644 --- a/nscd/pwdcache.c +++ b/nscd/pwdcache.c @@ -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 , 1998. @@ -124,8 +124,9 @@ cache_addpw (struct database_dyn *db, int fd, request_header *req, written = TEMP_FAILURE_RETRY (send (fd, ¬found, 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) diff --git a/nscd/servicescache.c b/nscd/servicescache.c index d3d5dce..a6337e3 100644 --- a/nscd/servicescache.c +++ b/nscd/servicescache.c @@ -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 , 2007. @@ -108,8 +108,9 @@ cache_addserv (struct database_dyn *db, int fd, request_header *req, written = TEMP_FAILURE_RETRY (send (fd, ¬found, 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)