httpd-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Stefan Eissing <stefan.eiss...@greenbytes.de>
Subject file bucket, mmaps and SIGBUS
Date Tue, 19 Apr 2016 10:02:30 GMT
The reported problem of segmentation faults in mod_http2 during a graceful restart seems to
boil down to the fact that the document root is updated at the same time. On my OS X I can
reproduce the SIGBUS when GETting the same 10 MB file again and again and copying over it.

When I disable mmap for the file buckets, the crash does not occur and the request fails as
expected.

So, my understanding is that apr_bucket_read() hands out a pointer to the mmap'ed memory and
when I copy that data somewhere else, and the underlying file is gone, a SIGBUS occurs as
the OS has no other means of telling me about the problem.

Interestingly, when I send the same buckets down to the core output filters, the problem does
not happen. Since this seems to involve writes using iovec's the kernel might handle this
properly with a return code? I am not sure. Or maybe it's the sendfile() that takes care of
it...

Disabling mmap in general seems not really a good solution, but it is not as bad as http2
sends file out in <= 16KB chunks anyway. Since for TLS, I need to assemble frame data anyway,
reading directly from file into a properly allocated frame buffer might be better anyway.

However I'd like to understand the problem and my options here: what would I need to do to
use mmap'ed files properly? Catch SIGBUS during the copy? Advice appreciated.

Cheers,

-Stefan





Mime
View raw message