csharp: Fix test code memory handling

Summary:
It was causing the test to crash when running in debug build.

Also some minor fixes cleaning up stuff when exiting.

Fixes T7792.

Reviewers: segfaultxavi, vitor.sousa

Reviewed By: segfaultxavi, vitor.sousa

Subscribers: cedric, #reviewers, #committers

Tags: #efl

Maniphest Tasks: T7792

Differential Revision: https://phab.enlightenment.org/D8679
This commit is contained in:
Lauro Moura 2019-04-23 12:12:31 -03:00 committed by Vitor Sousa
parent 0ebf41c003
commit e23914fce7
2 changed files with 30 additions and 8 deletions

View File

@ -1412,6 +1412,7 @@ class Dummy.Test_Object extends Efl.Object implements Dummy.Test_Iface {
}
implements {
Efl.Object.constructor;
Efl.Object.destructor;
Efl.Object.provider_find;
Dummy.Test_Iface.emit_nonconflicted;
Dummy.Test_Iface.iface_prop { get; set; }

View File

@ -162,6 +162,30 @@ _dummy_test_object_efl_object_constructor(Eo *obj, Dummy_Test_Object_Data *pd)
return obj;
}
static void
_dummy_test_object_efl_object_destructor(Eo *obj, Dummy_Test_Object_Data *pd)
{
if (pd->stored_value)
{
eina_value_free(pd->stored_value);
pd->stored_value = NULL;
}
if (pd->promise)
{
eina_promise_reject(pd->promise, ECANCELED);
pd->promise = NULL;
}
if (pd->list_for_accessor)
{
eina_list_free(pd->list_for_accessor);
pd->list_for_accessor = NULL;
}
efl_destructor(efl_super(obj, DUMMY_TEST_OBJECT_CLASS));
}
Efl_Object *_dummy_test_object_return_object(Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd)
{
return obj;
@ -3700,11 +3724,11 @@ void _dummy_test_object_set_value_ptr_own(EINA_UNUSED Eo *obj, Dummy_Test_Object
void _dummy_test_object_set_value(EINA_UNUSED Eo *obj, Dummy_Test_Object_Data *pd, Eina_Value value)
{
if (pd->stored_value) {
eina_value_free(pd->stored_value);
} else {
pd->stored_value = eina_value_new(EINA_VALUE_TYPE_INT);
}
if (pd->stored_value)
eina_value_free(pd->stored_value);
pd->stored_value = eina_value_new(EINA_VALUE_TYPE_INT);
eina_value_copy(&value, pd->stored_value);
}
@ -3922,7 +3946,6 @@ int _dummy_test_object_dummy_test_iface_iface_prop_get(EINA_UNUSED const Eo *obj
Eo * _dummy_test_object_efl_object_provider_find(EINA_UNUSED const Eo *obj, Dummy_Test_Object_Data *pd, const Efl_Class *klass)
{
EINA_LOG_ERR("klass: %p, NUMBERWRAPPER: %p", klass, DUMMY_NUMBERWRAPPER_CLASS);
if (klass == DUMMY_NUMBERWRAPPER_CLASS)
return pd->provider;
else if (klass == DUMMY_TEST_IFACE_INTERFACE)
@ -3932,13 +3955,11 @@ Eo * _dummy_test_object_efl_object_provider_find(EINA_UNUSED const Eo *obj, Dumm
Efl_Object *_dummy_test_object_call_find_provider(Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd, const Efl_Class *type)
{
printf("CALLING FIND PROVIDER FROM C");
return efl_provider_find(obj, type);
}
Efl_Object *_dummy_test_object_call_find_provider_for_iface(Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd)
{
printf("CALLING FIND PROVIDER FROM C");
return efl_provider_find(obj, DUMMY_TEST_IFACE_INTERFACE);
}