[racket-dev] a few bugs
fix pushed
On 03/28/2011 06:08 PM, Sam Tobin-Hochstadt wrote:
> A simple experiment with parallelism and syntax exposed several Racket
> bugs. All of these programs start with this header:
>
> #lang racket
>
> (require racket/future)
> (current-directory "collects/racket/private")
> (current-namespace (make-base-namespace))
>
> (define (big) (expand (read-syntax #f (open-input-file "for.rkt"))))
>
> (define (go1)
> (let loop ([s (big)])
> (syntax-case s ()
> [(a . b) (loop #'a) (loop #'b)]
> [_ (display 1)])))
>
> Then, if we do:
>
> (define (gon)
> (for ([i (in-range 1000)]) (go1)))
>
> (define l (list (future gon) (future gon)))
> (map touch l)
>
> we get this error:
> make-vector: expected argument of type<non-negative exact integer>;
> given 831868466
>
> If we do:
>
> (define l (list (future go1) (future go1)))
> (map touch l)
>
> Then we sometime get segfaults, and sometimes run to completion.
>
> If we just do:
>
> (go1)
>
> Then it runs correctly in Racket, but consistently segfaults in
> DrRacket, like this:
>
> Seg fault (internal error during gc) at 0x8147c64
> SIGSEGV SEGV_ACCERR SI_CODE 2 fault on 0x8147c64
>
> This is all with the latest Git, *with --enable-places* (although
> places aren't used).