[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-bugs-dist
Subject:    [Baloo] [Bug 352083] New: Infinite loop in ChertTable::find_in_block
From:       Peter Cordes <peter () cordes ! ca>
Date:       2015-09-01 6:08:39
Message-ID: bug-352083-17878 () http ! bugs ! kde ! org/
[Download RAW message or body]

https://bugs.kde.org/show_bug.cgi?id=352083

            Bug ID: 352083
           Summary: Infinite loop in ChertTable::find_in_block
           Product: Baloo
           Version: 5.6.2
          Platform: Other
                OS: Linux
            Status: UNCONFIRMED
          Severity: normal
          Priority: NOR
         Component: General
          Assignee: me@vhanda.in
          Reporter: peter@cordes.ca

I'm seeing 100% CPU for baloo-file.  I'm on Kubuntu 15.04 (KDE 5.2.2), with
baloo-kf5  5.6.2-0ubuntu4.

Unlike the problem in https://forum.kde.org/viewtopic.php?f=154&t=120468,
baloo-file-extract isn't running.  baloo-file is the process with "baloo" in
the name that's running.

I attached gdb to baloo-file, and I'm seeing the two helper threads sitting in
poll and select (one each), but the main thread is always somewhere in a query:

[code](gdb) bt full
#0  0x00007f12aa09b930 in Key::operator<(Key) const
(this=this@entry=0x7fff0519cf70, key2=...) at
../backends/chert/chert_table.cc:2293
        key1_len = 6
        key2_len = -3
        k_smaller = -3
        diff = <optimized out>
#1  0x00007f12aa09ba7c in ChertTable::find_in_block(unsigned char const*, Key,
bool, int) (p=p@entry=0x89ea50 "", key=..., leaf=leaf@entry=false, c=<optimized
out>)
    at ../backends/chert/chert_table.cc:486
        k = 229
        i = 229
        j = 232
#2  0x00007f12aa09cdb3 in ChertTable::find(Cursor*) const (this=0x881d48,
C_=0xae1e10) at ../backends/chert/chert_table.cc:508
        j = 2
        p = 0x89ea50 ""
        c = <optimized out>
#3  0x00007f12aa076a31 in ChertCursor::find_entry(std::string const&)
(this=0xb0bbd0, key="\000\330\000@\275\225") at
../backends/chert/chert_cursor.cc:214
        found = <optimized out>
#4  0x00007f12aa0a37b3 in ChertValueManager::get_chunk_containing_did(unsigned
int, unsigned int, std::string&) const (this=this@entry=0x8822a8,
slot=slot@entry=0, did=48533, chunk="") at
../backends/chert/chert_values.cc:164
        exact = <optimized out>
#5  0x00007f12aa0a70d3 in ChertValueManager::get_value(unsigned int, unsigned
int) const (this=0x8822a8, did=48533, slot=0) at
../backends/chert/chert_values.cc:476
        i = <optimized out>
        chunk = ""
        first_did = <optimized out>
        reader = {p = 0x7fff0519d270 "\220c\205", end = 0x7f12a78f689c
<__GI___libc_free+76> "H\203\304([]A\\A]\303f\017\037\204", did = 85578256,
value = ""}
#6  0x00007f12aa08722a in ChertDocument::do_get_value(unsigned int) const
(this=<optimized out>, slot=<optimized out>) at
../backends/chert/chert_document.cc:40
#7  0x00007f12a9ff7a62 in Xapian::Document::Internal::get_value(unsigned int)
const (this=0x8b88c0, slot=0) at ../api/omdocument.cc:279
#8  0x00007f12a9ff7a7c in Xapian::Document::get_value(unsigned int) const
(this=<optimized out>, slot=<optimized out>) at ../api/omdocument.cc:59
#9  0x00007f12aa3bf10a in Baloo::XapianDocument::value(int) const () at
/usr/lib/x86_64-linux-gnu/libKF5BalooXapian.so.1
#10 0x000000000041e4c4 in
Baloo::BasicIndexingQueue::shouldIndex(Baloo::FileMapping&, QString const&)
const ()
#11 0x000000000041f0a5 in
Baloo::BasicIndexingQueue::process(Baloo::FileMapping&,
QFlags<Baloo::UpdateDirFlag>) ()
#12 0x000000000041f65c in Baloo::BasicIndexingQueue::processNextIteration() ()
#13 0x00007f12a847473a in QObject::event(QEvent*) (this=0xa19470, e=<optimized
out>) at kernel/qobject.cpp:1245
        mce = <optimized out>
        sw = {receiver = 0xa19470, previousSender = 0x0, currentSender =
{sender = 0x0, signal = -1, ref = 1}, switched = true}
#14 0x00007f12a8d4cb2c in QApplicationPrivate::notify_helper(QObject*, QEvent*)
(this=0x834160, receiver=0xa19470, e=0x856600) at kernel/qapplication.cpp:3720
        consumed = <optimized out>
#15 0x00007f12a8d52000 in QApplication::notify(QObject*, QEvent*)
(this=0x7fff0519dae0, receiver=0xa19470, e=0x856600) at
kernel/qapplication.cpp:3503
        extra = 0xe5
#16 0x00007f12a8442c2b in QCoreApplication::notifyInternal(QObject*, QEvent*)
(this=0x7fff0519dae0, receiver=0xa19470, event=event@entry=0x856600)
---Type <return> to continue, or q <return> to quit---
    at kernel/qcoreapplication.cpp:935
        threadData = 0x830f20
        loopLevelCounter = {threadData = 0x830f20}
        result = false
        cbdata = {0xa19470, 0x856600, 0x7fff0519d66f}
        d = <optimized out>
#17 0x00007f12a8444c9b in QCoreApplicationPrivate::sendPostedEvents(QObject*,
int, QThreadData*) (event=0x856600, receiver=<optimized out>)
    at ../../include/QtCore/../../src/corelib/kernel/qcoreapplication.h:228
        e = 0x856600
        pe = <optimized out>
        r = <optimized out>
        unlocker = {m = <synthetic pointer>}
        event_deleter = {d = 0x856600}
        locker = {val = 8589128}
        startOffset = 0
        i = @0x830f3c: 1
        cleanup = {receiver = 0x0, event_type = 0, data = 0x830f20,
exceptionCaught = true}
#18 0x00007f12a8444c9b in QCoreApplicationPrivate::sendPostedEvents(QObject*,
int, QThreadData*) (receiver=receiver@entry=0x0, event_type=event_type@entry=0,
data=0x830f20) at kernel/qcoreapplication.cpp:1552
        e = 0x856600
        pe = <optimized out>
        r = <optimized out>
        unlocker = {m = <synthetic pointer>}
        event_deleter = {d = 0x856600}
        locker = {val = 8589128}
        startOffset = 0
        i = @0x830f3c: 1
        cleanup = {receiver = 0x0, event_type = 0, data = 0x830f20,
exceptionCaught = true}
#19 0x00007f12a8445298 in QCoreApplication::sendPostedEvents(QObject*, int)
(receiver=receiver@entry=0x0, event_type=event_type@entry=0)
    at kernel/qcoreapplication.cpp:1410
        data = <optimized out>
#20 0x00007f12a849b843 in postEventSourceDispatch(GSource*, GSourceFunc,
gpointer) (s=0x85e470) at kernel/qeventdispatcher_glib.cpp:271
        source = 0x85e470
#21 0x00007f12a2347c3d in g_main_context_dispatch (context=0x7f128c0016f0) at
/build/buildd/glib2.0-2.44.1/./glib/gmain.c:3122
        dispatch = 0x7f12a849b830 <postEventSourceDispatch(GSource*,
GSourceFunc, gpointer)>
        prev_source = 0x0
        was_in_call = 0
        user_data = 0x0
        callback = 0x0
---Type <return> to continue, or q <return> to quit---
        cb_funcs = <optimized out>
        cb_data = <optimized out>
        need_destroy = <optimized out>
        source = 0x85e470
        current = 0x82eec0
        i = 0
#22 0x00007f12a2347c3d in g_main_context_dispatch
(context=context@entry=0x7f128c0016f0) at
/build/buildd/glib2.0-2.44.1/./glib/gmain.c:3737
#23 0x00007f12a2347f20 in g_main_context_iterate
(context=context@entry=0x7f128c0016f0, block=block@entry=1,
dispatch=dispatch@entry=1, self=<optimized out>)
    at /build/buildd/glib2.0-2.44.1/./glib/gmain.c:3808
        max_priority = 0
        timeout = 0
        some_ready = 1
        nfds = <optimized out>
        allocated_nfds = 13
        fds = 0x84a6c0
#24 0x00007f12a2347fcc in g_main_context_iteration (context=0x7f128c0016f0,
may_block=1) at /build/buildd/glib2.0-2.44.1/./glib/gmain.c:3869
        retval = <optimized out>
#25 0x00007f12a849bc57 in
QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>)
(this=0x861ef0, flags=...)
    at kernel/qeventdispatcher_glib.cpp:418
        d = 0x861f10
        canWait = true
        savedFlags = {i = 0}
        result = <optimized out>
#26 0x00007f12a84403e2 in
QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>)
(this=this@entry=0x7fff0519d950, flags=..., flags@entry=...)
    at kernel/qeventloop.cpp:204
        locker = {val = 8593136}
        ref = {d = 0xa2fc00, locker = @0x7fff0519d8d0, exceptionCaught = true}
        d = 0xa2fc00
#27 0x00007f12a844802c in QCoreApplication::exec() () at
kernel/qcoreapplication.cpp:1188
        threadData = 0x830f20
        eventLoop = 
              {<QObject> = {_vptr.QObject = 0x7f12a869d110 <vtable for
QEventLoop+16>, static staticMetaObject = {d = {superdata = 0x0, stringdata =
0x7f12a85c4a00 <qt_meta_stringdata_QObject>, data = 0x7f12a85c48c0
<qt_meta_data_QObject>, static_metacall = 0x7f12a847cd00
<QObject::qt_static_metacall(QObject*, QMetaObject::Call, int, void**)>,
relatedMetaObjects = 0x0, extradata = 0x0}}, d_ptr = {d = 0xa2fc00}, static
staticQtMetaObject = {d = {superdata = 0x0, stringdata = 0x7f12a860c500
<qt_meta_stringdata_Qt>, data = 0x7f12a8609c80 <qt_meta_data_Qt>,
static_metacall = 0x0, relatedMetaObjects = 0x0, extradata = 0x0}}}, static
staticMetaObject = {d = {superdata = 0x7f12a8695940
<QObject::staticMetaObject>, stringdata = 0x7f12a86204c0
<qt_meta_stringdata_QEventLoop>, data = 0x7f12a8620440
<qt_meta_data_QEventLoop>, static_metacall = 0x7f12a84f2e50
<QEventLoop::qt_static_metacall(QObject*, QMetaObject::Call, int, void**)>,
relatedMetaObjects = 0x0, extradata = 0x0}}}
        returnCode = <optimized out>
#28 0x0000000000417477 in main ()
[/code]

It's ChertTable::find_in_block that's stuck in an infinite loop:

[code]
(gdb) fin
Run till exit from #0  0x00007f12aa09ba7c in ChertTable::find_in_block
(p=p@entry=0x89ea50 "", key=..., leaf=leaf@entry=false, c=<optimized out>)
    at ../backends/chert/chert_table.cc:486
  >no prompt after many seconds of waiting.<
[/code]


Reproducible: Didn't try

-- 
You are receiving this mail because:
You are watching all bug changes.
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic