[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