Commit Graph

25 Commits

Author SHA1 Message Date
Jean-Philippe Andre efac7d523a edje: Move signal APIs to an interface
This interface will be used by elm_layout as well.

Ref T5315
2017-08-04 11:52:16 +09:00
Sungtaek Hong d545929845 edje_signal: reduce member count when deleted edje_signal_callback is found
Summary:
 - when deleted callback is found _edje_signal_callback_move_last() is called
   in order to pack match array.
 - during _edje_signal_callback_move_last() index skips when another deleted
   callback is found, but does not reduce members_count.
 - this duplicates a remaining callback and calls the callback twice.

Test Plan:
1. add multiple edje_signal_callback by edje_object_signal_callback_add()
              which have the same source, signal, func but different data.
           2. delete first and last callback by
              edje_object_signal_callback_del/edje_object_signal_callback_del_full.
           3. emit edje_signal.
           4. observe one callback is called twice.

Reviewers: SanghyeonLee, conr2d, jpeg

Subscribers: cedric, jpeg

Differential Revision: https://phab.enlightenment.org/D4985
2017-07-17 15:05:20 +09:00
Carsten Haitzler 0dc74232a1 edje signal cb - dont delete already deleted signals
let's assume you registered a callback twice with the same ptr data
and same func and same sig/src... if you delete it once you're ok.
delete twice... and you re-delete the first one (just makging it for
delete_me). this fixes this corner case

@fix
2016-07-03 15:45:36 +09:00
Carsten Haitzler c2e26a5121 edje - delete obj - null out freed items in structs/data
i just got a segv freeing ian invalid ptr... it SEEMS as if something
has tried to free and edje object twice... but i can't be sure as
valgrind can't catch this. it's a one-off, so ensure after free, we
NULL out things we freed to avoid this.

@fix
2016-04-13 20:02:12 +09:00
Cedric BAIL 61f7236a62 edje: fix typo affecting our 32bits signal matching code.
Big thanks to Maxim who did a serious digging in this issue making it almost
a patch review.

T3125

@fix

Signed-off-by: Cedric BAIL <cedric@osg.samsung.com>
2016-02-12 21:25:55 +01:00
Carsten Haitzler 80ebf5b453 edje - signal match code - clean up function readablity and fix crash
this just clens up the _edje_signal_callback_push() to be simpler and
less wordy with the same actual logic, just pointless things like
return; at end of func removed, use tmp instead of gp->matches
everywhere and not just in one section etc.

also set hashed bool to eina true/false i as opposed to sometimes 0,
sometimes eina true/false and also track it religiously as well as
matches array when freed - hunting bug

for whatever reason after these cleanups i can't reproduce a signal
crash i had which seemed to find freed matches in the hash that should
not have been there. (a hash find walking a bucket found freed memory
for the match in the hash entry - should not have been though reading
the code).

@fix
2015-11-11 14:57:52 +09:00
Carsten Haitzler 761d6fa192 edje - signal matcvhes - fix null deref when patterns is NULL
ok. i found this once-ever-seen thing where
Edje_Signal_Callback_Matches has ALL fields NULL/0 except refcount was
huge (like 13834275 or something like that). i can't see why at the
moment, but defend against it to avoid crashes here by handling these
being null
2015-08-12 20:08:14 +09:00
Mike Blumenkrantz 172a0ccf0c edje: reformat all C files
this has been unreadable for years due to the french tabber.
2015-06-08 14:43:00 -04:00
Mike Blumenkrantz 5375e154fe fix config.h inclusion across the tree 2014-09-23 15:56:46 -04:00
Cedric Bail 44f539e1a3 eina: fix eina_hash_int64 on Windows system. 2013-11-09 20:07:27 +09:00
Cedric Bail 926f4c5e84 efl: detect 64 bits correctly. 2013-11-09 19:48:31 +09:00
Cedric Bail 725237df0a edje: It should never happen, but apparently it does, so assert to get a proper bt. 2013-10-11 15:15:54 +09:00
José Roberto de Souza 79851b4762 edje: Update custom data in _edje_signal_callback_move_last() 2013-07-22 10:14:23 -03:00
José Roberto de Souza fe6dbda0e1 edje: Refactor signal callbacks flags
Share a byte with 2 matchs and use bitwise operations to read/write they states
is not much readable and easily could lead a issues.

Use a struct is much simpler and only will coast a half of byte per match.
2013-07-22 10:14:16 -03:00
José Roberto de Souza 18b27878aa edje: Fix size calculation of flags of signal callbacks 2013-07-18 18:52:27 -03:00
José Roberto de Souza bca31e4ad1 edje: Correctly set match flag in _edje_signal_callback_move_last()
This was causing some callback be removed instead a deleted callback.
Also was leaking stringshare and decreasing matches_count.

