forked from enlightenment/efl
eina: force copy of not copied virtualized file while doing an eina_file_dup.
The other way around is pretty much impossible as you don't know who does an eina_file_dup and for how long they keep there reference. T5234
This commit is contained in:
parent
8ed9aec49b
commit
4766316935
|
@ -477,6 +477,19 @@ eina_file_dup(const Eina_File *f)
|
||||||
{
|
{
|
||||||
EINA_FILE_MAGIC_CHECK(f, NULL);
|
EINA_FILE_MAGIC_CHECK(f, NULL);
|
||||||
eina_lock_take(&file->lock);
|
eina_lock_take(&file->lock);
|
||||||
|
if (file->virtual)
|
||||||
|
{
|
||||||
|
// For ease of use and safety of the API, if you dup a virtualized file, we prefer to make a copy
|
||||||
|
if (file->global_map != (void*)(file->filename + strlen(file->filename) + 1))
|
||||||
|
{
|
||||||
|
Eina_File *r;
|
||||||
|
|
||||||
|
r = eina_file_virtualize(file->filename, file->global_map, file->length, EINA_TRUE);
|
||||||
|
eina_lock_release(&file->lock);
|
||||||
|
|
||||||
|
return r;
|
||||||
|
}
|
||||||
|
}
|
||||||
file->refcount++;
|
file->refcount++;
|
||||||
eina_lock_release(&file->lock);
|
eina_lock_release(&file->lock);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue