[Xapian-tickets] [Xapian] #640: Core dump when using python bindings for Xapian

Xapian nobody at xapian.org
Mon Apr 28 01:02:48 BST 2014


#640: Core dump when using python bindings for Xapian
---------------------------------------+----------------------------
 Reporter:  jessebowling               |             Owner:  richard
     Type:  defect                     |            Status:  new
 Priority:  normal                     |         Milestone:
Component:  Xapian-bindings (Python)   |           Version:  1.2.15
 Severity:  major                      |        Resolution:
 Keywords:  core dump python bindings  |        Blocked By:
 Blocking:                             |  Operating System:  Linux
---------------------------------------+----------------------------
\
\
\
\
Changes (by olly):

 * priority:  high => normal

\
\
\

Old description:

> Occasionally when running some python code that uses Xapian databases I
> encounter a coredump in the Xapian python bindings. Please advise on what
> debug information would be useful, or how I might avoid this issue
> programmaticly.
>
> Running the following packages on RHEL 6:
> xapian-bindings.x86_64 0:1.2.15-1
> xapian-bindings-python.x86_64 0:1.2.15-1
> xapian-core.x86_64 0:1.2.15-1
> xapian-core-libs.x86_64 0:1.2.15-1
>
> # python --version
> Python 2.6.6
>
> Error starts with:
>
>   File "/usr/lib/python2.6/site-
> packages/netflowindexer-0.1.38-py2.6.egg/netflowindexer/base/indexer.py",
> line 111, in real_index_files
>     database.replace_document(key, doc)
> xapian.DatabaseError: Error reading block 933718066: got end of file
> *** glibc detected *** /usr/bin/python: free(): invalid next size
> (normal): 0x0000000002a2b0e0 ***
> ======= Backtrace: =========
> /lib64/libc.so.6[0x3dd1076166]
> /lib64/libc.so.6[0x3dd1078c93]
> /usr/lib64/libxapian.so.22(_ZN10ChertTable5closeEb+0x4a)[0x7f35ef23c5ba]
> /usr/lib64/libxapian.so.22(_ZN10ChertTableD2Ev+0xf)[0x7f35ef23d13f]
> /usr/lib64/libxapian.so.22(+0xc88a5)[0x7f35ef2248a5]
> /usr/lib64/libxapian.so.22(+0xc8bc9)[0x7f35ef224bc9]
> /usr/lib64/libxapian.so.22(_ZN6Xapian8DatabaseD1Ev+0x4a)[0x7f35ef1ad9ba]
> /usr/lib64/libxapian.so.22(_ZN6Xapian16WritableDatabaseD0Ev+0x9)[0x7f35ef1ada29]
> /usr/lib64/python2.6/site-
> packages/xapian/_xapian.so(+0x29263)[0x7f35ef574263]
> /usr/lib64/python2.6/site-
> packages/xapian/_xapian.so(+0x1d586)[0x7f35ef568586]
> /usr/lib64/libpython2.6.so.1.0[0x33b9a79e4b]
> /usr/lib64/libpython2.6.so.1.0[0x33b9a9a75c]
> /usr/lib64/libpython2.6.so.1.0[0x33b9a79e4b]
> /usr/lib64/libpython2.6.so.1.0[0x33b9a5538b]
> /usr/lib64/libpython2.6.so.1.0[0x33b9a69382]
> /usr/lib64/libpython2.6.so.1.0[0x33b9afa7cb]
> /usr/lib64/libpython2.6.so.1.0[0x33b9afa7db]
> /usr/lib64/libpython2.6.so.1.0[0x33b9afa7db]
> /usr/lib64/libpython2.6.so.1.0[0x33b9a78287]
> /usr/lib64/libpython2.6.so.1.0(PyDict_SetItem+0xa7)[0x33b9a7acf7]
> /usr/lib64/libpython2.6.so.1.0(PyDict_SetItemString+0x40)[0x33b9a7aed0]
> /usr/lib64/libpython2.6.so.1.0(PyImport_Cleanup+0x11b)[0x33b9ae980b]
> /usr/lib64/libpython2.6.so.1.0(Py_Finalize+0x11b)[0x33b9af28ab]
> /usr/lib64/libpython2.6.so.1.0(Py_Main+0x596)[0x33b9aff2d6]
> /lib64/libc.so.6(__libc_start_main+0xfd)[0x3dd101ed1d]
> /usr/bin/python[0x400649]

