[cl-gd-devel] thread safety in cl-gd

Edi Weitz edi at agharta.de
Fri Jul 27 15:47:51 UTC 2007


Hi Alain,

On Fri, 27 Jul 2007 16:02:04 +1000, Alain Picard <Alain.Picard at memetrics.com> wrote:

> I'm wondering if cl-gd has been thoroughly tested for thread safety?

No, not really.  I've sometimes used it in multi-threaded environments
(without any issues), but I wouldn't count that as serious tests.

> Cursory inspection of the code seems to suggest, for instance, that
> *transfomers* is not safe; the only references to this variable I
> see are in specials.lisp:
> (defvar *transformers* nil
>   "Stack of currently active transformer objects.")
>
> and in WITH-TRANFORMATION, which does not create a new binding for
> *transformers*, but rather just pushes a new transformation onto the
> global *transformers*.
>
> Am I reading this right?  It seems to me that two different
> lispworks threads could run in such a way so that 1 thread
> inadvertently starts running with transformers that another thread
> establishes then gets swapped out.

Right.  It would certainly be better to rebind *TRANSFORMERS* here.
I'll fix this.

But this shouldn't be the reason for segfaults, should it?  I'm
wondering if libgd itself is thread-safe.  From

  http://www.libgd.org/Main_Page

it doesn't necessarily look as if it is.

Cheers,
Edi.



More information about the Cl-gd-devel mailing list