On Tue, Jun 17, 2008 at 22:24, Ruediger Pluem <[EMAIL PROTECTED]> wrote: > Thanks for investigating, but keep two things in mind: > > 1. If errno is really 0 it would be a bug in your glibc / Linux kernel > as the man page is very clear about setting an error code in errno here.
Yeah, but if it /would/ be a bug in glibc shouldn't APR route around the error somehow? It's not an error, gdb was wrong. > 2. I don't trust print errno here as errno in threaded environments (I > assume > you compiled APR with thread support) is not a static variable as it was > in the past, but a macro wrapping something different in order to make the > whole errno process thread safe. So I guess it would be much safer here to > print the value that is returned in the calling function. Of course in our > case this is more difficult as the call is convoluted in a macro. > Maybe you can call apr_mmap_create(&map, fh, off, len, APR_MMAP_READ, p)); > directly instead via APR_ASSERT_SUCCESS, assign the return value to a > variable > and do a print via gdb afterwards. apr_mmap_create returns 22 (Invalid argument). │133 mm = mmap(NULL, size, native_flags, MAP_SHARED, file->filedes, offset); (gdb) print size $3 = 16384 (gdb) print offset $4 = 8589918208 man 2 mmap says: > void *mmap(void *start, size_t length, int prot, int flags, int fd, off_t > offset); > EINVAL (since Linux 2.6.12), length was 0. this cannot be it. > EINVAL flags contained neither MAP_PRIVATE or MAP_SHARED, or contained both > of these values. neither can this. > EINVAL We don't like start, length, or offset (e.g., they are too > large, or not aligned on a page boundary). start=0 length=16384 offset=8589918208 Any ideas? -- Lucian