forked from rpms/glibc
145 lines
5.8 KiB
Diff
145 lines
5.8 KiB
Diff
|
commit 3e1aa84e7f9f38815f5db9cd7654b1a9497cf6e4
|
||
|
Author: Ulrich Drepper <drepper@gmail.com>
|
||
|
Date: Fri Jan 20 22:39:54 2012 -0500
|
||
|
|
||
|
Do not cache negative results in nscd if these are transient
|
||
|
|
||
|
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 <drepper@redhat.com>, 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 <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)
|
||
|
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 <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)
|
||
|
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 <drepper@redhat.com>, 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 <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, ¬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 <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, ¬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)
|