SPANK SPANK SPANK cedric
2013-07-18 18:52:22 -03:00
Sebastian Dransfeld 336f6ec328 efl: formatting 2013-06-20 13:28:18 +02:00
Cedric BAIL 556111af62 edje: fix memory leak. 2013-03-22 21:01:53 +09:00
Cedric BAIL 5815be54f5 edje: let's not segfault when we remove a non existant callback. 2013-03-19 14:48:57 +09:00
Cedric Bail b754529325 edje: fix run on 64bits system. 2013-03-18 16:28:22 +09:00
Carsten Haitzler 966626d0b7 Revert "edje: fix run on 64bits system."
This reverts commit d482c5cc59.
2013-03-17 20:00:20 +09:00
Cedric Bail d482c5cc59 edje: fix run on 64bits system. 2013-03-17 13:00:20 +09:00
Cedric BAIL 488ea9ec82 edje: reduce memory usage of Edje signal callbacks and automates.
This patch try to share signal callbacks and automate accross all Edje
object. It does use an Eina_Hash on the callback description (signal,
source, func). There is no need to check it against Edje file or group
only the callbacks matter.

This version remove all use of size_t as it should never be above 32bits.
We have a hard limit on the number of callback to 2^32 now. I am considering
it would be sane to make it a short.
2013-03-13 16:46:42 +09:00
Carsten Haitzler b7221512d5 This causes segv's on 64bit!
Program received signal SIGSEGV, Segmentation fault.
_edje_emit_cb (ed=ed@entry=0x8ebd68, sig=sig@entry=0x8fba4c
"focus,part,in", src=src@entry=0x8222fc "elm.text",
data=data@entry=0x0, prop=prop@entry=0 '\000') at
lib/edje/edje_program.c:1442
warning: Source file is more recent than executable.
1442                                eina_list_free(data.matches);
(gdb) bt
"focus,part,in", src=src@entry=0x8222fc "elm.text",
data=data@entry=0x0, prop=prop@entry=0 '\000') at
lib/edje/edje_program.c:1442
"focus,part,in", src=0x8222fc "elm.text", sdata=0x0, prop=0 '\000') at
lib/edje/edje_program.c:1366
_pd=0x8222f0, list=0x7fff00000001) at lib/edje/edje_message_queue.c:124
op_type=EO_OP_TYPE_REGULAR, op=564, p_list=0x7fffffffcf28) at
lib/eo/eo.c:364
op_type=EO_OP_TYPE_REGULAR, obj=0x8ebae0) at lib/eo/eo.c:404
op_type=op_type@entry=EO_OP_TYPE_REGULAR) at lib/eo/eo.c:435
(obj=<optimized out>) at lib/edje/edje_message_queue.c:71
(sid=sid@entry=0x8eae88) at elm_interface_scrollable.c:788
(sid=0x8eae88) at elm_interface_scrollable.c:805
_pd=0x8eae88, list=<optimized out>) at elm_interface_scrollable.c:3370
op_type=EO_OP_TYPE_REGULAR, op=840, p_list=0x7fffffffd158) at
lib/eo/eo.c:364
op_type=EO_OP_TYPE_REGULAR, obj=0x8ea9e0) at lib/eo/eo.c:404
op_type=op_type@entry=EO_OP_TYPE_REGULAR) at lib/eo/eo.c:435
_pd=0x8ead70, list=<optimized out>) at elm_entry.c:2804
op_type=EO_OP_TYPE_REGULAR, op=129, p_list=0x7fffffffd328) at
lib/eo/eo.c:364
op_type=EO_OP_TYPE_REGULAR, obj=0x8ea9e0) at lib/eo/eo.c:404
lib/eo/eo.c:435
op_type=EO_OP_TYPE_REGULAR, op=1, p_list=0x7fffffffd4a8) at
lib/eo/eo.c:364
(obj=obj@entry=0x8ea9e0, op_type=op_type@entry=EO_OP_TYPE_REGULAR,
op=1) at lib/eo/eo.c:463
class_data=<optimized out>, list=<optimized out>) at elm_widget.c:5526
op_type=EO_OP_TYPE_REGULAR, op=1, p_list=0x7fffffffd628) at
lib/eo/eo.c:364
(obj=obj@entry=0x8ea9e0, op_type=op_type@entry=EO_OP_TYPE_REGULAR,
op=1) at lib/eo/eo.c:463
out>, list=<optimized out>) at elm_layout.c:2157
op_type=EO_OP_TYPE_REGULAR, op=1, p_list=0x7fffffffd7b8) at
lib/eo/eo.c:364
op_type=<optimized out>, op=1) at lib/eo/eo.c:463
op_type=EO_OP_TYPE_REGULAR, op=1, p_list=0x7fffffffd928) at
lib/eo/eo.c:364
(obj=obj@entry=0x8ea9e0, op_type=op_type@entry=EO_OP_TYPE_REGULAR,
op=1) at lib/eo/eo.c:463
out>, list=<optimized out>) at elm_entry.c:3076
op_type=EO_OP_TYPE_REGULAR, op=1, p_list=0x7fffffffdad8) at
lib/eo/eo.c:364
op_type=EO_OP_TYPE_REGULAR, obj=0x8ea9e0) at lib/eo/eo.c:404
lib/eo/eo.c:1162
elm_entry.c:3068
autorun=0x0) at test.c:441

Revert "edje: reduce memory usage of Edje signal callbacks and automates."

This reverts commit 15aae2c0a4.
2013-03-12 23:48:42 +09:00
Cedric BAIL 15aae2c0a4 edje: reduce memory usage of Edje signal callbacks and automates.
This patch try to share signal callbacks and automate accross all Edje
object. It does use an Eina_Hash on the callback description (signal,
source, func). There is no need to check it against Edje file or group
only the callbacks matter.
2013-03-12 15:58:42 +09:00