Since this came in the core_loop example is no longer working correctly.
https://git.enlightenment.org/tools/examples.git/tree/reference/c/core/src/core_event.c

There are a few ERR about timers being dead and objects having parents that
didn't happen before.
Additionally a EFL_LOOP child of mainloop is created and a timer attached.
The timer no longer gets the TIMER_EVENT_TICK callback.

Any hints as to where I should start looking to see what is broken?

Thanks,
Andy

On Wed, 20 Dec 2017 at 04:28 Jean-Philippe André <j...@videolan.org> wrote:

> On Wed, Dec 20, 2017 at 12:41 PM, Carsten Haitzler <ras...@rasterman.com>
> wrote:
>
> > On Wed, 20 Dec 2017 11:58:21 +0900 Jean-Philippe André <
> j...@videolan.org>
> > said:
> >
> > > On Wed, Dec 20, 2017 at 11:01 AM, Carsten Haitzler <
> ras...@rasterman.com
> > >
> > > wrote:
> > >
> > > > On Mon, 18 Dec 2017 20:16:49 +0900 Jean-Philippe André <
> > j...@videolan.org>
> > > > said:
> > > >
> > > > > On Sat, Dec 16, 2017 at 12:20 PM, Carsten Haitzler <
> > ras...@rasterman.com
> > > > >
> > > > > wrote:
> > > > >
> > > > > > On Fri, 15 Dec 2017 14:29:22 -0500 Cedric Bail <ced...@ddlm.me>
> > said:
> > > > > >
> > > > > > > > -------- Original Message --------
> > > > > > > > Subject: [E-devel] ecore / efl loop work
> > > > > > > > Local Time: December 14, 2017 9:30 PM
> > > > > > > > UTC Time: December 15, 2017 5:30 AM
> > > > > > > > From: ras...@rasterman.com
> > > > > > > > To: e <enlightenment-devel@lists.sourceforge.net>
> > > > > > >
> > > > > > > <snip>
> > > > > > >
> > > > > > > > there are internals that need some cleaning up like internal
> > use of
> > > > > > > > ecore_timer, ecore_idler. need to decide what to do with
> > ecore_app
> > > > and
> > > > > > > > argv/argc stuff. the ecore signal code needs some cleaning up
> > > > > > internally
> > > > > > > > too. ecore_thread and ecore_pipe need re-implementation for
> > > > > > > > inter-thread/loop messaging/calling etc.
> > > > > > >
> > > > > > > ecore_app and argv/argc are already passed to the
> > > > > > EFL_LOOP_EVENT_ARGUMENTS as
> > > > > > > parameter to the main loop. There is no real need I think to
> have
> > > > that
> > > > > > more
> > > > > > > exposed.
> > > > > >
> > > > > > oh i know. i'm more thinking about spawning new threads+loops ...
> > and
> > > > > > should
> > > > > > they be spawned by passing argv/c to them like processes get.
> it'd
> > > > make all
> > > > > > threads/loops consistent in this way. yes. being able to attach a
> > void
> > > > *
> > > > > > might
> > > > > > also be useful as this is what pthread will do anyway.
> > > > > >
> > > > > > > As for Ecore_Thread, the only binding that could make use of it
> > is
> > > > C++
> > > > > > and it
> > > > > > > requires to definitively have a way to mark a function in .eo
> for
> > > > other
> > > > > > > binding to ignore. At this point, there is no rush into
> > implementing
> > > > it.
> > > > > >
> > > > > > well ecore_thread also does a thread pool, work queue etc. and
> it's
> > > > > > asymmetric.
> > > > > > you can create work thread items and then send back results, but
> > once
> > > > > > created
> > > > > > you cant "send more work to the thread". you create more threads.
> > > > > >
> > > > > > i was thinking more along the lines of:
> > > > > >
> > > > > > we create a thread+loop via eo (you get back a LOCAL object
> handle
> > > > > > representing
> > > > > > the remote thread that you use to communicate with it), and now
> > you can
> > > > > > send
> > > > > > stuff to it, and get back events from it (sending likely just
> > returns
> > > > you a
> > > > > > future if you are expecting a reply so you can turn it into a
> > > > > > "conversation"
> > > > > > via promises/futures). this is what i mean by "ecore thread"
> needs
> > > > doing.
> > > > > > we
> > > > > > need a way of creating threads and talking to them nicely.
> > > > > >
> > > > > > > > i also don't delete the loop object on ecore shutdown. it's
> ...
> > > > > > problematic.
> > > > > > > > tbh the whole "shutdown" stuff we have in efl is just not
> > worth the
> > > > > > corner
> > > > > > > > case work. init and leave up and running for the life of the
> > > > process.
> > > > > > it's
> > > > > > > > simpler and it also actually makes it faster to exit an
> app...
> > > > shutting
> > > > > > > > down actually takes a lot of work. i've seen it delay an app
> > > > closing a
> > > > > > lot.
> > > > > > >
> > > > > > > This is going to likely create problem. If you have for example
> > added
> > > > > > data to
> > > > > > > the loop object and you expect the destruction callback to be
> > called
> > > > at
> > > > > > some
> > > > > > > point, well, that will be out of luck. I can't remember why,
> but
> > the
> > > > two
> > > > > > > tests you disable where from a real life case that required
> that
> > > > > > behavior. So
> > > > > > > it would be best if I could remember, but right now, I feel
> like
> > not
> > > > > > > destroying this object is ging to create trouble in the future
> > as it
> > > > > > will be
> > > > > > > one object that doesn't have the same behavior as every other
> > one.
> > > > > >
> > > > > > that doesn't change the fact that destruction is expensive and
> > > > generally
> > > > > > pointless. there may b e some cases where it's nice. like
> > "detecting
> > > > leaks
> > > > > > by
> > > > > > looking at what is still allocated on exit" which frankly doesn't
> > work
> > > > too
> > > > > > well
> > > > > > anyway. but i found problems in eldbus for example when finally
> > > > everything
> > > > > > was
> > > > > > really children of the loop object and destroying the loop object
> > had
> > > > > > issues
> > > > > > that spider out everywhere. i was chasing one thing after the
> > other in
> > > > the
> > > > > > tests there and decided for now just to not delete the loop
> object
> > so
> > > > i can
> > > > > > move on.
> > > > > >
> > > > >
> > > > > I disagree. If you want your app to exit quickly just call exit(0)
> > and be
> > > > > done with it.
> > > >
> > > > That should actually just be the default path pretty much (well
> finish
> > off
> > > > this
> > > > loop cycle, exit it then exit app immediately).
> > > >
> > > > > Clean shutdown seems to me like a big plus for anything that
> > pretends to
> > > > > call itself a library. It helps in various scenarios, like
> valgrind,
> > GDB
> > > > > inside make check, etc... I know I personally rely on it quite a
> lot
> > when
> > > > > make check fails.
> > > >
> > > > i know even glibc doesn't clean up everything after itself... if libc
> > > > doesn't... should we even bother? :)
> > > >
> > >
> > > There is no explicit call to init glibc. So should we init our libs
> with
> > > _start or _dl_start? :)
> >
> > actually a lot of the glibc stuff inits "on first use". :) that i have
> seen
> > (basically still allocated memory on shutdown coming from inside glibc).
> >
> > > Shutdown could be used to optimize some memory usage (eg. elm when you
> > > don't need a UI anymore).
> > > I'm well aware that this is nothing more than an ideal... (eg. EO's
> > classes
> > > aren't deleted).
> > > More practically, I find it super useful to fix issues when they arise
> in
> > > make check.
> > >
> > > But apparently fixing shutdown has fixed runtime on Windows (something
> to
> > > do with efreetd, ask vtorri).
> >
> > eh? how?
> >
>
> Maybe Vincent could enlighten us, but I think he doesn't know the details
> either:
>
> <vtorri__> edje hanged , displaying indefinitly eina error message with
> spinlocks and efreetd/efreet_desktop_cache was closing and launched again
> and again
> <vtorri__> i had to reboot my computer
>
>
> > > > > I pushed a series of patches fixing most of this shutdown cycle.
> But
> > most
> > > > > of the ecore event types are stored as static variables and aren't
> > > > properly
> > > > > re-initialized after re-init. This breaks behavior with legacy
> where
> > the
> > > > > event handlers table simply didn't change after shutdown/init. Not
> > sure
> > > > if
> > > > > all the event types should be reset (after flush) or if we should
> > keep a
> > > > > static table for legacy ecore event.
> > > >
> > > > that is indeed a good question. it brings up the following point:
> > > >
> > > > when i designed the ecore event types and ecore init/shutdown the
> > intent
> > > > was
> > > > this:
> > > >
> > > > 1. an app/process does an ecore_init ONCE EVER.
> > > > 2. it gets an event ONCE EVER
> > > > 3. it only does ecore_shutdown ONCE EVER just before actually
> exiting.
> > > >
> > > > doing shutdown, then init, then shutdown, then init was not ever
> > intended
> > > > to
> > > > work. you can tell by the api like you mention that it probably
> > wasn't. but
> > > > many of our tests try and do this and we have to jump through hoops
> to
> > > > make it
> > > > work. that is actually why i had to disable deletion of the loop
> > object on
> > > > shutdown (from memory). because disable forking in check and... it
> > will do
> > > > this
> > > > again and again and caused issues with eldbus for sure.
> > > >
> > >
> > > Yeah, it wasn't designed for it, that's pretty clear.
> > > I agree that in >99% of cases we don't care about clean shutdown, as
> long
> > > as tmp files are cleaned up, config is saved, etc...
> >
> > correct. shutdown really want intended for just that - cleaning
> > out-of-process
> > resources like tmp files etc.
> >
> > the question is... should init, shutdown, init, shutdown actually work? i
> > don't
> > think it should... this leads to implications on how to implement a
> > shutdown
> > etc.
> >
>
> I believe we can agree on this: it's useful for testing but belongs to
> "undefined" behavior otherwise. I mean, it's not meant to work.
>
> But when we'll deal with multiple loops and all that, you will want a clean
> destruction of the loop object.
>
> > > > > > <snip>
> > > > > > >
> > > > > > > > this api is NOT FINAL. it's a good first stab at doing all of
> > this
> > > > > > work. it
> > > > > > > > could probably improve. i need to clear up some of the
> internal
> > > > bits
> > > > > > that
> > > > > > > > still use single mainloop dependent calls as per the commit
> and
> > > > above,
> > > > > > and
> > > > > > > > some other things need a design and implementation... and
> then
> > > > actually
> > > > > > > > create multiple threads with loops and even decide HOW
> threads
> > and
> > > > > > loops
> > > > > > > > are created and spawned and hooked up etc. ... but this is a
> > huge
> > > > step
> > > > > > > > there.
> > > > > > >
> > > > > > > I am not to sure of the various API around message. It is
> > missing a
> > > > lot
> > > > > > of
> > > > > > > documentation to understand it, but in efl_loop, shouldn't
> > > > > > message_process
> > > > > > > and message_exists only be internal function ? Or do you see
> any
> > use
> > > > for
> > > > > > them
> > > > > > > in an application ? Why is message_handler_get an class
> function
> > ?
> > > > > >
> > > > > > well they generally shouldn't be called, but they are really
> > methods
> > > > on the
> > > > > > object, so i put them there. other than totally hiding them from
> eo
> > > > ... i
> > > > > > don't
> > > > > > think we have a good solution yet. nothing like "@dangerous" or
> > > > > > "@privileged"
> > > > > > or something... just @protected which is not what i want
> really...
> > i
> > > > think.
> > > > > >
> > > > >
> > > > > Basically should be @beta at least. Or indeed not exposed in EO.
> > > >
> > > > for now can i sit on the fence for this? it's really a simple "expose
> > or
> > > > tag
> > > > appropriately" issue.
> > > >
> > >
> > > It'd be useful to tag these things properly so that we can get an idea
> of
> > > what could be part of a release and what could not :)
> >
> > well i'm right now working on trying to fix the chain of mess that #undef
> > EAPI
> > has created... :) so i kind of don't want to context switch.... :)
> >
> > > > > > message_handler_get was a class func due to a long talk i had
> with
> > jpeg
> > > > > > about
> > > > > > making something that comes out nicely in bindings with
> typesafety
> > and
> > > > no
> > > > > > casting. right now i forgot the detail... @jpeg - help me out -
> > what
> > > > was
> > > > > > the
> > > > > > detail again? ummm... I think it was that you can
> > > > >
> > > > > The idea was that the event info would be a subclass of the main
> > event
> > > > info
> > > > > class, i.e. Efl.Loop.Message.
> > > > > There are no subclasses yet, as none of the existing events can be
> > > > > transformed to EO objects without extra wrapping for legacy.
> > > >
> > > > actually the "legacy ecore event" stuff does subclass the legacy
> > events...
> > > > but
> > > > it's not exposed outside of efl's internal build. :)
> > > >
> > > > > So let's say our event info class is My_Message, subclass of
> > > > > Efl.Loop.Message.
> > > > > The idea I think was that you'd also subclass
> > Efl.Loop.Message.Handler
> > > > and
> > > > > create a new event type there, which could then be strongly typed
> > with
> > > > > My_Message as event info type. message_call would be a trivial
> > > > > implementation that figures out the eo event type (let's say with a
> > > > > @protected method message_type returning Efl.Event.Description) and
> > fires
> > > > > it.
> > > >
> > > > but we could do that without a class function... there was a reason a
> > class
> > > > function solved it. with a normal method or a class func it'd be the
> > same:
> > > >
> > > >   My_Msg_Hnd_Class my_msgh =
> > > > (My_Msg_Hnd_Class)loop.message_handler_get(My_Msg_Hnd_Class);
> > > >   my_msgh.event_callback_my_msg_event_add(...);
> > > >
> > > > vs:
> > > >
> > > >   My_Msg_Hnd_Class my_msgh = (My_Msg_Hnd_Class)ef_loop_
> > > > message_handler_get(loop,
> > > > My_Msg_Hnd_Class);
> > > >   my_msgh.event_callback_my_msg_event_add(...);
> > > >
> > > > we're always going to return the more generic parent class handler
> > type,
> > > > so a
> > > > cast would be needed there to the more specific type... but after
> that
> > you
> > > > get
> > > > correct typing... argh. i can't remember now. it looks to me that it
> > should
> > > > just be a normal loop method as both ways above require a cast...
> but i
> > > > know
> > > > the reason was to not cast...
> > > >
> > > > > Honestly I'm not sure I remember right, and I'm not sure it's
> > necessary
> > > > > either :) This was just a lunch discussion after all :)
> > > >
> > > > well i remember i was struggling on what do do here to try and avoid
> > > > casting
> > > > (in c++ and similar langs. c/js/lua won't care). and the solution was
> > "a
> > > > class
> > > > function" and it made perfect sense at the time and solved it...
> which
> > it
> > > > seemingly hasn't done... argh...
> > > >
> > >
> > > Yeah... :-/ Can't remember either...
> >
> > :( i hope somehow we remember... or i'm going to just make it a loop
> > method and
> > say "you must cast"... :)
> >
>
> All I can remember was that the event info in the callback had a type known
> at compile time, and that would be super useful for C++.
>
> > > > > How is Efl.Loop.Handler suppose to be used ? How does it fit with
> > > > Efl.Io
> > > > > > > interfaces ?
> > > > > >
> > > > > > loop handler doesn't DO io. it also isn't limited to fd's. its
> the
> > old
> > > > fd
> > > > > > handler AND win32 handler combined in one object. it calls event
> > > > callbacks
> > > > > > when
> > > > > > the fd or win32 handle is ready for read/write etc. - then you do
> > it.
> > > > yes.
> > > > > > fd's
> > > > > > are low level as are win32 handles. this is probably generally
> > useless
> > > > for
> > > > > > js/lua/c# etc. etc. .. but it's necessary for c/c++ and other
> > native
> > > > > > languages
> > > > > > where these types exist and need to be integrated. this backs the
> > > > legacy
> > > > > > fd and
> > > > > > win32 handlers now (they sit on top of it). the efl io stuff
> didn't
> > > > > > integrate
> > > > > > into the loop. they didn't register for wakeup with select and
> > > > friends. the
> > > > > > handlers are the glue to do this with and they handle the lower
> > level
> > > > > > objects
> > > > > > (fd's, win32 handles).
> > > > > >
> > > > > > > Cedric
> > > > > > > ------------------------------------------------------------
> > > > > > ------------------
> > > > > > > Check out the vibrant tech community on one of the world's most
> > > > > > > engaging tech sites, Slashdot.org! http://sdm.link/slashdot
> > > > > > > _______________________________________________
> > > > > > > enlightenment-devel mailing list
> > > > > > > enlightenment-devel@lists.sourceforge.net
> > > > > > >
> https://lists.sourceforge.net/lists/listinfo/enlightenment-devel
> > > > > > >
> > > > > >
> > > > > >
> > > > > > --
> > > > > > ------------- Codito, ergo sum - "I code, therefore I am"
> > > > --------------
> > > > > > Carsten Haitzler - ras...@rasterman.com
> > > > > >
> > > > > >
> > > > > > ------------------------------------------------------------
> > > > > > ------------------
> > > > > > Check out the vibrant tech community on one of the world's most
> > > > > > engaging tech sites, Slashdot.org! http://sdm.link/slashdot
> > > > > > _______________________________________________
> > > > > > enlightenment-devel mailing list
> > > > > > enlightenment-devel@lists.sourceforge.net
> > > > > > https://lists.sourceforge.net/lists/listinfo/enlightenment-devel
> > > > > >
> > > > > >
> > > > >
> > > > >
> > > > > --
> > > > > Jean-Philippe André
> > > > > ------------------------------------------------------------
> > > > ------------------
> > > > > Check out the vibrant tech community on one of the world's most
> > > > > engaging tech sites, Slashdot.org! http://sdm.link/slashdot
> > > > > _______________________________________________
> > > > > enlightenment-devel mailing list
> > > > > enlightenment-devel@lists.sourceforge.net
> > > > > https://lists.sourceforge.net/lists/listinfo/enlightenment-devel
> > > >
> > > >
> > > > --
> > > > ------------- Codito, ergo sum - "I code, therefore I am"
> > --------------
> > > > Carsten Haitzler - ras...@rasterman.com
> > > >
> > > >
> > >
> > >
> > > --
> > > Jean-Philippe André
> >
> >
> > --
> > ------------- Codito, ergo sum - "I code, therefore I am" --------------
> > Carsten Haitzler - ras...@rasterman.com
> >
> >
>
>
> --
> Jean-Philippe André
>
> ------------------------------------------------------------------------------
> Check out the vibrant tech community on one of the world's most
> engaging tech sites, Slashdot.org! http://sdm.link/slashdot
> _______________________________________________
> enlightenment-devel mailing list
> enlightenment-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/enlightenment-devel
>
-- 
http://andywilliams.me
http://ajwillia.ms
------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
enlightenment-devel mailing list
enlightenment-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-devel

Reply via email to