ecore_con: if we rely on parent lifecycle for automatic destruction, do not call efl_del in the destructor.

This commit is contained in:
Cedric BAIL 2018-04-09 17:01:21 -07:00
parent a327a0e7c7
commit 57320c190f
10 changed files with 45 additions and 28 deletions

View File

@ -93,6 +93,14 @@ _efl_net_dialer_ssl_efl_object_finalize(Eo *o, Efl_Net_Dialer_Ssl_Data *pd)
return efl_finalize(efl_super(o, MY_CLASS));
}
EOLIAN static void
_efl_net_dialer_ssl_efl_object_invalidate(Eo *o, Efl_Net_Dialer_Ssl_Data *pd)
{
pd->sock = NULL;
efl_invalidate(efl_super(o, MY_CLASS));
}
EOLIAN static void
_efl_net_dialer_ssl_efl_object_destructor(Eo *o, Efl_Net_Dialer_Ssl_Data *pd)
{
@ -104,12 +112,6 @@ _efl_net_dialer_ssl_efl_object_destructor(Eo *o, Efl_Net_Dialer_Ssl_Data *pd)
efl_event_thaw(o);
}
if (pd->sock)
{
efl_del(pd->sock);
pd->sock = NULL;
}
if (pd->ssl_ctx)
{
efl_unref(pd->ssl_ctx);

View File

@ -66,8 +66,9 @@ class Efl.Net.Dialer_Ssl (Efl.Net.Socket_Ssl, Efl.Net.Dialer) {
implements {
Efl.Object.constructor;
Efl.Object.destructor;
Efl.Object.finalize;
Efl.Object.invalidate;
Efl.Object.destructor;
Efl.Net.Dialer.dial;
Efl.Net.Dialer.address_dial { get; }
Efl.Net.Dialer.connected { get; set; }

View File

@ -955,6 +955,14 @@ _efl_net_dialer_websocket_efl_object_constructor(Eo *o, Efl_Net_Dialer_Websocket
return o;
}
EOLIAN static void
_efl_net_dialer_websocket_efl_object_invalidate(Eo *o, Efl_Net_Dialer_Websocket_Data *pd)
{
pd->http = NULL;
efl_invalidate(efl_super(o, MY_CLASS));
}
EOLIAN static void
_efl_net_dialer_websocket_efl_object_destructor(Eo *o, Efl_Net_Dialer_Websocket_Data *pd)
{
@ -962,9 +970,6 @@ _efl_net_dialer_websocket_efl_object_destructor(Eo *o, Efl_Net_Dialer_Websocket_
efl_event_callback_array_del(pd->http, _efl_net_dialer_websocket_http_cbs(), o);
efl_del(pd->http);
pd->http = NULL;
efl_destructor(efl_super(o, MY_CLASS));
eina_stringshare_replace(&pd->address_dial, NULL);

View File

@ -314,6 +314,7 @@ class Efl.Net.Dialer_Websocket (Efl.Loop_Consumer, Efl.Net.Dialer) {
implements {
Efl.Object.constructor;
Efl.Object.invalidate;
Efl.Object.destructor;
Efl.Net.Dialer.dial;
Efl.Net.Dialer.address_dial { get; set; }

View File

@ -149,7 +149,6 @@ _efl_net_server_simple_efl_object_finalize(Eo *o, Efl_Net_Server_Simple_Data *pd
DBG("created new inner server %p (%s)", server, efl_class_name_get(efl_class_get(server)));
efl_net_server_simple_inner_server_set(o, server);
efl_unref(server);
}
end:
@ -157,18 +156,21 @@ _efl_net_server_simple_efl_object_finalize(Eo *o, Efl_Net_Server_Simple_Data *pd
}
EOLIAN static void
_efl_net_server_simple_efl_object_destructor(Eo *o, Efl_Net_Server_Simple_Data *pd)
_efl_net_server_simple_efl_object_invalidate(Eo *o, Efl_Net_Server_Simple_Data *pd)
{
if (pd->inner_class) pd->inner_class = NULL;
if (pd->inner_server)
{
efl_event_callback_array_del(pd->inner_server, _efl_net_server_simple_inner_server_cbs(), o);
if (efl_parent_get(pd->inner_server) == o)
efl_parent_set(pd->inner_server, NULL);
efl_unref(pd->inner_server);
pd->inner_server = NULL;
}
efl_destructor(efl_super(o, MY_CLASS));
pd->inner_class = NULL;
efl_invalidate(efl_super(o, MY_CLASS));
}
EOLIAN static Eina_Error

View File

@ -44,7 +44,7 @@ class Efl.Net.Server_Simple (Efl.Loop_Consumer, Efl.Net.Server) {
implements {
Efl.Object.finalize;
Efl.Object.destructor;
Efl.Object.invalidate;
Efl.Net.Server.serve;
Efl.Net.Server.client_announce;
Efl.Net.Server.address { get; }

View File

@ -148,15 +148,17 @@ _efl_net_server_ssl_ctx_del(void *data, const Efl_Event *event EINA_UNUSED)
pd->ssl_ctx = NULL;
}
EOLIAN void
_efl_net_server_ssl_efl_object_invalidate(Eo *o, Efl_Net_Server_Ssl_Data *pd)
{
pd->server = NULL;
efl_destructor(efl_super(o, MY_CLASS));
}
EOLIAN void
_efl_net_server_ssl_efl_object_destructor(Eo *o, Efl_Net_Server_Ssl_Data *pd)
{
if (pd->server)
{
efl_del(pd->server);
pd->server = NULL;
}
if (pd->ssl_ctx)
{
efl_event_callback_del(pd->ssl_ctx, EFL_EVENT_DEL, _efl_net_server_ssl_ctx_del, o);

View File

@ -21,6 +21,7 @@ class Efl.Net.Server_Ssl (Efl.Net.Server_Tcp) {
implements {
Efl.Object.constructor;
Efl.Object.invalidate;
Efl.Object.destructor;
Efl.Net.Server.client_announce;
Efl.Net.Server_Fd.client_add;

View File

@ -276,15 +276,17 @@ _efl_net_server_windows_efl_object_constructor(Eo *o, Efl_Net_Server_Windows_Dat
return efl_constructor(efl_super(o, MY_CLASS));
}
EOLIAN static void
_efl_net_server_windows_efl_object_invalidate(Eo *o, Efl_Net_Server_Windows_Data *pd)
{
pd->next_client = NULL;
efl_invalidate(efl_super(o, MY_CLASS));
}
EOLIAN static void
_efl_net_server_windows_efl_object_destructor(Eo *o, Efl_Net_Server_Windows_Data *pd)
{
if (pd->next_client)
{
efl_del(pd->next_client);
pd->next_client = NULL;
}
while (pd->pending_clients)
{
Eo *client = pd->pending_clients->data;

View File

@ -25,6 +25,7 @@ class Efl.Net.Server_Windows (Efl.Loop_Consumer, Efl.Net.Server) {
implements {
Efl.Object.constructor;
Efl.Object.invalidate;
Efl.Object.destructor;
Efl.Net.Server.address { get; set; }
Efl.Net.Server.clients_count { get; set; }