about summary refs log tree commit diff
path: root/nscd/servicescache.c
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@gmail.com>2011-07-01 23:02:09 -0400
committerUlrich Drepper <drepper@gmail.com>2011-07-01 23:02:09 -0400
commit99231d9abe0fd74c7957d25b08c1d1ede4cae5a0 (patch)
tree6dc0e8933810858078f847cd60b9c592f6660e6c /nscd/servicescache.c
parent445b4a53ea9d6c457c5f4ac1538102d8be0a5d89 (diff)
downloadglibc-99231d9abe0fd74c7957d25b08c1d1ede4cae5a0.tar.gz
glibc-99231d9abe0fd74c7957d25b08c1d1ede4cae5a0.tar.xz
glibc-99231d9abe0fd74c7957d25b08c1d1ede4cae5a0.zip
nscd cleanups
Cleanup and optimize last patch.  Add timeout fixes also to the
services cache.
Diffstat (limited to 'nscd/servicescache.c')
-rw-r--r--nscd/servicescache.c11
1 files changed, 8 insertions, 3 deletions
diff --git a/nscd/servicescache.c b/nscd/servicescache.c
index b0a2977935..ec5a367db8 100644
--- a/nscd/servicescache.c
+++ b/nscd/servicescache.c
@@ -108,10 +108,15 @@ cache_addserv (struct database_dyn *db, int fd, request_header *req,
 	    written = TEMP_FAILURE_RETRY (send (fd, &notfound, total,
 						MSG_NOSIGNAL));
 
-	  dataset = mempool_alloc (db, sizeof (struct dataset) + req->key_len,
-				   1);
 	  /* If we cannot permanently store the result, so be it.  */
-	  if (dataset != NULL)
+	  if (__builtin_expect (db->negtimeout == 0, 0))
+	    {
+	      /* Mark the old entry as obsolete.  */
+	      if (dh != NULL)
+		dh->usable = false;
+	    }
+	  else if ((dataset = mempool_alloc (db, (sizeof (struct dataset)
+						  + req->key_len), 1)) != NULL)
 	    {
 	      dataset->head.allocsize = sizeof (struct dataset) + req->key_len;
 	      dataset->head.recsize = total;