hi,
while debugging/fixing the nepomukservicestub crash that like always happens,
I found it's main cause is badly chosen defaults by the port system for
soprano.
Basically, we provide the user with a not working strigi service, as per
nepomuk/services/strigi/strigiservice.cpp:
52 // Using Strigi with the redland backend is torture.
53 // Thus we simply fail initialization if it is used
54 // ==============================================================
55 if ( org::kde::nepomuk::Storage( "org.kde.NepomukStorage",
56 "/nepomukstorage",
57 QDBusConnection::sessionBus() )
58 .usedSopranoBackend().value() != QString::fromLatin1(
"redland" ) ) {
This is also the cause of the following crash:
(gdb) bt
#0 0x281467a6 in QThread::d_func (this=0xa5a5a5a5) at qthread.h:125
#1 0x281457ae in QThread::isRunning (this=0xa5a5a5a5) at
thread/qthread.cpp:403
#2 0x2b475175 in Nepomuk::IndexScheduler::stop (this=0xa5a5a5a5)
at /stable/usr/obj/usr/ports/x11/kdebase4-runtime/work/kdebase-
runtime-4.2.4/nepomuk/services/strigi/indexscheduler.cpp:150
#3 0x2b470937 in ~StrigiService (this=0x2b52f2c0)
at /stable/usr/obj/usr/ports/x11/kdebase4-runtime/work/kdebase-
runtime-4.2.4/nepomuk/services/strigi/strigiservice.cpp:90
#4 0x28253414 in QObjectPrivate::deleteChildren (this=0x2ada5dd0)
at kernel/qobject.cpp:1875
#5 0x2825a387 in ~QObject (this=0x2ada2f40) at kernel/qobject.cpp:884
#6 0x0804c58c in ~ServiceControl (this=0x2ada2f40)
at /stable/usr/obj/usr/ports/x11/kdebase4-runtime/work/kdebase-
runtime-4.2.4/nepomuk/servicestub/servicecontrol.cpp:39
#7 0x28253414 in QObjectPrivate::deleteChildren (this=0x2ad57180)
at kernel/qobject.cpp:1875
#8 0x2825a387 in ~QObject (this=0xbfbfe78c) at kernel/qobject.cpp:884
#9 0x2824594c in ~QCoreApplication (this=0xbfbfe78c) at
kernel/qcoreapplication.cpp:516
#10 0x285c8816 in ~QApplication (this=0xbfbfe78c) at
kernel/qapplication.cpp:1044
#11 0x0804b3ac in main (argc=Cannot access memory at address 0xa5a5a5a5
)
at /stable/usr/obj/usr/ports/x11/kdebase4-runtime/work/kdebase-
runtime-4.2.4/nepomuk/servicestub/main.cpp:149
(gdb) frame 3
#3 0x2b470937 in ~StrigiService (this=0x2b52f2c0)
at /stable/usr/obj/usr/ports/x11/kdebase4-runtime/work/kdebase-
runtime-4.2.4/nepomuk/services/strigi/strigiservice.cpp:90
90 m_indexScheduler->stop();
(gdb) print *this
$9 = {<Nepomuk::Service> = {<QObject> = {_vptr$QObject = 0x2b4877e8,
static staticMetaObject = {d = {superdata = 0x0, stringdata = 0x282dbdc0
"QObject",
data = 0x282dbe40, extradata = 0x0}}, d_ptr = 0x2b530150,
static staticQtMetaObject = {d = {superdata = 0x0, stringdata =
0x282e5260 "Qt",
data = 0x282e6f00, extradata = 0x0}}}, static staticMetaObject = {d
= {
superdata = 0x804ee18, stringdata = 0x2948a9c0 "Nepomuk::Service",
data = 0x2948a9e0, extradata = 0x0}}, d = 0x2ad072b0}, static
staticMetaObject = {
d = {superdata = 0x804ed98, stringdata = 0x2b483fe0
"Nepomuk::StrigiService",
data = 0x2b4840c0, extradata = 0x0}}, m_indexManager = 0xa5a5a5a5,
m_indexScheduler = 0xa5a5a5a5}
(gdb) print *this->m_indexManager
Cannot access memory at address 0xa5a5a5a5
I don't know what other storage backends beside redland and the java one are
available for soprano, but I think we should not make redland the default.
I'm currently rebuilding kdebase4-runtime with the attached patch applied, and
am fairly confident it will fix the crash. I chose not to call isInitialized()
in the destructor as there may be other cases where m_indexManager is checked
rather then checking for successful initialization, plus it seemed cleaner to
me to call setServiceInitialized at the end of the constructor so that any
logic above it can fail at will.
--
Mel
--- nepomuk/services/strigi/strigiservice.cpp.orig 2008-11-28 06:33:44.000000000 -0900
+++ nepomuk/services/strigi/strigiservice.cpp 2009-06-20 09:03:10.000000000 -0800
@@ -71,16 +71,14 @@
else {
kDebug() << "Failed to load sopranobackend Strigi index manager.";
}
-
-
- // service initialization done if creating a strigi index manager was successful
- // ==============================================================
- setServiceInitialized( m_indexManager != 0 );
}
else {
kDebug() << "Will not start when using redland Soprano backend due to horrible performance.";
- setServiceInitialized( false );
+ m_indexManager = 0;
}
+ // service initialization done if creating a strigi index manager was successful
+ // ==============================================================
+ setServiceInitialized( m_indexManager != 0 );
}
_______________________________________________
kde-freebsd mailing list
[email protected]
https://mail.kde.org/mailman/listinfo/kde-freebsd
See also http://freebsd.kde.org/ for latest information