Hi all,

If you get my branch devs/barbieri/efl-io-interfaces [1] you can see
that the example efl_io_copier_example will fail to run with a strange
error as below.

The class hierarchy is:

 - Efl.Io.Reader (interface), defines "can_read" property.
 - Efl.Io.Reader.Fd (mixin on top of Efl.Io.Reader), implements "can_read"
 - Efl.Io.Stdin (class on top of Efl.Loop.Fd and Efl.Io.Reader.Fd),
links Efl.Loop.Fd "read" event to set "can_read = True".

It is analogous for Efl.Io.Stdout, replacing "read" with "write".
There is also a "Efl.Io.File" that goes much beyond that and use all
the interfaces and open(2) a file.

Now to the error:

$ ./src/examples/ecore/efl_io_copier_example  - - # run stdin -> stdout

# ignore "ERROR: unknown option -.

ERR<4202>:eo lib/eo/eo.c:581 _eo_class_funcs_set() Class
'Efl_Io_Reader_Fd': NULL API not allowed (NULL->0x7f9d238c3c30
'efl_io_reader_can_read_get').
ERR<4202>:eo lib/eo/eo.c:549 _efl_object_api_op_id_get() Unable to
resolve op for api func 0x7f9d238c3940
ERR<4202>:eo lib/eo/eo.c:581 _eo_class_funcs_set() Class
'Efl_Io_Writer_Fd': NULL API not allowed (NULL->0x7f9d238c4710
'efl_io_writer_can_write_get').
ERR<4202>:eo lib/eo/eo.c:549 _efl_object_api_op_id_get() Unable to
resolve op for api func 0x7f9d238c4450
INFO: copy source=0x4000000030000004 (Efl_Io_Stdin) to
destination=0x4000000040000005 (Efl_Io_Stdout)

As you can see, efl_io_reader_can_read_get() fails to be detected
although it was present in the Efl.Io.Reader.Fd [3][4]. Then when
Efl.Loop.Fd triggers event "read", it will set
efl_io_reader_can_read_set() [5] and it crashes when the signal
activates:

==11923== Jump to the invalid address stated on the next line
==11923==    at 0x0: ???
==11923==    by 0x4E53A30: _efl_io_stdin_event_read (efl_io_stdin.c:16)
==11923==    by 0x508FC97: _efl_object_event_callback_call (eo_base_class.c:1176
)
==11923==    by 0x508E7A3: efl_event_callback_call (in /home/gustavo/Development
/git/efl/src/lib/eo/.libs/libeo.so.1.18.99)
==11923==    by 0x4E51B98: _efl_loop_fd_read_cb (efl_loop_fd.c:34)
==11923==    by 0x4E4FF11: _ecore_call_fd_cb (ecore_private.h:333)
==11923==    by 0x4E4FF11: _ecore_main_fd_handlers_call (ecore_main.c:1974)
==11923==    by 0x4E4FF11: _ecore_main_loop_iterate_internal (ecore_main.c:2339)
==11923==    by 0x4E503E6: ecore_main_loop_begin (ecore_main.c:1286)
==11923==    by 0x109B1F: main (efl_io_copier_example.c:254)
==11923==  Address 0x0 is not stack'd, malloc'd or (recently) free'd
==11923==
==11923==
==11923== Process terminating with default action of signal 11
(SIGSEGV): dumping core
==11923==  Bad permissions for mapped region at address 0x0
==11923==    at 0x0: ???
==11923==    by 0x4E53A30: _efl_io_stdin_event_read (efl_io_stdin.c:16)
==11923==    by 0x508FC97: _efl_object_event_callback_call
(eo_base_class.c:1176)
==11923==    by 0x508E7A3: efl_event_callback_call (in
/home/gustavo/Development/git/efl/src/lib/eo/.libs/libeo.so.1.18.99)
==11923==    by 0x4E51B98: _efl_loop_fd_read_cb (efl_loop_fd.c:34)
==11923==    by 0x4E4FF11: _ecore_call_fd_cb (ecore_private.h:333)
==11923==    by 0x4E4FF11: _ecore_main_fd_handlers_call (ecore_main.c:1974)
==11923==    by 0x4E4FF11: _ecore_main_loop_iterate_internal (ecore_main.c:2339)
==11923==    by 0x4E503E6: ecore_main_loop_begin (ecore_main.c:1286)
==11923==    by 0x109B1F: main (efl_io_copier_example.c:254)

If you try with the Efl.Io.File version by giving the example some
real file, you get a similar error with the other class:

$ ./src/examples/ecore/efl_io_copier_example  /tmp/src /tmp/dst
ERR<12045>:eo lib/eo/eo.c:581 _eo_class_funcs_set() Class 'Efl_Io_Writer_Fd': NU
LL API not allowed (NULL->0x4e53710 'efl_io_writer_can_write_get').
ERR<12045>:eo lib/eo/eo.c:581 _eo_class_funcs_set() Class 'Efl_Io_Reader_Fd': NU
LL API not allowed (NULL->0x4e52c30 'efl_io_reader_can_read_get').
ERR<12045>:eo lib/eo/eo.c:626 _eo_class_funcs_set() Class 'Efl_Io_File': Can't f
ind api func description in class hierarchy (0x5d918f0->0x4e54c70) (efl_io_reade
r_read).
ERR<12045>:eo lib/eo/eo.c:549 _efl_object_api_op_id_get() Unable to
resolve op for api func 0x4e543d0
ERROR: could not open '/tmp/src' for read.

This was due efl_io_reader_read() not found.

Then clearly I'm missing some detail with eolian/.eo files, advices?

BR,


[1] 
https://git.enlightenment.org/core/efl.git/log/?h=devs/barbieri/efl-io-interfaces
[2] 
https://git.enlightenment.org/core/efl.git/tree/src/examples/ecore/efl_io_copier_example.c?h=devs/barbieri/efl-io-interfaces
[3] 
https://git.enlightenment.org/core/efl.git/tree/src/lib/ecore/efl_io_reader_fd.eo?h=devs/barbieri/efl-io-interfaces
[4] 
https://git.enlightenment.org/core/efl.git/tree/src/lib/ecore/efl_io_reader_fd.c?h=devs/barbieri/efl-io-interfaces
[5] 
https://git.enlightenment.org/core/efl.git/tree/src/lib/ecore/efl_io_stdin.c?h=devs/barbieri/efl-io-interfaces#n16


-- 
Gustavo Sverzut Barbieri
--------------------------------------
Mobile: +55 (16) 99354-9890

------------------------------------------------------------------------------
_______________________________________________
enlightenment-devel mailing list
enlightenment-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-devel

Reply via email to