New description:

 Occasionally when running some python code that uses Xapian databases I
 encounter a coredump in the Xapian python bindings. Please advise on what
 debug information would be useful, or how I might avoid this issue
 programmaticly.

 Running the following packages on RHEL 6:
 xapian-bindings.x86_64 0:1.2.15-1
 xapian-bindings-python.x86_64 0:1.2.15-1
 xapian-core.x86_64 0:1.2.15-1
 xapian-core-libs.x86_64 0:1.2.15-1

 # python --version
 Python 2.6.6

 Error starts with:

 {{{
   File "/usr/lib/python2.6/site-
 packages/netflowindexer-0.1.38-py2.6.egg/netflowindexer/base/indexer.py",
 line 111, in real_index_files
     database.replace_document(key, doc)
 xapian.DatabaseError: Error reading block 933718066: got end of file
 *** glibc detected *** /usr/bin/python: free(): invalid next size
 (normal): 0x0000000002a2b0e0 ***
 ======= Backtrace: =========
 /lib64/libc.so.6[0x3dd1076166]
 /lib64/libc.so.6[0x3dd1078c93]
 /usr/lib64/libxapian.so.22(_ZN10ChertTable5closeEb+0x4a)[0x7f35ef23c5ba]
 /usr/lib64/libxapian.so.22(_ZN10ChertTableD2Ev+0xf)[0x7f35ef23d13f]
 /usr/lib64/libxapian.so.22(+0xc88a5)[0x7f35ef2248a5]
 /usr/lib64/libxapian.so.22(+0xc8bc9)[0x7f35ef224bc9]
 /usr/lib64/libxapian.so.22(_ZN6Xapian8DatabaseD1Ev+0x4a)[0x7f35ef1ad9ba]
 /usr/lib64/libxapian.so.22(_ZN6Xapian16WritableDatabaseD0Ev+0x9)[0x7f35ef1ada29]
 /usr/lib64/python2.6/site-
 packages/xapian/_xapian.so(+0x29263)[0x7f35ef574263]
 /usr/lib64/python2.6/site-
 packages/xapian/_xapian.so(+0x1d586)[0x7f35ef568586]
 /usr/lib64/libpython2.6.so.1.0[0x33b9a79e4b]
 /usr/lib64/libpython2.6.so.1.0[0x33b9a9a75c]
 /usr/lib64/libpython2.6.so.1.0[0x33b9a79e4b]
 /usr/lib64/libpython2.6.so.1.0[0x33b9a5538b]
 /usr/lib64/libpython2.6.so.1.0[0x33b9a69382]
 /usr/lib64/libpython2.6.so.1.0[0x33b9afa7cb]
 /usr/lib64/libpython2.6.so.1.0[0x33b9afa7db]
 /usr/lib64/libpython2.6.so.1.0[0x33b9afa7db]
 /usr/lib64/libpython2.6.so.1.0[0x33b9a78287]
 /usr/lib64/libpython2.6.so.1.0(PyDict_SetItem+0xa7)[0x33b9a7acf7]
 /usr/lib64/libpython2.6.so.1.0(PyDict_SetItemString+0x40)[0x33b9a7aed0]
 /usr/lib64/libpython2.6.so.1.0(PyImport_Cleanup+0x11b)[0x33b9ae980b]
 /usr/lib64/libpython2.6.so.1.0(Py_Finalize+0x11b)[0x33b9af28ab]
 /usr/lib64/libpython2.6.so.1.0(Py_Main+0x596)[0x33b9aff2d6]
 /lib64/libc.so.6(__libc_start_main+0xfd)[0x3dd101ed1d]
 /usr/bin/python[0x400649]
 }}}

--
\
\

Comment:

 The !DatabaseError suggests that your database is corrupted - have you
 tried running xapian-check on it?  But even a corrupt database shouldn't
 result in a crash like this, so there's still a bug here.

 It sounds like the heap's already corrupted at this point, so this
 probably isn't where the problem lies.  Running under valgrind's memcheck
 tool might identify where things actually start to go wrong, though it
 will slow things down significantly, so you probably don't want to run
 your production server like that.

 A lighter-weight alternative is to tell glibc to do validity checks of the
 heap, which might catch the corruption sooner (though probably not as it
 actually happens as valgrind can):

 {{{
 export MALLOC_CHECK_=2
 }}}
\
\
\

--
Ticket URL: <http://trac.xapian.org/ticket/640#comment:2>
Xapian <http://xapian.org/>
Xapian



More information about the Xapian-tickets mailing list