[racket] Some problem with hash-update!
My best guess is that it's an issue with memory management, because
memory management gets a lot trickier when you call a function that can
call back into Racket. A GC can happen during the callback, and
therefore during the dynamic extent of the foreign-function call, which
can move arguments that were passed to the foreign function, for example.
Would it be possible to provide a complete example?
At Sat, 13 Sep 2014 22:45:28 +0700 (NOVT), "Evgeny Odegov" wrote:
> Oh, I'm wrong. The last code is not equivalent to initial.
> The equivalent code has this problem:
>
> (define result (make-hash))
> (define big-list (list))
> (define (callback dwTextID lpszInfoText lpvUser)
> (if (equal? lpszInfoText "")
> (set! big-list (append big-list (list dwTextID)))
> (hash-update! result
> lpszInfoText
> (lambda (id-lst)
> (define v (list dwTextID))
> (append id-lst v))
> '()))
> #t)
>
>
> The code with `cons' instead `append' works fine:
>
> (define result (make-hash))
> (define (callback dwTextID lpszInfoText lpvUser)
> (hash-update! result
> lpszInfoText
> (lambda (id-lst)
> (define new-id-lst (cons dwTextID id-lst))
> (unless (list? new-id-lst)
>
> (error "~v" new-id-lst))
> new-id-lst)
> '())
> #t)
>
>
>
>
> ____________________
> Racket Users list:
> http://lists.racket-lang.org/users