Hi, Amirouche Boubekki <amirou...@hypermove.net> writes:
> I have a program that try to download hackernews locally. > > What it does is simple, it fetch the max identifier and > http-get each json value starting with the most recent > item. I use n-for-each-par-map with 16 threads I have > 8 cores. > > Here is the full program: [...] > (define (store pair) > (if (null? pair) > (format #t "X\n") > (let ((port (open-file "hn.scm" "a"))) > (format #t "~a\n" (car pair)) These calls to (format #t ...), which write to a port that is shared by multiple threads, should be performed while holding a mutex to prevent concurrent writes to the same port. I/O operations in Guile do not include built-in thread synchronization, at least not in the fast path cases. However, an effort was made to avoid _crashes_ on common architectures in the event of concurrent use of the same port. Our hope was that the worst that would typically happen is garbled I/O. Perhaps we failed to realize that hope. > How can I debug this? It would be helpful to see a GDB backtrace from a crash in this program. Does it help to protect the shared port with a mutex? Thanks, Mark