forked from enlightenment/efl
eina_file: check copied using copied
Summary:
From (1) "the following commit" message, the changed condition in this patch
should check if the virtualized file is copied or not.
In eina_file_virtualize
head_padded = 16 * ((sizeof(Eina_File) + slen + 15) / 16);
file->global_map = ((char *)file) + head_padded;
In eina_file_dup
file->global_map != (void*)(file->filename + strlen(file->filename) + 1)
Because of this discord condition makes eina_file_dup copies always.
(1) This is "the following commit":
commit 4766316935
Author: Cedric Bail <cedric@osg.samsung.com>
Date: Wed Mar 8 10:13:36 2017 -0800
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
Reviewers: zmike, Hermet
Reviewed By: zmike
Subscribers: cedric, #reviewers, #committers
Tags: #efl
Differential Revision: https://phab.enlightenment.org/D6857
This commit is contained in:
parent
ae894a0509
commit
cbe9b6f770
|
@ -474,18 +474,16 @@ 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->virtual && !file->copied)
|
||||||
{
|
{
|
||||||
// For ease of use and safety of the API, if you dup a virtualized file, we prefer to make a copy
|
Eina_File *r;
|
||||||
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);
|
r = eina_file_virtualize(file->filename, file->global_map, file->length, EINA_TRUE);
|
||||||
eina_lock_release(&file->lock);
|
eina_lock_release(&file->lock);
|
||||||
|
|
||||||
return r;
|
return r;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
file->refcount++;
|
file->refcount++;
|
||||||
eina_lock_release(&file->lock);
|
eina_lock_release(&file->lock);
|
||||||
|
|
Loading…
Reference in New Issue