I tried your suggestion, and it doesn't fix the original bug. I'll stick with the semaphores solution.
Vincent At Fri, 03 May 2013 13:13:45 -0400, Vincent St-Amour wrote: > > At Fri, 3 May 2013 12:17:46 -0400, > Eli Barzilay wrote: > > > > A few minutes ago, Vincent St-Amour wrote: > > > At Fri, 3 May 2013 11:56:02 -0400, Eli Barzilay wrote: > > > > (define (delay/thread thunk) > > > > (let () > > > > (define p (make-promise/thread #f)) > > > > (pset! p (make-running-thread (thread (λ() ...same...)))) > > > > p)) > > > > > > I think that introduces another race condition. > > > > > > If the thread is forced before the `pset!', then `force' would > > > return #f (line 107 of racket/promise.rkt), since the value inside > > > the `promise/thread' is not a thread. > > > > But this can't happen because `delay/thread' won't return with the > > broken promise until after the `pset!' fixed it. > > > > (Even code in the input thunk will not be able to try to force itself > > without having itself accessible as a value.) > > Makes sense. I'll give it a try. > > Vincent _________________________ Racket Developers list: http://lists.racket-lang.org/dev