Enlightenment CVS committal Author : raster Project : e17 Module : libs/eet
Dir : e17/libs/eet/src/lib Modified Files: eet_lib.c Log Message: actually close files =================================================================== RCS file: /cvs/e/e17/libs/eet/src/lib/eet_lib.c,v retrieving revision 1.63 retrieving revision 1.64 diff -u -3 -r1.63 -r1.64 --- eet_lib.c 13 Jun 2006 10:20:22 -0000 1.63 +++ eet_lib.c 22 Jun 2006 19:21:31 -0000 1.64 @@ -160,7 +160,7 @@ 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 @@ 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 @@ 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 @@ /* no more writes pending */ ef->writes_pending = 0; - fclose(ef->fp); - ef->fp = NULL; return EET_ERROR_NONE; @@ -413,13 +411,13 @@ */ 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 @@ 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 @@ 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 @@ /* 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 @@ } 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; Using Tomcat but need to do more? Need to support web services, security? Get stuff done quickly with pre-integrated technology to make your job easier Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642 _______________________________________________ enlightenment-cvs mailing list enlightenment-cvs@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs