efl/eina: fix some memleak and improve speed of eina_cow_memcpy.

SVN revision: 83375
This commit is contained in:
Cedric BAIL 2013-01-28 00:22:21 +00:00
parent 6174b1c5cf
commit 6414b0864f
1 changed files with 11 additions and 5 deletions

View File

@ -392,6 +392,7 @@ eina_cow_write(Eina_Cow *cow,
#endif #endif
goto end; goto end;
} }
ref->refcount--;
allocate: allocate:
ref = eina_mempool_malloc(cow->pool, cow->total_size); ref = eina_mempool_malloc(cow->pool, cow->total_size);
@ -466,17 +467,22 @@ eina_cow_memcpy(Eina_Cow *cow,
EINA_COW_MAGIC_CHECK(cow); EINA_COW_MAGIC_CHECK(cow);
if (*dst == src) return ;
eina_cow_free(cow, *dst); eina_cow_free(cow, *dst);
ref = EINA_COW_PTR_GET(src); if (src != cow->default_value)
EINA_COW_PTR_MAGIC_CHECK(ref); {
ref = EINA_COW_PTR_GET(src);
EINA_COW_PTR_MAGIC_CHECK(ref);
#ifndef NVALGRIND #ifndef NVALGRIND
VALGRIND_MAKE_MEM_DEFINED(ref, sizeof (ref)); VALGRIND_MAKE_MEM_DEFINED(ref, sizeof (ref));
#endif #endif
ref->refcount++; ref->refcount++;
#ifndef NVALGRIND #ifndef NVALGRIND
VALGRIND_MAKE_MEM_NOACCESS(ref, sizeof (ref)); VALGRIND_MAKE_MEM_NOACCESS(ref, sizeof (ref));
#endif #endif
}
*((const void**)dst) = src; *((const void**)dst) = src;
} }