ok, i've fixed my problem, thank you

Vincent

On Mon, Dec 5, 2016 at 4:10 AM, Vincent Torri <vincent.to...@gmail.com> wrote:
> i still don't know how to fix the problem...
>
> On Mon, Dec 5, 2016 at 3:04 AM, Carsten Haitzler <ras...@rasterman.com> wrote:
>> On Mon, 5 Dec 2016 09:53:51 +0900 Jean-Philippe André <j...@videolan.org> 
>> said:
>>
>>> On 4 December 2016 at 11:27, Carsten Haitzler <ras...@rasterman.com> wrote:
>>>
>>> > On Sat, 3 Dec 2016 20:25:46 -0200 Gustavo Sverzut Barbieri <
>>> > barbi...@gmail.com>
>>> > said:
>>> >
>>> > > On Sat, Dec 3, 2016 at 7:13 PM, Vincent Torri <vincent.to...@gmail.com>
>>> > wrote:
>>> > > > On Sat, Dec 3, 2016 at 7:44 PM, Gustavo Sverzut Barbieri
>>> > > > <barbi...@gmail.com> wrote:
>>> > > >> On Sat, Dec 3, 2016 at 1:57 PM, Vincent Torri <
>>> > vincent.to...@gmail.com>
>>> > > >> wrote:
>>> > > >>> Hello
>>> > > >>>
>>> > > >>> I'm rewriting my multi-document viewer. I'm using EFL git,  and i
>>> > have
>>> > > >>> that Eo error message :
>>> > > >>>
>>> > > >>> ERR<59568>:eo[T:3] lib/eo/eo.c:1663 efl_isa() Object 40007f56 is not
>>> > a
>>> > > >>> valid object in this context: object domain: 0, current domain: 2,
>>> > > >>> local domain: 2, available domains: [  1 2  ]
>>> > > >>>
>>> > > >>> does someone have an idea of the problem ?
>>> > > >>
>>> > > >> the new efl in git provides more context to that message since
>>> > > >> yesterday, particularly if you use EO_LIFECYCLE_DEBUG=1 (envvar),
>>> > > >> since I was so pissed with such nebulous messages :-D
>>> > > >
>>> > > > all the debug stuff does not work on Windows (it needs libunwind, or
>>> > > > at least DWARF parsing to get the debug symbols), but i will test on
>>> > > > Linux when I have time.
>>> > > >
>>> > > > i've also seen some preload stuff you mentioned, which does not work
>>> > > > on Windows (it's a different method to do similar stuff)
>>> > > >
>>> > > >> usually the object is already dead or was never created... If you're
>>> > > >> using threads (seems so due "[T:3]"), be aware that objects are bound
>>> > > >> to the thread they were created and you need to "import"  to use,
>>> > > >> Raster sent some email to the list and I recall som tests in the
>>> > > >> tree....
>>> > > >
>>> > > > I indeed use an ecore_thread
>>> > >
>>> > > yes, reading the message again, not just the T:3 for the thread, but
>>> > > also the "object domain: 0" (main thread) while "current domain: 2"
>>> > > (secondary thread) would lead to a failure since raster added the
>>> > > protection.
>>> >
>>> > see the message is NOT nebulous. its giving you details the object belongs
>>> > to
>>> > thread domain 0 but your current domain is 2. thus thread does not belong
>>> > to
>>> > the same thread domain that created the object. domain 1 is the shared
>>> > domain
>>> > so should you see object domain being 1 and it still isn't found that 
>>> > means
>>> > there is no object there at all ion the shared table.
>>> >
>>> > the message is very explicit as to the core details of the issue. it's an
>>> > invalid object as far as the thread accessing it is concerned.
>>> >
>>> > > If you want to use auto-locks, then get the shared domain with:
>>> > >
>>> > > efl_domain_current_push(EFL_ID_DOMAIN_SHARED);
>>> > > my_obj = efl_add(...);
>>> > > efl_domain_current_pop();
>>> >
>>> > this isn't really an option UNLESS you created the class entirely 
>>> > inherited
>>> > from base class. i.e. the object class doesn't otherwise use any other
>>> > non-threadsafe data outside the object.
>>> >
>>> > > check eo_test_general.c and Eo.h, they can give you an idea of what
>>> > > can you do... basically all objects are bound to one thread (domain),
>>> > > main thread or shared. Their parent must be in the same domain. This
>>> > > allows TLS of eoid stuff, avoiding locks and possibly avoiding
>>> > > concurrency bugs. Just the shared domains have locks as it used to be
>>> > > in the whole eo.
>>> >
>>> > yup. and even creating shared objects comes with limitations. the intent
>>> > is for
>>> > very specialized objects to become shared objects so multiple threads can
>>> > chare
>>> > them. the general idea is you will have  very very very few shared
>>> > objects, so
>>> > then the global mutex surrounding all shared objects isn't really a big
>>> > issue,but sometimes sharing an object is far easier and simpler than
>>> > anything
>>> > else, and you are not that concerned about contention and performance. 
>>> > most
>>> > objects will be thread-local (and most efl objects will be main-loop local
>>> > of
>>> > course).
>>> >
>>> > but the error right now is very detailed and tells you exactly what it
>>> > sees is
>>> > probably going wrong in the lookup so you can figure out if its a
>>> > cross-thread
>>> > access problem OR that the object actually does not exist. be aware that
>>> > mainloop domain is 0, and the default domain for ALL other threads is 2.
>>> > that
>>> > means create obj in one non-mainloop thread and access in another
>>> > non-mainloop
>>> > thread ... both objects will have domain 1 BUT will have separate TLS 
>>> > based
>>> > local object tables so the same object may haver the same domain but not 
>>> > be
>>> > accessible across tables (there is a small chance you could get a
>>> > false-positive access, but given i now starts generation counts off at
>>> > random
>>> > values per thread, its highly unlikely to have the same object id AND
>>> > generation count match).
>>> > <https://lists.sourceforge.net/lists/listinfo/enlightenment-devel>
>>> >
>>>
>>>
>>> Nah I totally agree with Vincent that the error message is cryptic.
>>
>> the message before was just "this is an invalid object". try figure out why
>> from that message:
>>
>>    ERR("obj_id %p is not a valid object. Maybe it has been freed or does not
>> belong to your thread?", (void *)obj_id);
>>
>> was the object before. well the specific one was an extra error you added in
>> eo_isa. the generic obj pointer is invalid message is:
>>
>>    const char *type = "object";
>>    if (obj_id & ((Eo_Id)1 << (REF_TAG_SHIFT - 1))) type = "class";
>>    ERR("EOID %p is not a valid %s. "
>>        "EOID domain=%i, current_domain=%i, local_domain=%i. "
>>        "EOID generation=%lx, id=%lx, ref=%i, super=%i. "
>>        "Thread self=%lu. "
>>        "Available domains [%s %s %s %s]. "
>>        "Maybe it has been deleted or does not belong to your thread?",
>>
>>        (void *)obj_id,
>>        type,
>>        (int)domain,
>>        (int)data->domain_stack[data->stack_top],
>>        (int)data->local_domain,
>>        (unsigned long)(obj_id & MASK_GENERATIONS),
>>        (unsigned long)(obj_id >> SHIFT_ENTRY_ID) & (MAX_ENTRY_ID |
>> MAX_TABLE_ID | MAX_MID_TABLE_ID),
>>        (int)(obj_id >> REF_TAG_SHIFT) & 0x1,
>>        (int)(obj_id >> SUPER_TAG_SHIFT) & 0x1,
>>        (unsigned long)eina_thread_self(),
>>        (data->tables[0]) ? "0" : " ",
>>        (data->tables[1]) ? "1" : " ",
>>        (data->tables[2]) ? "2" : " ",
>>        (data->tables[3]) ? "3" : " "
>>       );
>>
>> maybe it should use the generic error print?
>>
>>> Anyway as far as I remember shared objects are not a viable solution until
>>> we change the calling mechanism (function & data resolution) to be
>>> thread-safe, rather than locking the entire pool of shared objects for the
>>> entire duration of a call.
>>
>> locking the whole pool means we can do shared objects without a whole tonne 
>> of
>> extra work. as long as all things accessed inside object methods (including
>> parent classes) are entirely within the code for that object or are already
>> threadsafe then no extra locks have to be written at all. everything will 
>> just
>> work and it's a massive amount of work saved. having to fine-grain lock
>> everything manually is just insane and that's why efl is not threadsafe and
>> never will be because no one is going to go do that. this is why many libs 
>> are
>> not threadsafe. it's a massive amount of work to do and easy to get wrong to
>> miss an lock or unlock somewhere. having a single locking and unlocking spot
>> even if it is a "one big fat lock for every shared object" is safer and far
>> less work. it is unlikely to ever be a real performance issue.
>>
>> --
>> ------------- Codito, ergo sum - "I code, therefore I am" --------------
>> The Rasterman (Carsten Haitzler)    ras...@rasterman.com
>>
>>
>> ------------------------------------------------------------------------------
>> _______________________________________________
>> enlightenment-devel mailing list
>> enlightenment-devel@lists.sourceforge.net
>> https://lists.sourceforge.net/lists/listinfo/enlightenment-devel

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

Reply via email to