On 27/07/13 03:10, Carsten Haitzler (The Rasterman) wrote: > On Fri, 26 Jul 2013 14:57:28 -0300 Lucas De Marchi > <lucas.demar...@profusion.mobi> said: > >> On Thu, Jul 25, 2013 at 8:54 PM, Carsten Haitzler <ras...@rasterman.com> >> wrote: >>> On Thu, 25 Jul 2013 14:58:30 -0300 Gustavo Sverzut Barbieri >>> <barbi...@profusion.mobi> said: >>> >>>> On Thu, Jul 25, 2013 at 1:46 PM, Tom Hacohen <tom.haco...@samsung.com> >>>> wrote: >>>>> On 24/07/13 03:09, Carsten Haitzler (The Rasterman) wrote: >>>>>> On Tue, 23 Jul 2013 18:22:02 +0200 Jérémy Zurcher <jer...@asynk.ch> >>>>>> said: >>>>>> >>>>>>> just to clarify a few points: >>>>>>> >>>>>>> - I think the less macro we have in an eo class declaration the best, >>>>>>> actually we have nothing but that extra first parameter called >>>>>>> eo2_o, wich is either an obj_ptr (devs/tasn/eo2) or a call_ctx >>>>>>> (devs/jeyzu/eo2) >>>>>>> >>>>>>> this should go away if we use a stack per thread in eo private code, >>>>>>> so we end up with a clean >>>>>>> EAPI float times(float f, float t); >>>>>>> >>>>>>> - since day 1 break is supported in eo2_do: >>>>>>> #define eo2_do(obj_id, ...) >>>>>>> do >>>>>>> { >>>>>>> obj_ptr_or_ctx = eo2_do_start(obj_id); >>>>>>> if(!obj_ptr_or_ctx) break; >>>>>>> do { __VA_ARGS__ ; } while (0); >>>>>>> eo2_do_end(obj_ptr_or_ctx); >>>>>>> } while (0) >>>>>> >>>>>> i'm worried about people doing return there. seriously - objid came in >>>>>> becau se of experience that people using efl are in general >>>>>> inexperienced programmers who don't take the time to do things right. >>>>>> they do things quickly and take shortcuts, and they ignore warnings. >>>>>> they'd rather patch out abort()s in efl code forcing them to fix their >>>>>> bugs, than fix their bugs. i am fearful that they will stuff in returns >>>>>> quite happily and think it mostly works most of the time... and then >>>>>> find subtle issues and waste our time finding them. >>>>>> >>>>>> how do we protect/stop returns (or goto's for that matter) within the >>>>>> while block. i looked for some pragmas - can't find any to do this. >>>>>> this would be a really useful compiler feature though (to maybe disable >>>>>> some constructs for a sequence of code). >> >> What you seem to be looking for is the cleanup attribute. >> >> #define eo2_do(obj_id, ...) >> do >> { >> obj_ptr_or_ctx = eo2_do_start(obj_id); >> if(!obj_ptr_or_ctx) break; >> do >> { >> obj_ptr_or_ctx_type __attribute__((cleanup(eo2_do_end)) >> dummy = obj_ptr_or_ctx; >> __VA_ARGS__ ; >> } while (0); >> } while (0); >> >> >> But then we need to take a look if the cleanup function will run when >> the actual function returns, or when the second "do" runs out of >> scope. This attribute is more commonly used to call free on the >> variable, so it doesn't matter much.... but for us this would make a >> difference if it involves locking. >> >> Then you just allow break and return, and the right thing will happen, >> even in those cases. > > voila! that would do it (if it does work on return as well as break and any > goto that jumps out of the while scope). if course it'd be dependant on > compiler supporting it - if it doesnt, then we cleanup by hand as normal on a > break and return/goto just create bugs. i'd be ok with that. need to add > -fexceptions maybe too from a quick read. needs a little experimenting and > some > method of detection. looks like its single parameter only and i guess it is > done variable by variable which is good enough for us. :) i wonder how new it > is. hmm looks like gcc 3.3 - that means it's rather old by now. GOOD. i hope > clang supports it too and.... it seems not. :( oh well. let's hope most devs > still use gcc. :) > >
Btw, just to clarify something. It will not only result in a reference leak, it'll also make things go really nuts. Consider the following scenario: You call eo_do on object A, and then from *inside* of the first call, you call eo_do on object B. If in the call on object B you have a return/break on windows, you'll keep the global context stack set on B, and then you'll end up calling the rest of the calls in the first eo_do on object A because of B. Really bad. Obviously will only happen on windows. Two things we still need to sort out: 1. Call eo_do_end on platforms that don't have this attribute. 2. When we pop from the ctx stack (i.e eo_do_end) we should consider matching against the object id to verify we actually popped the correct one and print an error otherwise. -- Tom. ------------------------------------------------------------------------------ See everything from the browser to the database with AppDynamics Get end-to-end visibility with application monitoring from AppDynamics Isolate bottlenecks and diagnose root cause in seconds. Start your free trial of AppDynamics Pro today! http://pubads.g.doubleclick.net/gampad/clk?id=48808831&iu=/4140/ostg.clktrk _______________________________________________ enlightenment-devel mailing list enlightenment-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-devel