remove lumiera_fhcache as parameter, closes #396
This commit is contained in:
parent
cdd8136524
commit
31a2f454d8
4 changed files with 26 additions and 32 deletions
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Reference in a new issue