Am Sonntag, 8. Oktober 2006 03:52 schrieb Bob Rogers:
> Sounds good to me. But in that case, outer_ctx is not much better
> . . . but that's probably a much bigger job.
>
> In any case, I discovered that Lua fails ~300 test cases with this
> patch. So, if we still consider it worth dropping this feature, it
> might be better to give it a period of deprecation before we break it
> permanently. How does this sound?
Hmm. Let's trying to keep autoclose then maybe. Given that I'm trying to
propose a different strategy:
We have some structures (or PMCs) which ought to be sharable across threads.
These are mainly PBC-related things, like PF structures and Subs. OTOH some
of these have interpreter (aka thread) specific stuff in them, as the
mentioned ctx's.
Instead of storing the thread-specific item directly, we store a key for that
item. The key is the same for all threads. The data associated with the key
are stored in the interpreter.
This sounds exactly like pthread_{g,s}etspecific (3p) and related, and indeed,
when pthread is available we just could use it. OTOH we could provide a more
general solution usable for all platforms.
We have a per-interpreter ResizablePMCArray (1) with the items. During
initialization we simulate pthread_once(3p) to acquire the next key, which is
the next avaiable slot in that Array (starting from 1).
(1) As stored items are currently a mixture of PMCs and other pointers, this
array would not be marked during DOD. If there's some PMC stored into it,
which isn't anchored elsewhere, it would need marking through
dod_egister_pmc(). The array would be more a RVA (*Voidp*).
leo