remove lumiera_fhcache as parameter, closes #396

This commit is contained in:
Christian Thaeter 2010-02-04 10:21:20 +01:00
parent cdd8136524
commit 31a2f454d8
4 changed files with 26 additions and 32 deletions

View file

@ -95,7 +95,6 @@ lumiera_file_handle_acquire (LumieraFile self)
TRACE (file_dbg);
REQUIRE (self);
REQUIRE (self->descriptor);
REQUIRE (lumiera_fhcache);
return lumiera_filedescriptor_handle_acquire (self->descriptor);
}
@ -107,7 +106,6 @@ lumiera_file_handle_release (LumieraFile self)
TRACE (file_dbg);
REQUIRE (self);
REQUIRE (self->descriptor);
REQUIRE (lumiera_fhcache);
return lumiera_filedescriptor_handle_release (self->descriptor);
}

View file

@ -214,9 +214,9 @@ lumiera_filedescriptor_handle_acquire (LumieraFiledescriptor self)
{
if (!self->handle)
/* no handle yet, get a new one */
lumiera_filehandlecache_handle_acquire (lumiera_fhcache, self);
lumiera_filehandlecache_handle_acquire (self);
else
lumiera_filehandlecache_checkout (lumiera_fhcache, self->handle);
lumiera_filehandlecache_checkout (self->handle);
fd = lumiera_filehandle_handle (self->handle);
}
@ -232,7 +232,7 @@ lumiera_filedescriptor_handle_release (LumieraFiledescriptor self)
REQUIRE (self->handle);
LUMIERA_MUTEX_SECTION (mutex_sync, &self->lock)
lumiera_filehandlecache_checkin (lumiera_fhcache, self->handle);
lumiera_filehandlecache_checkin (self->handle);
}
@ -299,11 +299,11 @@ lumiera_filedescriptor_delete (LumieraFiledescriptor self, const char* name)
if (self->handle && name && ((self->flags & O_RDWR) == O_RDWR))
{
TRACE (filedescriptor_dbg, "truncate %s to %lld", name, (long long)self->realsize);
lumiera_filehandlecache_checkout (lumiera_fhcache, self->handle);
lumiera_filehandlecache_checkout (self->handle);
int dummy = ftruncate (lumiera_filehandle_handle (self->handle), self->realsize);
(void) dummy; /* this is present to silence a warning */
TODO ("handle error case better");
lumiera_filehandlecache_checkin (lumiera_fhcache, self->handle);
lumiera_filehandlecache_checkin (self->handle);
}
lumiera_mmapings_delete (self->mmapings);

View file

