Yesterday I'd compiled the most recent git-master version of Chicken.
Everything went fine until I encountered a seg-fault failure during "make
test", the culprit being "posix-tests.scm".
In the portion of the test:
(let ((tnpfilpn (create-temporary-file)))
(let ((tmpfilno (file-open tnpfilpn ( open/rdwr open/creat)))
(data "abcde")
(size 5))
(file-write tmpfilno data)
(let ((mmap (map-file-to-memory #f size prot/read map/file tmpfilno))
(str (make-string size)))
(assert (memory-mapped-file? mmap))
(move-memory! (memory-mapped-file-pointer mmap) str size)
(assert (blob=? (string->blob data) (string->blob str)))
(unmap-file-from-memory mmap))))
the problem arose during (move-memory! ...) because mmap was actually pointing
at address #x00, obviously not a valid location, resulting in the seg-fault.
On investigation, it turns out that, at least on Linux, the map/file flag
doesn't do anything. It's necessary to also use map/private, map/shared, etc.,
in order for mmap function (that is, map-file-to-memory) to work. (In fact,
map/file isn't needed at all and may be omitted.)
Modifying the procedure call in the (let ((mmap ...) line as follows returns a
valid pointer and the test succeeds:
(let ((mmap (map-file-to-memory #f size prot/read ( map/file map/private)
tmpfilno))
...
Likely enough, the mmap call varies among operating systems so I'm not sure
what the general solution would be, but I thought the problem with the test was
worth pointing out.
Jules Altfas.
_______________________________________________
Chicken-users mailing list
[email protected]
https://lists.nongnu.org/mailman/listinfo/chicken-users