summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLauro Moura <lauromoura@expertisesolutions.com.br>2019-04-23 12:12:31 -0300
committerVitor Sousa <vitorsousa@expertisesolutions.com.br>2019-04-23 13:02:29 -0300
commite23914fce785730ac3b0a736c6555fe6cadaddf0 (patch)
tree5ec5853b7f6bccd427d8da8370461c994d45954c
parent0ebf41c003ea89f10c45ae7a2e53c68302c05103 (diff)
downloadefl-e23914fce785730ac3b0a736c6555fe6cadaddf0.tar.gz
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
-rw-r--r--src/tests/efl_mono/dummy_test_object.eo1
-rw-r--r--src/tests/efl_mono/libefl_mono_native_test.c37
2 files changed, 30 insertions, 8 deletions
diff --git a/src/tests/efl_mono/dummy_test_object.eo b/src/tests/efl_mono/dummy_test_object.eo
index a50c70e2e6..b5436a636e 100644
--- a/src/tests/efl_mono/dummy_test_object.eo
+++ b/src/tests/efl_mono/dummy_test_object.eo
@@ -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; }
diff --git a/src/tests/efl_mono/libefl_mono_native_test.c b/src/tests/efl_mono/libefl_mono_native_test.c
index 17ef5065b2..52d9190994 100644
--- a/src/tests/efl_mono/libefl_mono_native_test.c
+++ b/src/tests/efl_mono/libefl_mono_native_test.c
@@ -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);
}