Revert "efl_add_ref - fis to use efl_add properly with a parent."

This reverts commit 2fb5cc3ad09f6aaf82b5d1131ac5ed22ed848bd4.

Most of this change where wrong as they didn't affect the destruction
of the object. efl_add_ref allow for manual handling of the lifecycle
of the object and make sure it is still alive during destructor. efl_add
will not allow you to access an object after invalidate also efl.parent.get
will always return NULL once the object is invalidated.

Differential Revision: https://phab.enlightenment.org/D6062
This commit is contained in:
Cedric BAIL 2018-04-11 10:38:21 -07:00
parent 7ce001084a
commit 73876dcbc9
19 changed files with 56 additions and 57 deletions

View File

@ -56,9 +56,9 @@ main(int argc, const char *argv[])
ecore_app_args_set(argc, argv);
out = efl_add(ECORE_AUDIO_OBJ_OUT_PULSE_CLASS, efl_main_loop_get());
out = efl_add_ref(ECORE_AUDIO_OBJ_OUT_PULSE_CLASS, NULL);
in = efl_add(ECORE_AUDIO_OBJ_IN_CLASS, efl_main_loop_get());
in = efl_add_ref(ECORE_AUDIO_OBJ_IN_CLASS, NULL);
if (!in)
{
printf("error when creating ecore audio source.\n");

View File

@ -201,7 +201,7 @@ static void _play_finished(void *data EINA_UNUSED, const Efl_Event *event)
inputs = eina_list_remove(inputs, event->object);
ret = ecore_audio_obj_out_input_detach(out, event->object);
efl_del(event->object);
efl_unref(event->object);
if (!ret)
printf("Could not detach input %s\n", name);
@ -252,7 +252,7 @@ main(int argc, const char *argv[])
{
if (!strncmp(argv[i], "tone:", 5))
{
in = efl_add(ECORE_AUDIO_OBJ_IN_TONE_CLASS, efl_main_loop_get());
in = efl_add_ref(ECORE_AUDIO_OBJ_IN_TONE_CLASS, NULL);
if (!in)
{
printf("error when creating ecore audio source.\n");
@ -276,7 +276,7 @@ main(int argc, const char *argv[])
}
else
{
in = efl_add(ECORE_AUDIO_OBJ_IN_SNDFILE_CLASS, efl_main_loop_get());
in = efl_add_ref(ECORE_AUDIO_OBJ_IN_SNDFILE_CLASS, NULL);
if (!in)
{
printf("error when creating ecore audio source.\n");
@ -307,7 +307,7 @@ main(int argc, const char *argv[])
printf("Start: %s (%0.2fs)\n", name, length);
out = efl_add(ECORE_AUDIO_OBJ_OUT_PULSE_CLASS, efl_main_loop_get());
out = efl_add_ref(ECORE_AUDIO_OBJ_OUT_PULSE_CLASS, NULL);
ret = ecore_audio_obj_out_input_attach(out, in);
if (!ret)
printf("Could not attach input %s\n", name);

View File

@ -24,8 +24,8 @@ static void _play_finished(void *data EINA_UNUSED, const Efl_Event *event)
printf("Done: %s\n", name);
ecore_audio_obj_in_output_get(event->object, &out);
efl_del(event->object);
efl_del(out);
efl_unref(event->object);
efl_unref(out);
ecore_main_loop_quit();
@ -49,31 +49,31 @@ main(int argc, char *argv[])
ecore_audio_init();
in = efl_add(ECORE_AUDIO_OBJ_IN_SNDFILE_CLASS, efl_main_loop_get());
in = efl_add_ref(ECORE_AUDIO_OBJ_IN_SNDFILE_CLASS, NULL);
efl_name_set(in, basename(argv[1]));
ret = ecore_audio_obj_source_set(in, argv[1]);
if (!ret) {
printf("Could not set %s as input\n", argv[1]);
efl_del(in);
efl_unref(in);
return 1;
}
efl_event_callback_add(in, ECORE_AUDIO_EV_IN_STOPPED, _play_finished, NULL);
out = efl_add(ECORE_AUDIO_OBJ_OUT_SNDFILE_CLASS, efl_main_loop_get());
out = efl_add_ref(ECORE_AUDIO_OBJ_OUT_SNDFILE_CLASS, NULL);
ret = ecore_audio_obj_source_set(out, argv[2]);
if (!ret) {
printf("Could not set %s as output\n", argv[2]);
efl_del(in);
efl_del(out);
efl_unref(in);
efl_unref(out);
return 1;
}
ret = ecore_audio_obj_out_input_attach(out, in);
if (!ret) {
printf("Could not attach input\n");
efl_del(out);
efl_del(in);
efl_unref(out);
efl_unref(in);
return 1;
}

View File

@ -110,7 +110,7 @@ main(void)
ctxt.enterer = ecore_idle_enterer_add(_enterer_cb, &ctxt);
ctxt.exiter = ecore_idle_exiter_add(_exiter_cb, &ctxt);
ctxt.idler = ecore_idler_add(_idler_cb, &ctxt);
// ctxt.idler = efl_add(ECORE_IDLER_CLASS, efl_main_loop_get(), ecore_idler_constructor(efl_added, _idler_cb, &ctxt));
// ctxt.idler = efl_add_ref(ECORE_IDLER_CLASS, NULL, ecore_idler_constructor(efl_added, _idler_cb, &ctxt));
ctxt.handler = ecore_event_handler_add(_event_type,
_event_handler_cb,
&ctxt);

View File

@ -48,9 +48,9 @@ main(void)
poller2 = ecore_poller_add(ECORE_POLLER_CORE, 8, _poller_print_cb, str2);
poller3 = ecore_poller_add(ECORE_POLLER_CORE, 30, _poller_quit_cb, str3);
// poller1 = efl_add(ECORE_POLLER_CLASS, efl_main_loop_get(), // ecore_poller_constructor(efl_added, ECORE_POLLER_CORE, 4, _poller_print_cb, str1));
// poller2 = efl_add(ECORE_POLLER_CLASS, efl_main_loop_get(), // ecore_poller_constructor(efl_added, ECORE_POLLER_CORE, 8, _poller_print_cb, str2));
// poller3 = efl_add(ECORE_POLLER_CLASS, efl_main_loop_get(), // ecore_poller_constructor(efl_added, ECORE_POLLER_CORE, 20, _poller_quit_cb, str3));
// poller1 = efl_add_ref(ECORE_POLLER_CLASS, NULL, // ecore_poller_constructor(efl_added, ECORE_POLLER_CORE, 4, _poller_print_cb, str1));
// poller2 = efl_add_ref(ECORE_POLLER_CLASS, NULL, // ecore_poller_constructor(efl_added, ECORE_POLLER_CORE, 8, _poller_print_cb, str2));
// poller3 = efl_add_ref(ECORE_POLLER_CLASS, NULL, // ecore_poller_constructor(efl_added, ECORE_POLLER_CORE, 20, _poller_quit_cb, str3));
ecore_main_loop_begin();
@ -61,9 +61,9 @@ main(void)
// ecore_poller_interval_set(poller2, 16, NULL);
ecore_main_loop_begin();
// efl_del(poller1);
// efl_del(poller2);
// efl_del(poller3);
// efl_unref(poller1);
// efl_unref(poller2);
// efl_unref(poller3);
ecore_poller_del(poller1);
ecore_poller_del(poller2);
ecore_poller_del(poller3);

View File

@ -452,7 +452,7 @@ efl_main(void *data EINA_UNUSED,
if (strcmp(input_fname, ":stdin:") == 0)
{
input = efl_add(EFL_IO_STDIN_CLASS, ev->object,
input = efl_add_ref(EFL_IO_STDIN_CLASS, NULL,
efl_event_callback_array_add(efl_added, input_cbs(), NULL));
if (!input)
{
@ -662,7 +662,7 @@ efl_main(void *data EINA_UNUSED,
else
{
/* regular file, open with flags: read-only and close-on-exec */
input = efl_add(EFL_IO_FILE_CLASS, ev->object,
input = efl_add_ref(EFL_IO_FILE_CLASS, NULL,
efl_file_set(efl_added, input_fname, NULL), /* mandatory */
efl_io_file_flags_set(efl_added, O_RDONLY), /* default */
efl_io_closer_close_on_exec_set(efl_added, EINA_TRUE), /* recommended, set *after* flags, or include O_CLOEXEC in flags -- be careful with _WIN32 that doesn't support it. */
@ -679,7 +679,7 @@ efl_main(void *data EINA_UNUSED,
if (strcmp(output_fname, ":stdout:") == 0)
{
output = efl_add(EFL_IO_STDOUT_CLASS, ev->object,
output = efl_add_ref(EFL_IO_STDOUT_CLASS, NULL,
efl_event_callback_array_add(efl_added, output_cbs(), NULL) /* optional */
);
if (!output)
@ -691,7 +691,7 @@ efl_main(void *data EINA_UNUSED,
}
else if (strcmp(output_fname, ":stderr:") == 0)
{
output = efl_add(EFL_IO_STDERR_CLASS, ev->object,
output = efl_add_ref(EFL_IO_STDERR_CLASS, NULL,
efl_event_callback_array_add(efl_added, output_cbs(), NULL) /* optional */
);
if (!output)
@ -718,7 +718,7 @@ efl_main(void *data EINA_UNUSED,
* When finished get the efl_io_buffer_slice_get(), see
* _copier_done().
*/
output = efl_add(EFL_IO_BUFFER_CLASS, ev->object,
output = efl_add_ref(EFL_IO_BUFFER_CLASS, NULL,
efl_event_callback_array_add(efl_added, output_cbs(), NULL), /* optional */
efl_event_callback_array_add(efl_added, output_buffer_cbs(), NULL) /* optional */
);
@ -938,7 +938,7 @@ efl_main(void *data EINA_UNUSED,
/* regular file, open with flags: write-only, close-on-exec,
* create if did not exist and truncate if exist.
*/
output = efl_add(EFL_IO_FILE_CLASS, ev->object,
output = efl_add_ref(EFL_IO_FILE_CLASS, NULL,
efl_file_set(efl_added, output_fname, NULL), /* mandatory */
efl_io_file_flags_set(efl_added, O_WRONLY | O_CREAT | O_TRUNC), /* mandatory for write */
efl_io_closer_close_on_exec_set(efl_added, EINA_TRUE), /* recommended, set *after* flags, or include O_CLOEXEC in flags -- be careful with _WIN32 that doesn't support it. */

View File

@ -258,7 +258,7 @@ efl_main(void *data EINA_UNUSED,
* the line_delimiter, then wait for a reply from the server, then
* write another.
*/
send_queue = efl_add(EFL_IO_QUEUE_CLASS, ev->object,
send_queue = efl_add_ref(EFL_IO_QUEUE_CLASS, NULL,
efl_name_set(efl_added, "send_queue"),
efl_io_queue_limit_set(efl_added, buffer_limit));
if (!send_queue)
@ -279,7 +279,7 @@ efl_main(void *data EINA_UNUSED,
* Our example's usage is to peek its data with slice_get() then
* clear().
*/
receive_queue = efl_add(EFL_IO_QUEUE_CLASS, ev->object,
receive_queue = efl_add_ref(EFL_IO_QUEUE_CLASS, NULL,
efl_name_set(efl_added, "receive_queue"),
efl_io_queue_limit_set(efl_added, buffer_limit),
efl_event_callback_add(efl_added, EFL_IO_QUEUE_EVENT_SLICE_CHANGED, _receiver_data, NULL));
@ -359,9 +359,9 @@ efl_main(void *data EINA_UNUSED,
error_sender:
efl_del(dialer);
error_dialer:
efl_del(receive_queue);
efl_unref(receive_queue);
error_receive_queue:
efl_del(send_queue);
efl_unref(send_queue);
end:
EINA_LIST_FREE(commands, cmd)
{

View File

@ -350,11 +350,11 @@ _server_client_add(void *data EINA_UNUSED, const Efl_Event *event)
return;
}
send_buffer = efl_add(EFL_IO_BUFFER_CLASS, efl_main_loop_get(),
send_buffer = efl_add_ref(EFL_IO_BUFFER_CLASS, NULL,
efl_io_buffer_adopt_readonly(efl_added, hello_world_slice));
/* Unlimited buffer to store the received data. */
recv_buffer = efl_add(EFL_IO_BUFFER_CLASS, efl_main_loop_get());
recv_buffer = efl_add_ref(EFL_IO_BUFFER_CLASS, NULL);
/* an input copier that takes data from send_buffer and pushes to client */
d->send_copier = efl_add(EFL_IO_COPIER_CLASS, efl_parent_get(client),
@ -712,7 +712,7 @@ efl_main(void *data EINA_UNUSED,
cipher = EFL_NET_SSL_CIPHER_TLSV1_2;
}
ssl_ctx = efl_add(EFL_NET_SSL_CONTEXT_CLASS, efl_main_loop_get(),
ssl_ctx = efl_add_ref(EFL_NET_SSL_CONTEXT_CLASS, NULL,
efl_net_ssl_context_certificates_set(efl_added, eina_list_iterator_new(certificates)),
efl_net_ssl_context_private_keys_set(efl_added, eina_list_iterator_new(private_keys)),
efl_net_ssl_context_certificate_revocation_lists_set(efl_added, eina_list_iterator_new(crls)),

View File

@ -520,7 +520,7 @@ efl_main(void *data EINA_UNUSED,
cipher = EFL_NET_SSL_CIPHER_TLSV1_2;
}
ssl_ctx = efl_add(EFL_NET_SSL_CONTEXT_CLASS, ev->object,
ssl_ctx = efl_add_ref(EFL_NET_SSL_CONTEXT_CLASS, NULL,
efl_net_ssl_context_certificates_set(efl_added, eina_list_iterator_new(certificates)),
efl_net_ssl_context_private_keys_set(efl_added, eina_list_iterator_new(private_keys)),
efl_net_ssl_context_certificate_revocation_lists_set(efl_added, eina_list_iterator_new(crls)),

View File

@ -311,7 +311,7 @@ efl_terminate(void *data EINA_UNUSED,
efl_del(dialer);
dialer = NULL;
efl_del(ssl_ctx);
efl_unref(ssl_ctx);
ssl_ctx = NULL;
EINA_LIST_FREE(pending_send, str) free(str);
@ -456,7 +456,7 @@ efl_main(void *data EINA_UNUSED,
/* create a new SSL context with command line configurations.
* another option would be to use the default dialer context */
#ifndef USE_DEFAULT_CONTEXT
ssl_ctx = efl_add(EFL_NET_SSL_CONTEXT_CLASS, ev->object,
ssl_ctx = efl_add_ref(EFL_NET_SSL_CONTEXT_CLASS, NULL,
efl_net_ssl_context_certificates_set(efl_added, eina_list_iterator_new(certificates)),
efl_net_ssl_context_private_keys_set(efl_added, eina_list_iterator_new(private_keys)),
efl_net_ssl_context_certificate_revocation_lists_set(efl_added, eina_list_iterator_new(crls)),
@ -528,7 +528,7 @@ efl_main(void *data EINA_UNUSED,
efl_io_closer_close(dialer); /* just del won't do as ssl has an extra ref */
efl_del(dialer);
no_ssl_ctx:
efl_del(ssl_ctx);
efl_unref(ssl_ctx);
end:
EINA_LIST_FREE(pending_send, str) free(str);

View File

@ -227,7 +227,7 @@ efl_terminate(void *data EINA_UNUSED,
efl_del(server);
server = NULL;
efl_del(ssl_ctx);
efl_unref(ssl_ctx);
ssl_ctx = NULL;
EINA_LIST_FREE(certificates, str) free(str);
@ -301,7 +301,7 @@ efl_main(void *data EINA_UNUSED,
cipher = EFL_NET_SSL_CIPHER_TLSV1_2;
}
ssl_ctx = efl_add(EFL_NET_SSL_CONTEXT_CLASS, ev->object,
ssl_ctx = efl_add_ref(EFL_NET_SSL_CONTEXT_CLASS, NULL,
efl_net_ssl_context_certificates_set(efl_added, eina_list_iterator_new(certificates)),
efl_net_ssl_context_private_keys_set(efl_added, eina_list_iterator_new(private_keys)),
efl_net_ssl_context_certificate_revocation_lists_set(efl_added, eina_list_iterator_new(crls)),
@ -363,7 +363,7 @@ efl_main(void *data EINA_UNUSED,
efl_del(server);
server = NULL;
end_ctx:
efl_del(ssl_ctx);
efl_unref(ssl_ctx);
end:
EINA_LIST_FREE(certificates, str) free(str);

View File

@ -27,7 +27,7 @@ void
monitor_stuff(void *data)
{
const char *path = data;
Eio_Sentry *sentry = efl_add(EIO_SENTRY_CLASS, efl_main_loop_get());
Eio_Sentry *sentry = efl_add_ref(EIO_SENTRY_CLASS, NULL);
efl_event_callback_add(sentry, EIO_SENTRY_EVENT_FILE_CREATED, (Efl_Event_Cb)&sentry_cb, NULL);
printf("Starting monitoring path %s\n", path);

View File

@ -15,8 +15,8 @@ efl_main(void *data EINA_UNUSED, const Efl_Event *ev)
elm_policy_set(ELM_POLICY_QUIT, ELM_POLICY_QUIT_LAST_WINDOW_CLOSED);
elm_app_info_set(efl_main, "elementary", "images/plant_01.jpg");
win = efl_add(EFL_UI_WIN_CLASS, efl_main_loop_get(), "TEST", ELM_WIN_BASIC,
efl_ui_win_autodel_set(efl_added, EINA_TRUE));
win = efl_add_ref(EFL_UI_WIN_CLASS, NULL, "TEST", ELM_WIN_BASIC,
efl_ui_win_autodel_set(efl_added, EINA_TRUE));
efl_gfx_entity_size_set(win, EINA_SIZE2D(300, 400));
scroller = efl_add(EFL_UI_SCROLLER_CLASS, win);

View File

@ -49,7 +49,7 @@ _make_model()
unsigned int i, s;
char buf[256];
model = efl_add(EFL_MODEL_ITEM_CLASS, efl_main_loop_get());
model = efl_add_ref(EFL_MODEL_ITEM_CLASS, NULL);
eina_value_setup(&vtext, EINA_VALUE_TYPE_STRING);
for (i = 0; i < (NUM_ITEMS); i++)

View File

@ -43,7 +43,7 @@ elm_main(int argc, char **argv)
if (argv[1] != NULL) dirname = argv[1];
else dirname = EFL_MODEL_TEST_FILENAME_PATH;
model = efl_add(EIO_MODEL_CLASS, efl_main_loop_get(), eio_model_path_set(efl_added, dirname));
model = efl_add_ref(EIO_MODEL_CLASS, NULL, eio_model_path_set(efl_added, dirname));
factory = efl_add(EFL_UI_LAYOUT_FACTORY_CLASS, win);
efl_ui_model_connect(factory, "efl.text", "filename");
efl_ui_layout_factory_theme_config(factory, "list_item", NULL, "default");

View File

@ -173,7 +173,7 @@ _make_model()
Efl_Model_Item *model, *child;
unsigned int i, len;
model = efl_add(EFL_MODEL_ITEM_CLASS, efl_main_loop_get());
model = efl_add_ref(EFL_MODEL_ITEM_CLASS, NULL);
eina_value_setup(&vtext, EINA_VALUE_TYPE_STRING);
eina_value_setup(&value, EINA_VALUE_TYPE_UCHAR);

View File

@ -35,7 +35,6 @@ _cleanup_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void
efl_unref(priv->fileview);
efl_unref(priv->treeview);
efl_unref(priv->formview);
efl_unref(priv->treemodel);
}
static int
@ -125,12 +124,12 @@ elm_main(int argc EINA_UNUSED, char **argv EINA_UNUSED)
else dirname = EFL_MODEL_TEST_FILENAME_PATH;
//treemodel
priv.treemodel = efl_add(EIO_MODEL_CLASS, efl_main_loop_get(), eio_model_path_set(efl_added, dirname));
priv.treemodel = efl_add(EIO_MODEL_CLASS, win, eio_model_path_set(efl_added, dirname));
eio_model_children_filter_set(priv.treemodel, NULL, _filter_cb, NULL);
//treeview
genlist = elm_genlist_add(win);
priv.treeview = efl_add(ELM_VIEW_LIST_CLASS, efl_main_loop_get(), elm_view_list_genlist_set(efl_added, genlist, ELM_GENLIST_ITEM_TREE, NULL));
priv.treeview = efl_add_ref(ELM_VIEW_LIST_CLASS, NULL, elm_view_list_genlist_set(efl_added, genlist, ELM_GENLIST_ITEM_TREE, NULL));
elm_view_list_property_connect(priv.treeview, "filename", "elm.text");
elm_view_list_property_connect(priv.treeview, "icon", "elm.swallow.icon");
elm_view_list_model_set(priv.treeview, priv.treemodel);
@ -145,7 +144,7 @@ elm_main(int argc EINA_UNUSED, char **argv EINA_UNUSED)
//listview
genlist = elm_genlist_add(win);
priv.fileview = efl_add(ELM_VIEW_LIST_CLASS, efl_main_loop_get(), elm_view_list_genlist_set(efl_added, genlist, ELM_GENLIST_ITEM_NONE, "double_label"));
priv.fileview = efl_add_ref(ELM_VIEW_LIST_CLASS, NULL, elm_view_list_genlist_set(efl_added, genlist, ELM_GENLIST_ITEM_NONE, "double_label"));
elm_view_list_property_connect(priv.fileview, "filename", "elm.text");
elm_view_list_property_connect(priv.fileview, "mime_type", "elm.text.sub");
@ -159,7 +158,7 @@ elm_main(int argc EINA_UNUSED, char **argv EINA_UNUSED)
bxr = elm_box_add(win);
_widget_init(bxr);
elm_object_part_content_set(vpanes, "right", bxr);
priv.formview = efl_add(ELM_VIEW_FORM_CLASS, efl_main_loop_get());
priv.formview = efl_add_ref(ELM_VIEW_FORM_CLASS, NULL);
/*Label widget */
elm_view_form_widget_add(priv.formview, "filename", _label_init(win, bxr, "File Name"));

View File

@ -54,8 +54,8 @@ elm_main(int argc EINA_UNUSED, char **argv EINA_UNUSED)
evas_object_size_hint_weight_set(genlist, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
evas_object_show(genlist);
priv.filemodel = efl_add(EIO_MODEL_CLASS, efl_main_loop_get(), eio_model_path_set(efl_added, dirname));
priv.fileview = efl_add(ELM_VIEW_LIST_CLASS, efl_main_loop_get(), elm_view_list_genlist_set(efl_added, genlist, ELM_GENLIST_ITEM_TREE, "double_label"));
priv.filemodel = efl_add_ref(EIO_MODEL_CLASS, NULL, eio_model_path_set(efl_added, dirname));
priv.fileview = efl_add_ref(ELM_VIEW_LIST_CLASS, NULL, elm_view_list_genlist_set(efl_added, genlist, ELM_GENLIST_ITEM_TREE, "double_label"));
elm_view_list_model_set(priv.fileview, priv.filemodel);
evas_object_event_callback_add(win, EVAS_CALLBACK_DEL, _cleanup_cb, &priv);

View File

@ -111,10 +111,10 @@ elm_main(int argc EINA_UNUSED, char **argv EINA_UNUSED)
if (argv[1] != NULL) dirname = argv[1];
else dirname = EFL_MODEL_TEST_FILENAME_PATH;
priv->model = efl_add(EIO_MODEL_CLASS, efl_main_loop_get(), eio_model_path_set(efl_added, dirname));
priv->model = efl_add_ref(EIO_MODEL_CLASS, NULL, eio_model_path_set(efl_added, dirname));
genlist = elm_genlist_add(win);
priv->fileview = efl_add(ELM_VIEW_LIST_CLASS, efl_main_loop_get(), elm_view_list_genlist_set(efl_added, genlist, ELM_GENLIST_ITEM_NONE, NULL));
priv->fileview = efl_add_ref(ELM_VIEW_LIST_CLASS, NULL, elm_view_list_genlist_set(efl_added, genlist, ELM_GENLIST_ITEM_NONE, NULL));
elm_view_list_property_connect(priv->fileview, "filename", "elm.text");
elm_view_list_model_set(priv->fileview, priv->model);
_widget_init(genlist);