[Xr] Can the xrs argument be removed?
Bill Spitzak
spitzak at d2.com
Thu May 22 14:03:44 PDT 2003
On Thursday 22 May 2003 12:58 pm, Carl Worth wrote:
> On May 21, Bill Spitzak wrote:
> > I would like to recommend that you remove the "XrState*" argument from
> > Xr, and make it work much more like OpenGL where there is an implied
> > static context variable.
>
> Thanks for the suggestion. This would be quite convenient.
Well, I am extremely glad this was not dismissed immediately. So there is
actually some possibility of this happening? I personally feel this is
enormously important and would make Xr a very popular and standard interface,
due to the ease of imbedding the calls into existing code.
> I'll confess that I don't have much experience with TLS, so I have
> some questions on the implementation. For example, what is the
> best/most portable approach?
>
> I see there's the pthread_key_create/pthread_setspecific stuff.
>
> There's also the gcc __thread extension which is documented to support
> IA-32, IA-64, SPARC (32-bit and 64-bit), SuperHitachi (SH), Alpha,
> x86-64, and S390 (31-bit and 64-bit).
I'm afraid I don't know much about it, but I was under the same impression
you are, that it is not standard and different systems have different
solutions. For this reason I thought it would be best to hide the
implementation inside Xr, where it can be done with #ifdef.
> One thing that seems problematic to me is the semantics of at least
> the gcc implementation:
>
> When a thread terminates, any pointers to thread-local
> variables in that thread become invalid. [1]
>
> What could we do to either avoid or detect the problem if one thread
> tries to call XrSetState with a TLS pointer from another thread that
> has already terminated?
I think only the pointer is thread-local. The XrState structure itself is in
normal memory, so another thread could use it. Once the thread dies nothing
can access the pointer, but if it's value was copied somewhere the XrState is
still available.
I think it would be a good idea to lock at the XrState level, so that only
one thread can use an XrState at a time (I suspect this will avoid a lot of
internal locking in XrState, but I may be wrong). If this is done and the
thread using an XrState dies, probably nobody else could use it. Perhaps an
interface is needed to force the XrState to unlock, a program can use this if
it knows better, but it is considered an advanced interface that most people
would not use.
--
,~,~,~,~ ~ ~ ~ ~
/\_ _|_========___ Bill Spitzak
~~~/\/\\~~~~~~\____________/~~~~~~~~ spitzak at d2.com
More information about the cairo
mailing list