From: Cedric BAIL Date: Tue, 1 May 2018 23:18:53 +0000 (-0700) Subject: ecore: correct lifecycle of object used by Ecore_Con legacy. X-Git-Tag: upstream/1.21.0~616 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=3605add7b138c2856ef89d91c29609f23733557a;p=platform%2Fupstream%2Fefl.git ecore: correct lifecycle of object used by Ecore_Con legacy. Differential Revision: https://phab.enlightenment.org/D6080 --- diff --git a/src/lib/ecore_con/ecore_con_legacy.c b/src/lib/ecore_con/ecore_con_legacy.c index fdb4994..f5643bb 100644 --- a/src/lib/ecore_con/ecore_con_legacy.c +++ b/src/lib/ecore_con/ecore_con_legacy.c @@ -977,6 +977,14 @@ _ecore_con_server_free(Ecore_Con_Server *svr) _ecore_con_server_dialer_close(svr); + if (svr->ssl.clients_ctx) + { + // This is always created with efl_add_ref + efl_parent_set(svr->ssl.clients_ctx, NULL); + efl_unref(svr->ssl.clients_ctx); + svr->ssl.clients_ctx = NULL; + } + if (svr->dialer) { efl_del(svr->dialer); @@ -989,12 +997,6 @@ _ecore_con_server_free(Ecore_Con_Server *svr) svr->server = NULL; } - if (svr->ssl.clients_ctx) - { - efl_unref(svr->ssl.clients_ctx); - svr->ssl.clients_ctx = NULL; - } - if (svr->ssl.job) eina_future_cancel(svr->ssl.job); if (svr->ssl.pending_send) @@ -1591,13 +1593,13 @@ _ecore_con_server_ssl_ctx_create(const Ecore_Con_Server *svr) /* legacy compatibility: server never verified peer, only dialer did */ - return efl_add(EFL_NET_SSL_CONTEXT_CLASS, efl_main_loop_get(), - efl_net_ssl_context_certificates_set(efl_added, eina_list_iterator_new(svr->ssl.certs)), - efl_net_ssl_context_private_keys_set(efl_added, eina_list_iterator_new(svr->ssl.privkeys)), - efl_net_ssl_context_certificate_revocation_lists_set(efl_added, eina_list_iterator_new(svr->ssl.crls)), - efl_net_ssl_context_certificate_authorities_set(efl_added, eina_list_iterator_new(svr->ssl.cafiles)), - efl_net_ssl_context_default_paths_load_set(efl_added, EINA_FALSE), /* old API didn't load default paths */ - efl_net_ssl_context_setup(efl_added, cipher, EINA_FALSE)); + return efl_add_ref(EFL_NET_SSL_CONTEXT_CLASS, efl_main_loop_get(), + efl_net_ssl_context_certificates_set(efl_added, eina_list_iterator_new(svr->ssl.certs)), + efl_net_ssl_context_private_keys_set(efl_added, eina_list_iterator_new(svr->ssl.privkeys)), + efl_net_ssl_context_certificate_revocation_lists_set(efl_added, eina_list_iterator_new(svr->ssl.crls)), + efl_net_ssl_context_certificate_authorities_set(efl_added, eina_list_iterator_new(svr->ssl.cafiles)), + efl_net_ssl_context_default_paths_load_set(efl_added, EINA_FALSE), /* old API didn't load default paths */ + efl_net_ssl_context_setup(efl_added, cipher, EINA_FALSE)); } static Eina_Value @@ -1990,8 +1992,7 @@ _ecore_con_server_dialer_ssl_job(void *data, const Eina_Value v, EINA_SAFETY_ON_NULL_GOTO(dialer, error_dialer); efl_parent_set(inner_dialer, dialer); - - efl_unref(ssl_ctx); /* inner_dialer keeps it */ + efl_parent_set(ssl_ctx, inner_dialer); if (!_ecore_con_server_dialer_set(svr, dialer)) goto error_dial; @@ -2062,16 +2063,16 @@ _ecore_con_server_dialer_ssl_upgrade_job(void *data, const Eina_Value v, if (svr->ssl.verify) verify_mode = EFL_NET_SSL_VERIFY_MODE_REQUIRED; - ssl_ctx = efl_add(EFL_NET_SSL_CONTEXT_CLASS, efl_main_loop_get(), - efl_net_ssl_context_certificates_set(efl_added, eina_list_iterator_new(svr->ssl.certs)), - efl_net_ssl_context_private_keys_set(efl_added, eina_list_iterator_new(svr->ssl.privkeys)), - efl_net_ssl_context_certificate_revocation_lists_set(efl_added, eina_list_iterator_new(svr->ssl.crls)), - efl_net_ssl_context_certificate_authorities_set(efl_added, eina_list_iterator_new(svr->ssl.cafiles)), - efl_net_ssl_context_verify_mode_set(efl_added, verify_mode), - efl_net_ssl_context_hostname_set(efl_added, svr->ssl.verify_name ? svr->ssl.verify_name : svr->name), - efl_net_ssl_context_hostname_verify_set(efl_added, svr->ssl.verify_basic), - efl_net_ssl_context_default_paths_load_set(efl_added, EINA_FALSE), /* old API didn't load default paths */ - efl_net_ssl_context_setup(efl_added, cipher, EINA_TRUE)); + ssl_ctx = efl_add_ref(EFL_NET_SSL_CONTEXT_CLASS, efl_main_loop_get(), + efl_net_ssl_context_certificates_set(efl_added, eina_list_iterator_new(svr->ssl.certs)), + efl_net_ssl_context_private_keys_set(efl_added, eina_list_iterator_new(svr->ssl.privkeys)), + efl_net_ssl_context_certificate_revocation_lists_set(efl_added, eina_list_iterator_new(svr->ssl.crls)), + efl_net_ssl_context_certificate_authorities_set(efl_added, eina_list_iterator_new(svr->ssl.cafiles)), + efl_net_ssl_context_verify_mode_set(efl_added, verify_mode), + efl_net_ssl_context_hostname_set(efl_added, svr->ssl.verify_name ? svr->ssl.verify_name : svr->name), + efl_net_ssl_context_hostname_verify_set(efl_added, svr->ssl.verify_basic), + efl_net_ssl_context_default_paths_load_set(efl_added, EINA_FALSE), /* old API didn't load default paths */ + efl_net_ssl_context_setup(efl_added, cipher, EINA_TRUE)); EINA_SAFETY_ON_NULL_GOTO(ssl_ctx, error_ssl_ctx); tcp_dialer = svr->dialer;