Eet_File_Node *efn);
static Eet_Error
-eet_internal_close(Eet_File *ef,
- Eina_Bool locked);
+eet_internal_close(Eet_File *ef, Eina_Bool locked, Eina_Bool shutdown);
static Eina_Lock eet_cache_lock;
if (test)
{
ef->delete_me_now = 1;
- eet_internal_close(ef, EINA_TRUE);
+ eet_internal_close(ef, EINA_TRUE, EINA_FALSE);
}
return test;
if (del_ef)
{
del_ef->delete_me_now = 1;
- eet_internal_close(del_ef, EINA_TRUE);
+ eet_internal_close(del_ef, EINA_TRUE, EINA_FALSE);
}
}
for (i = 0; i < num; i++)
{
ERR("File '%s' is still open %i times !", closelist[i]->path, closelist[i]->references);
- eet_internal_close(closelist[i], EINA_TRUE);
+ eet_internal_close(closelist[i], EINA_TRUE, EINA_TRUE);
}
}
eet_node_shutdown();
for (i = 0; i < num; i++)
{
- eet_internal_close(closelist[i], EINA_TRUE);
+ eet_internal_close(closelist[i], EINA_TRUE, EINA_FALSE);
}
}
default:
ef->delete_me_now = 1;
- eet_internal_close(ef, EINA_TRUE);
+ eet_internal_close(ef, EINA_TRUE, EINA_FALSE);
break;
}
static Eet_Error
eet_internal_close(Eet_File *ef,
- Eina_Bool locked)
+ Eina_Bool locked, Eina_Bool shutdown)
{
Eet_Error err = EET_ERROR_NONE;
if (efn->free_name)
free(efn->name);
- eet_file_node_mp_free(efn);
+ if (!shutdown)
+ eet_file_node_mp_free(efn);
}
}
free(ef->header->directory->nodes);
}
- eet_file_directory_mp_free(ef->header->directory);
+ if (!shutdown)
+ eet_file_directory_mp_free(ef->header->directory);
}
- eet_file_header_mp_free(ef->header);
+ if (!shutdown)
+ eet_file_header_mp_free(ef->header);
}
eet_dictionary_free(ef->ed);
/* free it */
eina_stringshare_del(ef->path);
- eet_file_mp_free(ef);
+ if (!shutdown)
+ eet_file_mp_free(ef);
return err;
on_error:
eet_sync(ef);
ef->references++;
ef->delete_me_now = 1;
- eet_internal_close(ef, EINA_TRUE);
+ eet_internal_close(ef, EINA_TRUE, EINA_FALSE);
}
ef = eet_cache_find(path, eet_readers, eet_readers_num);
eet_sync(ef);
ef->references++;
ef->delete_me_now = 1;
- eet_internal_close(ef, EINA_TRUE);
+ eet_internal_close(ef, EINA_TRUE, EINA_FALSE);
}
ef = eet_cache_find((char *)file, eet_readers, eet_readers_num);
{
ef->delete_me_now = 1;
ef->references++;
- eet_internal_close(ef, EINA_TRUE);
+ eet_internal_close(ef, EINA_TRUE, EINA_FALSE);
}
ef = eet_cache_find((char *)file, eet_writers, eet_writers_num);
{
ef->delete_me_now = 1;
ef->references++;
- eet_internal_close(ef, EINA_TRUE);
+ eet_internal_close(ef, EINA_TRUE, EINA_FALSE);
ef = NULL;
}
EAPI Eet_Error
eet_close(Eet_File *ef)
{
- return eet_internal_close(ef, EINA_FALSE);
+ return eet_internal_close(ef, EINA_FALSE, EINA_FALSE);
}
EAPI void *