[Ecls-list] Query about changes
Juan Jose Garcia-Ripoll
juanjose.garciaripoll at googlemail.com
Sat Sep 5 21:45:03 UTC 2009
I forgot it. We do not need to export mp:current-process, for
mp:*current-process* is exported and contains the same information.
Juanjo
2009/9/4 Juan Jose Garcia-Ripoll <juanjose.garciaripoll at googlemail.com>:
> Hi Matthew,
>
> thanks for reporting the problem. There are a couple of subtle race conditions that may happen with locks (even SBCL's current code has it). I have designed with-lock in the following way
>
> (defmacro with-lock ((lock) &body body)
> #-threads
> `(progn , at body)
> ;; Why do we need %count? Even if get-lock succeeeds, an interrupt may
> ;; happen between the end of get-lock and when we save the output of
> ;; the function. That means we lose the information and ignore that
> ;; the lock was actually acquired. Furthermore, a lock can be recursive
> ;; and mp:lock-holder is also not reliable.
> #+threads
> `(let* ((%the-lock ,lock)
> (%count (mp:lock-count %the-lock)))
> (unwind-protect
> (progn
> (mp::get-lock %the-lock)
> , at body)
> (when (> (mp:lock-count %the-lock) %count)
> (mp::giveup-lock %the-lock)))))
>
> I will commit this later on. It should solve your problems.
>
> Juanjo
>
> --
> Instituto de Física Fundamental, CSIC
> c/ Serrano, 113b, Madrid 28006 (Spain)
> http://juanjose.garciaripoll.googlepages.com
>
>
--
Instituto de Física Fundamental, CSIC
c/ Serrano, 113b, Madrid 28006 (Spain)
http://juanjose.garciaripoll.googlepages.com
More information about the ecl-devel
mailing list