Subject: Re: [E-devel] [Patch] ecore_ipc - remove potential risk in
ecore_ipc_shutdown
I found a problem this infinite loop case.
If server is deleted, then ECORE_IPC_EVENT_SERVER_DEL callback
function will be called in client side.
It will happen infinite loop in ecore_ipc_shutdown if
ecore_ipc_shutdown called in this ECORE_IPC_EVENT_SERVER_DEL callback
function.
For example,
server_del_handler =
ecore_event_handler_add(ECORE_IPC_EVENT_SERVER_DEL, _server_del_cb, NULL);
static Eina_Bool
_server_del_cb(void *data, int type, void *event)
{
ecore_ipc_shutdown();
return EINA_TRUE;
}
If server is deleted,
1. _ecore_ipc_event_server_del : svr->event_count++
2. _server_del_cb : ecore_ipc_shutdown called
3. ecore_ipc_shutdown : while (servers) ecore_ipc_server_del(eina_list_data_get(servers))
4. ecore_ipc_server_del : can't eina_list_remove(servers, svr) because event_count != 0
5. infinite loop
I think this while code is very dangerous whether user miss or not.
I modified EINA_LIST_FOREACH_SAFE instead of EINA_LIST_FOREACH refer
to ecore_con.
Please review this patch.
SVN revision: 67874
I did a bad decision to steal memory for Array, List, Hash and Struct
types, it was nice to not have to copy it internally, but breaks when
one needs to set a new value that was set elsewhere. What did not
happen with string, integers and other basic types.
This was exposed by Raphael Kubo using eina_model_property_set() with
complex types (Array, List and Hash) and it was not possible to
correctly set such properties.
Now it's all set, but the behavior changed and the memory is not
stolen and released anymore. Test eina_test_value.c was changed to
reflect it.
SVN revision: 67843
if user get and then set the same value, we should not crash and this
may happen with previous code as the old
string/array/value/list... were released, then you ended with the
released memory still being pointed.
SVN revision: 67841
We should not flush and then setup the memory, instead we leave
vset/pset functions do their own stuff to clean previous data, if any.
SVN revision: 67840
This patch try to prevent the broadcasting of targeted message. This should minimize
the problem generated on edje sub GROUP that didn't expect to see that much message
coming to them. It just a minimization of the problem, as message that don't target
explicitly a part are still propagated and can still break your edje usage from 1.0
to 1.1 version.
SVN revision: 67830
Let's try to help debug by allowing extended reference management that
takes in account an identifier. This identifier is accounted on xref
and xunref and must match.
xrefs_get will return the list of such references, for debugging purposes.
eina_models_list_get() was added to return all live models, just
tracked when EINA_MODEL_DEBUG is enabled.
eina_models_usage_dump() was added and use the same infrastructure as
eina_models_list_get() and eina_model_xrefs_get() to aid debugging :-)
SVN revision: 67821
He worked previously with documentation, now is helping me with
Eina_Model and will keep adding some examples and fixes here and
there.
SVN revision: 67798
Same as the previous commit about "Type" this time about Interface.
This will also hopefully remove the likelihood for hacks.
Previous functions are still available as method_offset_resolve.
SVN revision: 67786
missing Logfn's. Add handler to free the mouse_move event when we're
done with it. Add a function to retrieve the 'last mouse button down
time' (needed for fixing surface move).
SVN revision: 67781