@ -64,21 +64,21 @@ lumiera_filehandlecache_delete (void)
LumieraFilehandle
lumiera_filehandlecache_handle_acquire (LumieraFilehandlecache self, LumieraFiledescriptor desc)
lumiera_filehandlecache_handle_acquire (LumieraFiledescriptor desc)
{
TRACE (filehandlecache_dbg);
LumieraFilehandle ret = NULL;
LUMIERA_MUTEX_SECTION (mutex_sync, &self->lock)
LUMIERA_MUTEX_SECTION (mutex_sync, &lumiera_fhcache->lock)
{
if (self->available <= 0 && self->cache.cached)
if (lumiera_fhcache->available <= 0 && lumiera_fhcache->cache.cached)
{
/* pop a filehandle from cache */
ret = lumiera_mrucache_pop (&self->cache);
ret = lumiera_filehandle_init (lumiera_mrucache_pop (&self->cache), desc);
if (self->available < 0)
ret = lumiera_mrucache_pop (&lumiera_fhcache->cache);
ret = lumiera_filehandle_init (lumiera_mrucache_pop (&lumiera_fhcache->cache), desc);
if (lumiera_fhcache->available < 0)
/* try to free overallocated filehandles */
self->available -= self->available + lumiera_mrucache_age (&self->cache, -self->available);
lumiera_fhcache->available -= lumiera_fhcache->available + lumiera_mrucache_age (&lumiera_fhcache->cache, -lumiera_fhcache->available);
}
else
{
@ -89,51 +89,49 @@ lumiera_filehandlecache_handle_acquire (LumieraFilehandlecache self, LumieraFile
if (!ret)
LUMIERA_ERROR_SET_ALERT (file, FILEHANDLECACHE_NOHANDLE, lumiera_filedescriptor_name (desc));
else
--self->available;
--lumiera_fhcache->available;
}
desc->handle = ret;
++self->checked_out;
++lumiera_fhcache->checked_out;
}
return ret;
}
LumieraFilehandle
lumiera_filehandlecache_checkout (LumieraFilehandlecache self, LumieraFilehandle handle)
lumiera_filehandlecache_checkout (LumieraFilehandle handle)
{
REQUIRE (self);
REQUIRE (handle);
/* This function is called with the associated descriptor locked, nothing can modify 'handle' */
if (!handle->use_cnt)
{
/* lock cache and checkout */
LUMIERA_MUTEX_SECTION (mutex_sync, &self->lock)
LUMIERA_MUTEX_SECTION (mutex_sync, &lumiera_fhcache->lock)
{
lumiera_mrucache_checkout (&self->cache, &handle->cachenode);
lumiera_mrucache_checkout (&lumiera_fhcache->cache, &handle->cachenode);
}
}
++handle->use_cnt;
++self->checked_out;
++lumiera_fhcache->checked_out;
return handle;
}
void
lumiera_filehandlecache_checkin (LumieraFilehandlecache self, LumieraFilehandle handle)
lumiera_filehandlecache_checkin (LumieraFilehandle handle)
{
REQUIRE (self);
REQUIRE (handle);
REQUIRE (handle->use_cnt);
/* This function is called with the associated descriptor locked, nothing can modify 'self' */
/* This function is called with the associated descriptor locked, nothing can modify the fhcache */
if (!--handle->use_cnt)
{
/* lock cache and checin */
LUMIERA_MUTEX_SECTION (mutex_sync, &self->lock)
LUMIERA_MUTEX_SECTION (mutex_sync, &lumiera_fhcache->lock)
{
--self->checked_out;
lumiera_mrucache_checkin (&self->cache, &handle->cachenode);
--lumiera_fhcache->checked_out;
lumiera_mrucache_checkin (&lumiera_fhcache->cache, &handle->cachenode);
}
}
}

View file

@ -51,8 +51,6 @@ struct lumiera_filehandlecache_struct
lumiera_mutex lock;
};
extern LumieraFilehandlecache lumiera_fhcache;
/**
* Initializes the filehandle cache.
* @param max_entries number how much filehandles shall be managed
@ -76,7 +74,7 @@ lumiera_filehandlecache_delete (void);
* @return the new filehandle
*/
LumieraFilehandle
lumiera_filehandlecache_handle_acquire (LumieraFilehandlecache self, LumieraFiledescriptor desc);
lumiera_filehandlecache_handle_acquire (LumieraFiledescriptor desc);
/**
* Remove a filehandle from cache aging
@ -85,7 +83,7 @@ lumiera_filehandlecache_handle_acquire (LumieraFilehandlecache self, LumieraFile
* @param handle the filehandle to be checked out
*/
LumieraFilehandle
lumiera_filehandlecache_checkout (LumieraFilehandlecache self, LumieraFilehandle handle);
lumiera_filehandlecache_checkout (LumieraFilehandle handle);
/**
* Put a filehandle into the cache
@ -94,6 +92,6 @@ lumiera_filehandlecache_checkout (LumieraFilehandlecache self, LumieraFilehandle
* @param handle the filehandle to be checked in
*/
void
lumiera_filehandlecache_checkin (LumieraFilehandlecache self, LumieraFilehandle handle);
lumiera_filehandlecache_checkin (LumieraFilehandle handle);
#endif