Skip to content

Commit

Permalink
* nscd/nscd.h (struct database_dyn): Add prunelock field.
Browse files Browse the repository at this point in the history
	* nscd/cache.c (prune_cache): Take prunelock before starting the
	work.  Just return in case it is already taken.

	(inet6_option_alloc): Now a simple wrapper around option_alloc.
  • Loading branch information
Ulrich Drepper committed May 29, 2006
1 parent ab50b2e commit 9636a21
Show file tree
Hide file tree
Showing 3 changed files with 18 additions and 2 deletions.
8 changes: 7 additions & 1 deletion ChangeLog
Original file line number Diff line number Diff line change
@@ -1,3 +1,9 @@
2006-05-29 Ulrich Drepper <drepper@redhat.com>

* nscd/nscd.h (struct database_dyn): Add prunelock field.
* nscd/cache.c (prune_cache): Take prunelock before starting the
work. Just return in case it is already taken.

2006-05-25 Ulrich Drepper <drepper@redhat.com>

* nis/nis_removemember.c (nis_removemember): Avoid unnecessary
Expand All @@ -12,7 +18,7 @@
inet6_option_alloc.
* inet/inet6_option.c (option_alloc): Renamed from
inet6_option_alloc. Made static.
(inet6_option_alloc): New a simple wrapper around option_alloc.
(inet6_option_alloc): Now a simple wrapper around option_alloc.
(inet6_option_append): Call option_alloc.
* include/netinet/in.h: Remove libc_hidden_proto for
inet6_option_alloc.
Expand Down
11 changes: 10 additions & 1 deletion nscd/cache.c
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
/* Copyright (c) 1998, 1999, 2003, 2004, 2005 Free Software Foundation, Inc.
/* Copyright (c) 1998, 1999, 2003-2005, 2006 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1998.
Expand Down Expand Up @@ -198,6 +198,13 @@ prune_cache (struct database_dyn *table, time_t now)
if (cnt == 0)
return;

/* This function can be called from the cleanup thread but also in
response to an invalidate command. Make sure only one thread is
running. No need for the second to wait around. */
if (pthread_mutex_trylock (&table->prunelock) != 0)
/* Te work is already being done. */
return ;

/* If we check for the modification of the underlying file we invalidate
the entries also in this case. */
if (table->check_file)
Expand Down Expand Up @@ -455,4 +462,6 @@ prune_cache (struct database_dyn *table, time_t now)
/* Run garbage collection if any entry has been removed or replaced. */
if (any)
gc (table);

pthread_mutex_unlock (&table->prunelock);
}
1 change: 1 addition & 0 deletions nscd/nscd.h
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,7 @@ typedef enum
struct database_dyn
{
pthread_rwlock_t lock;
pthread_mutex_t prunelock;

int enabled;
int check_file;
Expand Down

0 comments on commit 9636a21

Please sign in to comment.