From ba54808ee8530d4500f0343da38d8b1e65c65423 Mon Sep 17 00:00:00 2001 From: Carsten Haitzler Date: Thu, 22 Jun 2006 19:21:31 +0000 Subject: [PATCH] actually close files SVN revision: 23535 --- legacy/eet/src/lib/eet_lib.c | 27 +++++++++++++++------------ 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/legacy/eet/src/lib/eet_lib.c b/legacy/eet/src/lib/eet_lib.c index 75862c8ac8..4d9dab3985 100644 --- a/legacy/eet/src/lib/eet_lib.c +++ b/legacy/eet/src/lib/eet_lib.c @@ -160,7 +160,7 @@ eet_cache_add(Eet_File *ef, Eet_File ***cache, int *cache_num, int *cache_alloc) int new_cache_alloc; new_cache_num = *cache_num; - if (new_cache_num > 128) /* avoid fd overruns - limit to 128 (most recent) in the cache */ + if (new_cache_num >= 64) /* avoid fd overruns - limit to 128 (most recent) in the cache */ { Eet_File *del_ef = NULL; int i; @@ -188,7 +188,7 @@ eet_cache_add(Eet_File *ef, Eet_File ***cache, int *cache_num, int *cache_alloc) new_cache_num++; if (new_cache_num > new_cache_alloc) { - new_cache_alloc += 64; + new_cache_alloc += 16; new_cache = realloc(new_cache, new_cache_alloc * sizeof(Eet_File *)); if (!new_cache) { @@ -229,9 +229,9 @@ eet_cache_del(Eet_File *ef, Eet_File ***cache, int *cache_num, int *cache_alloc) for (j = i; j < new_cache_num; j++) new_cache[j] = new_cache[j + 1]; - if (new_cache_num < (new_cache_alloc - 64)) + if (new_cache_num < (new_cache_alloc - 16)) { - new_cache_alloc -= 64; + new_cache_alloc -= 16; if (new_cache_num > 0) { new_cache = realloc(new_cache, new_cache_alloc * sizeof(Eet_File *)); @@ -362,8 +362,6 @@ eet_flush(Eet_File *ef) /* no more writes pending */ ef->writes_pending = 0; - fclose(ef->fp); - ef->fp = NULL; return EET_ERROR_NONE; @@ -413,13 +411,13 @@ eet_clearcache(void) */ for (i = 0; i < eet_writers_num; i++) { - if (eet_writers[i]->references == 0) + if (eet_writers[i]->references <= 0) num++; } for (i = 0; i < eet_readers_num; i++) { - if (eet_readers[i]->references == 0) + if (eet_readers[i]->references <= 0) num++; } @@ -431,18 +429,20 @@ eet_clearcache(void) num = 0; for (i = 0; i < eet_writers_num; i++) { - if (eet_writers[i]->references == 0) + if (eet_writers[i]->references <= 0) { closelist[num] = eet_writers[i]; + eet_writers[i]->delete_me_now = 1; num++; } } for (i = 0; i < eet_readers_num; i++) { - if (eet_readers[i]->references == 0) + if (eet_readers[i]->references <= 0) { closelist[num] = eet_readers[i]; + eet_readers[i]->delete_me_now = 1; num++; } } @@ -545,6 +545,7 @@ eet_open(const char *file, Eet_File_Mode mode) ef->data = NULL; ef->data_size = 0; + fcntl(fileno(ef->fp), F_SETFD, FD_CLOEXEC); /* if we opened for read or read-write */ if ((mode == EET_FILE_MODE_READ) || (mode == EET_FILE_MODE_READ_WRITE)) { @@ -751,6 +752,7 @@ eet_close(Eet_File *ef) /* if not urgent to delete it - dont free it - leave it in cache */ if ((!ef->delete_me_now) && (ef->mode == EET_FILE_MODE_READ)) return EET_ERROR_NONE; + /* remove from cache */ if (ef->mode == EET_FILE_MODE_READ) eet_cache_del(ef, &eet_readers, &eet_readers_num, &eet_readers_alloc); @@ -790,11 +792,12 @@ eet_close(Eet_File *ef) } free(ef->header); } - if (ef->data) - munmap(ef->data, ef->data_size); + if (ef->data) munmap(ef->data, ef->data_size); + if (ef->fp) fclose(ef->fp); /* zero out ram for struct - caution tactic against stale memory use */ memset(ef, 0, sizeof(Eet_File)); + /* free it */ free(ef); return err;