From e953c3003b237e09a317e9af7fa77dd14f0b83fe Mon Sep 17 00:00:00 2001 From: Christian Thaeter Date: Tue, 11 Nov 2008 10:06:03 +0100 Subject: [PATCH] Refactored filehandle/filehandlecache to use a normal init function --- src/backend/filehandle.c | 26 ++++++++++++++++---------- src/backend/filehandle.h | 14 ++++++++++++-- src/backend/filehandlecache.c | 6 +++--- 3 files changed, 31 insertions(+), 15 deletions(-) diff --git a/src/backend/filehandle.c b/src/backend/filehandle.c index 6075baa08..9ec78af86 100644 --- a/src/backend/filehandle.c +++ b/src/backend/filehandle.c @@ -29,20 +29,28 @@ #include LumieraFilehandle -lumiera_filehandle_new () +lumiera_filehandle_init (LumieraFilehandle self, LumieraFiledescriptor desc) { - LumieraFilehandle self = lumiera_malloc (sizeof (lumiera_filehandle)); TRACE (filehandle, "%p", self); - - llist_init (&self->cachenode); - self->fd = -1; - self->use_cnt = 1; - self->descriptor = NULL; - + if (self) + { + llist_init (&self->cachenode); + self->fd = -1; + self->use_cnt = 1; + self->descriptor = desc; + } return self; } +LumieraFilehandle +lumiera_filehandle_new (LumieraFiledescriptor desc) +{ + LumieraFilehandle self = lumiera_malloc (sizeof (*self)); + return lumiera_filehandle_init (self, desc); +} + + void* lumiera_filehandle_destroy_node (LList node) { @@ -53,8 +61,6 @@ lumiera_filehandle_destroy_node (LList node) if (self->fd >= 0) close (self->fd); - self->fd = -1; - self->descriptor = NULL; return self; } diff --git a/src/backend/filehandle.h b/src/backend/filehandle.h index 1d10c64a3..776e47ea3 100644 --- a/src/backend/filehandle.h +++ b/src/backend/filehandle.h @@ -52,11 +52,21 @@ struct lumiera_filehandle_struct }; /** - * Allocate a new filehandle structure. + * Initialize filehandle structure. + * @param self filehandle sttructure to be initialized + * @param descriptor on which this filehandle will be attached * @return new filehandle structure */ LumieraFilehandle -lumiera_filehandle_new (); +lumiera_filehandle_init (LumieraFilehandle self, LumieraFiledescriptor descriptor); + +/** + * Allocate a new filehandle structure. + * @param descriptor on which this filehandle will be attached + * @return new filehandle structure + */ +LumieraFilehandle +lumiera_filehandle_new (LumieraFiledescriptor descriptor); /** diff --git a/src/backend/filehandlecache.c b/src/backend/filehandlecache.c index cf8d0a0e5..716c0797e 100644 --- a/src/backend/filehandlecache.c +++ b/src/backend/filehandlecache.c @@ -74,6 +74,7 @@ lumiera_filehandlecache_handle_acquire (LumieraFilehandlecache self, LumieraFile { /* 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) /* try to free overallocated filehandles */ self->available -= self->available + lumiera_mrucache_age (&self->cache, -self->available); @@ -81,14 +82,13 @@ lumiera_filehandlecache_handle_acquire (LumieraFilehandlecache self, LumieraFile else { /* allocate new filehandle if we are below the limit or no cached handles are available (overallocating) */ - ret = lumiera_filehandle_new (); + NOTICE (filehandlecache, "overallocating filehandle"); + ret = lumiera_filehandle_new (desc); if (!ret) LUMIERA_ERROR_SET (filehandlecache, FILEHANDLECACHE_NOHANDLE); else --self->available; } - ret->use_cnt = 1; - ret->descriptor = desc; desc->handle = ret; ++self->checked_out; }