#include <ac/socket.h>
#include <ac/string.h>
#include <ac/time.h>
+#include <ac/unistd.h>
#include <sys/stat.h>
#include "slap.h"
{
struct ldbminfo *li = (struct ldbminfo *) be->be_private;
int i, lru, empty;
- time_t oldtime, curtime;
+ time_t oldtime;
char buf[MAXPATHLEN];
#ifdef HAVE_ST_BLKSIZE
struct stat st;
#endif
- curtime = slap_get_time();
empty = MAXDBCACHE;
ldap_pvt_thread_mutex_lock( &li->li_dbcache_mutex );
do {
lru = 0;
- oldtime = curtime;
+ oldtime = 1;
for ( i = 0; i < MAXDBCACHE; i++ ) {
/* see if this slot is free */
if ( li->li_dbcache[i].dbc_name == NULL) {
}
/* keep track of lru db */
- if ( li->li_dbcache[i].dbc_lastref < oldtime
- && li->li_dbcache[i].dbc_refcnt == 0 )
+ if (( li->li_dbcache[i].dbc_refcnt == 0 ) &&
+ (( oldtime == 1 ) ||
+ ( li->li_dbcache[i].dbc_lastref < oldtime )) )
{
lru = i;
oldtime = li->li_dbcache[i].dbc_lastref;
}
li->li_dbcache[i].dbc_name = ch_strdup( buf );
li->li_dbcache[i].dbc_refcnt = 1;
- li->li_dbcache[i].dbc_lastref = curtime;
+ li->li_dbcache[i].dbc_lastref = slap_get_time();
li->li_dbcache[i].dbc_flags = flags;
li->li_dbcache[i].dbc_dirty = 0;
#ifdef HAVE_ST_BLKSIZE