parent
cce1b3b586
commit
ba54808ee8
|
@ -160,7 +160,7 @@ eet_cache_add(Eet_File *ef, Eet_File ***cache, int *cache_num, int *cache_alloc)
|
||||||
int new_cache_alloc;
|
int new_cache_alloc;
|
||||||
|
|
||||||
new_cache_num = *cache_num;
|
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;
|
Eet_File *del_ef = NULL;
|
||||||
int i;
|
int i;
|
||||||
|
@ -188,7 +188,7 @@ eet_cache_add(Eet_File *ef, Eet_File ***cache, int *cache_num, int *cache_alloc)
|
||||||
new_cache_num++;
|
new_cache_num++;
|
||||||
if (new_cache_num > new_cache_alloc)
|
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 *));
|
new_cache = realloc(new_cache, new_cache_alloc * sizeof(Eet_File *));
|
||||||
if (!new_cache)
|
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++)
|
for (j = i; j < new_cache_num; j++)
|
||||||
new_cache[j] = new_cache[j + 1];
|
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)
|
if (new_cache_num > 0)
|
||||||
{
|
{
|
||||||
new_cache = realloc(new_cache, new_cache_alloc * sizeof(Eet_File *));
|
new_cache = realloc(new_cache, new_cache_alloc * sizeof(Eet_File *));
|
||||||
|
@ -362,8 +362,6 @@ eet_flush(Eet_File *ef)
|
||||||
|
|
||||||
/* no more writes pending */
|
/* no more writes pending */
|
||||||
ef->writes_pending = 0;
|
ef->writes_pending = 0;
|
||||||
fclose(ef->fp);
|
|
||||||
ef->fp = NULL;
|
|
||||||
|
|
||||||
return EET_ERROR_NONE;
|
return EET_ERROR_NONE;
|
||||||
|
|
||||||
|
@ -413,13 +411,13 @@ eet_clearcache(void)
|
||||||
*/
|
*/
|
||||||
for (i = 0; i < eet_writers_num; i++)
|
for (i = 0; i < eet_writers_num; i++)
|
||||||
{
|
{
|
||||||
if (eet_writers[i]->references == 0)
|
if (eet_writers[i]->references <= 0)
|
||||||
num++;
|
num++;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (i = 0; i < eet_readers_num; i++)
|
for (i = 0; i < eet_readers_num; i++)
|
||||||
{
|
{
|
||||||
if (eet_readers[i]->references == 0)
|
if (eet_readers[i]->references <= 0)
|
||||||
num++;
|
num++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -431,18 +429,20 @@ eet_clearcache(void)
|
||||||
num = 0;
|
num = 0;
|
||||||
for (i = 0; i < eet_writers_num; i++)
|
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];
|
closelist[num] = eet_writers[i];
|
||||||
|
eet_writers[i]->delete_me_now = 1;
|
||||||
num++;
|
num++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for (i = 0; i < eet_readers_num; i++)
|
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];
|
closelist[num] = eet_readers[i];
|
||||||
|
eet_readers[i]->delete_me_now = 1;
|
||||||
num++;
|
num++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -545,6 +545,7 @@ eet_open(const char *file, Eet_File_Mode mode)
|
||||||
ef->data = NULL;
|
ef->data = NULL;
|
||||||
ef->data_size = 0;
|
ef->data_size = 0;
|
||||||
|
|
||||||
|
fcntl(fileno(ef->fp), F_SETFD, FD_CLOEXEC);
|
||||||
/* if we opened for read or read-write */
|
/* if we opened for read or read-write */
|
||||||
if ((mode == EET_FILE_MODE_READ) || (mode == EET_FILE_MODE_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 not urgent to delete it - dont free it - leave it in cache */
|
||||||
if ((!ef->delete_me_now) && (ef->mode == EET_FILE_MODE_READ))
|
if ((!ef->delete_me_now) && (ef->mode == EET_FILE_MODE_READ))
|
||||||
return EET_ERROR_NONE;
|
return EET_ERROR_NONE;
|
||||||
|
|
||||||
/* remove from cache */
|
/* remove from cache */
|
||||||
if (ef->mode == EET_FILE_MODE_READ)
|
if (ef->mode == EET_FILE_MODE_READ)
|
||||||
eet_cache_del(ef, &eet_readers, &eet_readers_num, &eet_readers_alloc);
|
eet_cache_del(ef, &eet_readers, &eet_readers_num, &eet_readers_alloc);
|
||||||
|
@ -790,11 +792,12 @@ eet_close(Eet_File *ef)
|
||||||
}
|
}
|
||||||
free(ef->header);
|
free(ef->header);
|
||||||
}
|
}
|
||||||
if (ef->data)
|
if (ef->data) munmap(ef->data, ef->data_size);
|
||||||
munmap(ef->data, ef->data_size);
|
if (ef->fp) fclose(ef->fp);
|
||||||
|
|
||||||
/* zero out ram for struct - caution tactic against stale memory use */
|
/* zero out ram for struct - caution tactic against stale memory use */
|
||||||
memset(ef, 0, sizeof(Eet_File));
|
memset(ef, 0, sizeof(Eet_File));
|
||||||
|
|
||||||
/* free it */
|
/* free it */
|
||||||
free(ef);
|
free(ef);
|
||||||
return err;
|
return err;
|
||||||
|
|
Loading…
Reference in New Issue