[Xapian-tickets] [Xapian] #651: Avoid low fds
Xapian
nobody at xapian.org
Mon Dec 8 00:05:28 GMT 2014
#651: Avoid low fds
---------------------------+-----------------------------
Reporter: olly | Owner: olly
Type: enhancement | Status: assigned
Priority: normal | Milestone: 1.3.3
Component: Backend-Glass | Version:
Severity: normal | Resolution:
Keywords: | Blocked By:
Blocking: | Operating System: All
---------------------------+-----------------------------
Comment (by olly):
I've updated the test program to catch that signal and report it nicely,
then continue.
Also, if the maximum possible off_t value isn't lseekable(), it'll binary
chop to find the actual seekable maximum. On my x86_64 Debian unstable
machine, I get:
{{{
lseek failed: Invalid argument
attempted to set pos to 0x7fffffffffffffff
binary chopping to find actual max:
lseek to 0x3fffffffffffffff fails, errno=22 (Invalid argument)
lseek to 0x1fffffffffffffff fails, errno=22 (Invalid argument)
lseek to 0xfffffffffffffff fails, errno=22 (Invalid argument)
lseek to 0x7ffffffffffffff fails, errno=22 (Invalid argument)
lseek to 0x3ffffffffffffff fails, errno=22 (Invalid argument)
lseek to 0x1ffffffffffffff fails, errno=22 (Invalid argument)
lseek to 0xffffffffffffff fails, errno=22 (Invalid argument)
lseek to 0x7fffffffffffff fails, errno=22 (Invalid argument)
lseek to 0x3fffffffffffff fails, errno=22 (Invalid argument)
lseek to 0x1fffffffffffff fails, errno=22 (Invalid argument)
lseek to 0xfffffffffffff fails, errno=22 (Invalid argument)
lseek to 0x7ffffffffffff fails, errno=22 (Invalid argument)
lseek to 0x3ffffffffffff fails, errno=22 (Invalid argument)
lseek to 0x1ffffffffffff fails, errno=22 (Invalid argument)
lseek to 0xffffffffffff fails, errno=22 (Invalid argument)
lseek to 0x7fffffffffff fails, errno=22 (Invalid argument)
lseek to 0x3fffffffffff fails, errno=22 (Invalid argument)
lseek to 0x1fffffffffff fails, errno=22 (Invalid argument)
lseek to 0xfffffffffff fails, errno=22 (Invalid argument)
lseek to 0x7ffffffffff works
lseek to 0xbffffffffff works
lseek to 0xdffffffffff works
lseek to 0xeffffffffff works
lseek to 0xf7fffffffff works
lseek to 0xfbfffffffff works
lseek to 0xfdfffffffff works
lseek to 0xfefffffffff works
lseek to 0xff7ffffffff works
lseek to 0xffbffffffff works
lseek to 0xffdffffffff works
lseek to 0xffeffffffff works
lseek to 0xfff7fffffff works
lseek to 0xfffbfffffff works
lseek to 0xfffdfffffff works
lseek to 0xfffefffffff works
lseek to 0xffff7ffffff works
lseek to 0xffffbffffff works
lseek to 0xffffdffffff works
lseek to 0xffffeffffff works
lseek to 0xfffff7fffff works
lseek to 0xfffffbfffff works
lseek to 0xfffffdfffff works
lseek to 0xfffffefffff works
lseek to 0xffffff7ffff works
lseek to 0xffffffbffff works
lseek to 0xffffffdffff works
lseek to 0xffffffeffff works
lseek to 0xfffffff7fff works
lseek to 0xfffffffbfff works
lseek to 0xfffffffdfff works
lseek to 0xfffffffefff works
lseek to 0xffffffff7ff fails, errno=22 (Invalid argument)
lseek to 0xffffffff3ff fails, errno=22 (Invalid argument)
lseek to 0xffffffff1ff fails, errno=22 (Invalid argument)
lseek to 0xffffffff0ff fails, errno=22 (Invalid argument)
lseek to 0xffffffff07f fails, errno=22 (Invalid argument)
lseek to 0xffffffff03f fails, errno=22 (Invalid argument)
lseek to 0xffffffff01f fails, errno=22 (Invalid argument)
lseek to 0xffffffff00f fails, errno=22 (Invalid argument)
lseek to 0xffffffff007 fails, errno=22 (Invalid argument)
lseek to 0xffffffff003 fails, errno=22 (Invalid argument)
lseek to 0xffffffff001 fails, errno=22 (Invalid argument)
lseek to 0xffffffff000 works
Max lseekable off_t = 0xffffffff000
info: write() failed with errno=27 (File too large)
Cool, that basically worked - please report the info and/or warnings given
above
}}}
I tested the signal handler on Linux by setting the limit with:
{{{
ulimit -f 2000000000
}}}
I don't think we want to go installing a signal handler in the actual
library though - in general I'd find it surprising if a library implicitly
install a signal handler like that, and I'm not sure what we'd do after
catching the signal anyway, as it most likely comes from someone else's
code so we can't return control to anywhere sensible.
--
Ticket URL: <http://trac.xapian.org/ticket/651#comment:8>
Xapian <http://xapian.org/>
Xapian
More information about the Xapian-tickets
mailing list