Bug 250263 - Rekonq crashes without network connection.
Summary: Rekonq crashes without network connection.
Status: RESOLVED FIXED
Alias: None
Product: rekonq
Classification: Applications
Component: general (show other bugs)
Version: unspecified
Platform: Ubuntu Linux
: NOR crash
Target Milestone: ---
Assignee: Andrea Diamantini
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2010-09-05 12:30 UTC by Andrius Štikonas
Modified: 2010-10-04 10:28 UTC (History)
3 users (show)

See Also:
Latest Commit:
Version Fixed In:


Attachments
New crash information added by DrKonqi (7.07 KB, text/plain)
2010-09-25 08:22 UTC, fuggum
Details

Note You need to log in before you can comment on or make changes to this bug.
Description Andrius Štikonas 2010-09-05 12:30:17 UTC
Application: rekonq (0.5.86)
KDE Platform Version: 4.5.1 (KDE 4.5.1)
Qt Version: 4.7.0
Operating System: Linux 2.6.35-19-generic x86_64
Distribution: Ubuntu maverick (development branch)

-- Information about the crash:
- What I was doing when the application crashed:

I tried to use rekonq while disconnected from network (to browse my localhost server). As soon as I started typing in awesome bar rekonq crashed.

The crash can be reproduced every time.

-- Backtrace:
Application: rekonq (rekonq), signal: Segmentation fault
[Current thread is 1 (Thread 0x7f99852da760 (LWP 10193))]

Thread 9 (Thread 0x7f996ff5e710 (LWP 10194)):
#0  pthread_cond_wait@@GLIBC_2.3.2 () at ../nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S:162
#1  0x00007f99841811fe in ?? () from /usr/lib/libQtWebKit.so.4
#2  0x00007f9984181319 in ?? () from /usr/lib/libQtWebKit.so.4
#3  0x00007f997eef0971 in start_thread (arg=<value optimized out>) at pthread_create.c:304
#4  0x00007f997e4ad92d in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:112
#5  0x0000000000000000 in ?? ()

Thread 8 (Thread 0x7f996dcf7710 (LWP 10195)):
#0  pthread_cond_wait@@GLIBC_2.3.2 () at ../nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S:162
#1  0x00007f997f17be3b in QWaitConditionPrivate::wait (this=<value optimized out>, mutex=0xe90c70, time=18446744073709551615) at thread/qwaitcondition_unix.cpp:88
#2  QWaitCondition::wait (this=<value optimized out>, mutex=0xe90c70, time=18446744073709551615) at thread/qwaitcondition_unix.cpp:160
#3  0x00007f997f5ab524 in ThreadWeaver::WeaverImpl::blockThreadUntilJobsAreBeingAssigned (this=0xe92470, th=0x102ce50) at ../../../threadweaver/Weaver/WeaverImpl.cpp:365
#4  0x00007f997f5ae72b in ThreadWeaver::WorkingHardState::applyForWork (this=0xe90cd0, th=0x102ce50) at ../../../threadweaver/Weaver/WorkingHardState.cpp:71
#5  0x00007f997f5acc9f in ThreadWeaver::ThreadRunHelper::run (this=0x7f996dcf6e00, parent=0xe92470, th=0x102ce50) at ../../../threadweaver/Weaver/Thread.cpp:87
#6  0x00007f997f5ad1f8 in ThreadWeaver::Thread::run (this=0x102ce50) at ../../../threadweaver/Weaver/Thread.cpp:142
#7  0x00007f997f17b27e in QThreadPrivate::start (arg=0x102ce50) at thread/qthread_unix.cpp:266
#8  0x00007f997eef0971 in start_thread (arg=<value optimized out>) at pthread_create.c:304
#9  0x00007f997e4ad92d in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:112
#10 0x0000000000000000 in ?? ()

Thread 7 (Thread 0x7f9966eba710 (LWP 10196)):
#0  0xffffffffff60017b in ?? ()
#1  0x00007f9966eb9a90 in ?? ()
#2  0x00007fff223ff852 in ?? ()
Backtrace stopped: previous frame identical to this frame (corrupt stack?)

Thread 6 (Thread 0x7f99618b4710 (LWP 10214)):
#0  pthread_cond_timedwait@@GLIBC_2.3.2 () at ../nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_timedwait.S:212
#1  0x00007f997f17bda2 in QWaitConditionPrivate::wait (this=<value optimized out>, mutex=0x13a2b30, time=30000) at thread/qwaitcondition_unix.cpp:86
#2  QWaitCondition::wait (this=<value optimized out>, mutex=0x13a2b30, time=30000) at thread/qwaitcondition_unix.cpp:160
#3  0x00007f997f170da2 in QThreadPoolThread::run (this=0x13a28c0) at concurrent/qthreadpool.cpp:140
#4  0x00007f997f17b27e in QThreadPrivate::start (arg=0x13a28c0) at thread/qthread_unix.cpp:266
#5  0x00007f997eef0971 in start_thread (arg=<value optimized out>) at pthread_create.c:304
#6  0x00007f997e4ad92d in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:112
#7  0x0000000000000000 in ?? ()

Thread 5 (Thread 0x7f99610b3710 (LWP 10215)):
#0  pthread_cond_timedwait@@GLIBC_2.3.2 () at ../nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_timedwait.S:212
#1  0x00007f997f17bda2 in QWaitConditionPrivate::wait (this=<value optimized out>, mutex=0x13a2b30, time=30000) at thread/qwaitcondition_unix.cpp:86
#2  QWaitCondition::wait (this=<value optimized out>, mutex=0x13a2b30, time=30000) at thread/qwaitcondition_unix.cpp:160
#3  0x00007f997f170da2 in QThreadPoolThread::run (this=0x7f9968012550) at concurrent/qthreadpool.cpp:140
#4  0x00007f997f17b27e in QThreadPrivate::start (arg=0x7f9968012550) at thread/qthread_unix.cpp:266
#5  0x00007f997eef0971 in start_thread (arg=<value optimized out>) at pthread_create.c:304
#6  0x00007f997e4ad92d in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:112
#7  0x0000000000000000 in ?? ()

Thread 4 (Thread 0x7f99606af710 (LWP 10216)):
#0  pthread_cond_timedwait@@GLIBC_2.3.2 () at ../nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_timedwait.S:212
#1  0x00007f997f17bda2 in QWaitConditionPrivate::wait (this=<value optimized out>, mutex=0x13a2b30, time=30000) at thread/qwaitcondition_unix.cpp:86
#2  QWaitCondition::wait (this=<value optimized out>, mutex=0x13a2b30, time=30000) at thread/qwaitcondition_unix.cpp:160
#3  0x00007f997f170da2 in QThreadPoolThread::run (this=0x7f996801b0e0) at concurrent/qthreadpool.cpp:140
#4  0x00007f997f17b27e in QThreadPrivate::start (arg=0x7f996801b0e0) at thread/qthread_unix.cpp:266
#5  0x00007f997eef0971 in start_thread (arg=<value optimized out>) at pthread_create.c:304
#6  0x00007f997e4ad92d in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:112
#7  0x0000000000000000 in ?? ()

Thread 3 (Thread 0x7f995faa5710 (LWP 10217)):
#0  pthread_cond_timedwait@@GLIBC_2.3.2 () at ../nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_timedwait.S:212
#1  0x00007f997f17bda2 in QWaitConditionPrivate::wait (this=<value optimized out>, mutex=0x13a2b30, time=30000) at thread/qwaitcondition_unix.cpp:86
#2  QWaitCondition::wait (this=<value optimized out>, mutex=0x13a2b30, time=30000) at thread/qwaitcondition_unix.cpp:160
#3  0x00007f997f170da2 in QThreadPoolThread::run (this=0x7f996801b0b0) at concurrent/qthreadpool.cpp:140
#4  0x00007f997f17b27e in QThreadPrivate::start (arg=0x7f996801b0b0) at thread/qthread_unix.cpp:266
#5  0x00007f997eef0971 in start_thread (arg=<value optimized out>) at pthread_create.c:304
#6  0x00007f997e4ad92d in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:112
#7  0x0000000000000000 in ?? ()

Thread 2 (Thread 0x7f995f2a4710 (LWP 10218)):
#0  pthread_cond_timedwait@@GLIBC_2.3.2 () at ../nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_timedwait.S:212
#1  0x00007f997f17bda2 in QWaitConditionPrivate::wait (this=<value optimized out>, mutex=0x7f996801b1a0, time=30000) at thread/qwaitcondition_unix.cpp:86
#2  QWaitCondition::wait (this=<value optimized out>, mutex=0x7f996801b1a0, time=30000) at thread/qwaitcondition_unix.cpp:160
#3  0x00007f997f170da2 in QThreadPoolThread::run (this=0x7f996801e440) at concurrent/qthreadpool.cpp:140
#4  0x00007f997f17b27e in QThreadPrivate::start (arg=0x7f996801e440) at thread/qthread_unix.cpp:266
#5  0x00007f997eef0971 in start_thread (arg=<value optimized out>) at pthread_create.c:304
#6  0x00007f997e4ad92d in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:112
#7  0x0000000000000000 in ?? ()

Thread 1 (Thread 0x7f99852da760 (LWP 10193)):
[KCrash Handler]
#6  0x00000000012e3600 in ?? ()
#7  0x00007f997fe55709 in KJob::kill (this=0x1385f40, verbosity=KJob::Quietly) at ../../kdecore/jobs/kjob.cpp:106
#8  0x00007f9984ec1a0e in OpenSearchManager::requestSuggestion (this=0x13872e0, searchText=...) at /home/and/repositories/kde/rekonq/src/search/opensearchmanager.cpp:153
#9  0x00007f9984eb42b0 in UrlResolver::computeSuggestions (this=0x139f000) at /home/and/repositories/kde/rekonq/src/urlbar/urlresolver.cpp:398
#10 0x00007f9984eaff4f in CompletionWidget::suggestUrls (this=0xf90790, text=<value optimized out>) at /home/and/repositories/kde/rekonq/src/urlbar/completionwidget.cpp:357
#11 0x00007f9984eacf14 in UrlBar::suggest (this=0x107ccf0) at /home/and/repositories/kde/rekonq/src/urlbar/urlbar.cpp:498
#12 0x00007f9984eaf30c in UrlBar::qt_metacall (this=0x107ccf0, _c=QMetaObject::InvokeMetaMethod, _id=<value optimized out>, _a=0x7fff222bbf20)
    at /home/and/repositories/kde/rekonq/build/src/urlbar.moc:161
#13 0x00007f997f286b27 in QMetaObject::activate (sender=0x1076ef0, m=<value optimized out>, local_signal_index=<value optimized out>, argv=0x1) at kernel/qobject.cpp:3280
#14 0x00007f997f2808f9 in QObject::event (this=0x1076ef0, e=0x0) at kernel/qobject.cpp:1183
#15 0x00007f998061104c in QApplicationPrivate::notify_helper (this=0xd8b9d0, receiver=0x1076ef0, e=0x7fff222bc670) at kernel/qapplication.cpp:4396
#16 0x00007f9980616b5d in QApplication::notify (this=0x7fff222bc9c0, receiver=0x1076ef0, e=0x7fff222bc670) at kernel/qapplication.cpp:4277
#17 0x00007f9981361f16 in KApplication::notify (this=0x7fff222bc9c0, receiver=0x1076ef0, event=0x7fff222bc670) at ../../kdeui/kernel/kapplication.cpp:310
#18 0x00007f997f26ecdc in QCoreApplication::notifyInternal (this=0x7fff222bc9c0, receiver=0x1076ef0, event=0x7fff222bc670) at kernel/qcoreapplication.cpp:732
#19 0x00007f997f29e6f2 in QCoreApplication::sendEvent (this=0xd8f230) at ../../include/QtCore/../../src/corelib/kernel/qcoreapplication.h:215
#20 QTimerInfoList::activateTimers (this=0xd8f230) at kernel/qeventdispatcher_unix.cpp:602
#21 0x00007f997f29b4c8 in timerSourceDispatch (source=<value optimized out>) at kernel/qeventdispatcher_glib.cpp:184
#22 idleTimerSourceDispatch (source=<value optimized out>) at kernel/qeventdispatcher_glib.cpp:231
#23 0x00007f997ae437e2 in g_main_context_dispatch () from /lib/libglib-2.0.so.0
#24 0x00007f997ae47748 in ?? () from /lib/libglib-2.0.so.0
#25 0x00007f997ae478fc in g_main_context_iteration () from /lib/libglib-2.0.so.0
#26 0x00007f997f29b193 in QEventDispatcherGlib::processEvents (this=0xd64530, flags=<value optimized out>) at kernel/qeventdispatcher_glib.cpp:415
#27 0x00007f99806c385e in QGuiEventDispatcherGlib::processEvents (this=0x1385f40, flags=<value optimized out>) at kernel/qguieventdispatcher_glib.cpp:204
#28 0x00007f997f26da02 in QEventLoop::processEvents (this=<value optimized out>, flags=) at kernel/qeventloop.cpp:149
#29 0x00007f997f26ddec in QEventLoop::exec (this=0x7fff222bc910, flags=) at kernel/qeventloop.cpp:201
#30 0x00007f997f271ebb in QCoreApplication::exec () at kernel/qcoreapplication.cpp:1009
#31 0x00007f9984ecafd6 in kdemain (argc=<value optimized out>, argv=<value optimized out>) at /home/and/repositories/kde/rekonq/src/main.cpp:198
#32 0x00007f997e3e5d8e in __libc_start_main (main=<value optimized out>, argc=<value optimized out>, ubp_av=<value optimized out>, init=<value optimized out>, fini=<value optimized out>, 
    rtld_fini=<value optimized out>, stack_end=0x7fff222bd228) at libc-start.c:226
#33 0x00000000004007d9 in _start ()

Reported using DrKonqi
Comment 1 fuggum 2010-09-25 08:22:21 UTC
Created attachment 51976 [details]
New crash information added by DrKonqi

rekonq (0.6.0) on KDE Platform 4.5.1 (KDE 4.5.1) using Qt 4.7.0

- What I was doing when the application crashed:
attempted to use rekonq to view man pages without a network connection.  i typed ma in the location box and get seg fault.  happens every time.

-- Backtrace (Reduced):
#7  0x00007fbd76dc09f9 in KJob::kill (this=0x175a0d0, verbosity=KJob::Quietly) at ../../kdecore/jobs/kjob.cpp:106
#8  0x00007fbd7a9d42a0 in OpenSearchManager::requestSuggestion (this=0x19afdd0, searchText=...) at /build/buildd/rekonq-0.6.0/src/search/opensearchmanager.cpp:156
#9  0x00007fbd7a9c0579 in UrlResolver::computeSuggestions (this=0x1a19c10) at /build/buildd/rekonq-0.6.0/src/urlbar/urlresolver.cpp:398
#10 0x00007fbd7a9bdd59 in CompletionWidget::suggestUrls (this=0x1644240, text=...) at /build/buildd/rekonq-0.6.0/src/urlbar/completionwidget.cpp:384
#11 0x00007fbd7a9ba6dd in UrlBar::suggest (this=0x163a030) at /build/buildd/rekonq-0.6.0/src/urlbar/urlbar.cpp:503
Comment 2 fuggum 2010-09-25 08:37:36 UTC
consider this as a feature request.  please enable the man: capabilities that were available in konqueror to rekonq.  while it kinda-sorta works, the capability is quite different, in that the default search engine is preferred over local man pages, and you must type the entire man page name before rekonq will display the man page.  it does however, show previously used entries, but this is far from konqueror's superior man page viewer.
cheers
Comment 3 Rohan Garg 2010-09-25 09:41:32 UTC
Working on a fix, will post updates as soon as possible
Comment 4 Panagiotis Papadopoulos 2010-10-02 22:45:30 UTC
I can confirm this too here
Comment 5 Andrea Diamantini 2010-10-03 10:41:10 UTC
commit 2868f5d0d2f1a773a49f4d8d2b980214dcd0931d
Author: Andrea Diamantini <adjam7@gmail.com>
Date:   Sun Oct 3 10:38:33 2010 +0200

    Fix OpenSearchManager behavior to work in every case (also the disconnected ones)
    I hope this fix bug #250263
    
    Applied in rekonq 0.6.1 and in master
    
    CCBUG:250263

diff --git a/src/opensearch/opensearchmanager.cpp b/src/opensearch/opensearchmanager.cpp
index 8e02495..d0d47f6 100644
--- a/src/opensearch/opensearchmanager.cpp
+++ b/src/opensearch/opensearchmanager.cpp
@@ -59,9 +59,6 @@ OpenSearchManager::~OpenSearchManager()
 {
     qDeleteAll(m_enginesMap.values());
     m_enginesMap.clear();
-    
-    if(m_currentJob)
-        m_currentJob->kill();
 }
 
 
@@ -113,22 +110,13 @@ void OpenSearchManager::addOpenSearchEngine(const KUrl &url, const QString &titl
 {
     Q_UNUSED(title);
 
-    if (m_currentJob)
-    {
-        disconnect(m_currentJob);
-        m_currentJob->kill();
-	delete m_currentJob;
-    }
-
-    m_jobData.clear();
-
     if (m_state != IDLE) 
     {
-        // TODO: cancel job
+        idleJob();
     }
 
-    m_state = REQ_DESCRIPTION;
     m_currentJob = KIO::get(url, KIO::NoReload, KIO::HideProgressInfo);
+    m_state = REQ_DESCRIPTION;
     connect(m_currentJob, SIGNAL(data(KIO::Job *, const QByteArray &)), this, SLOT(dataReceived(KIO::Job *, const QByteArray &)));
     connect(m_currentJob, SIGNAL(result(KJob *)), this, SLOT(jobFinished(KJob *)));
 }
@@ -141,23 +129,20 @@ void OpenSearchManager::requestSuggestion(const QString &searchText)
 
     if (m_state != IDLE) 
     {
-        // TODO: cancel job
+        // NOTE: 
+        // changing OpenSearchManager behavior
+        // using idleJob here lets opensearchmanager to start another search, while
+        // if we want in any case lets it finish its previous job we can just return here.
+        idleJob();
     }
-    m_state = REQ_SUGGESTION;
-
+    
     _typedText = searchText;
 
     KUrl url = m_activeEngine->suggestionsUrl(searchText);
     kDebug() << "Requesting for suggestions: " << url.url();
 
-    if (m_currentJob)
-    {
-        disconnect(m_currentJob);
-        m_currentJob->kill();
-    }
-    m_jobData.clear();
-
     m_currentJob = KIO::get(url, KIO::NoReload, KIO::HideProgressInfo);
+    m_state = REQ_SUGGESTION;
     connect(m_currentJob, SIGNAL(data(KIO::Job *, const QByteArray &)), this, SLOT(dataReceived(KIO::Job *, const QByteArray &)));
     connect(m_currentJob, SIGNAL(result(KJob *)), this, SLOT(jobFinished(KJob *)));
 }
@@ -173,15 +158,19 @@ void OpenSearchManager::dataReceived(KIO::Job *job, const QByteArray &data)
 void OpenSearchManager::jobFinished(KJob *job)
 {
     if (job->error())
+    {
+        emit suggestionReceived(_typedText, QStringList());
+        m_state = IDLE;
         return; // just silently return
-
+    }
+    
     if (m_state == REQ_SUGGESTION) 
     {
         const QStringList suggestionsList = m_activeEngine->parseSuggestion(m_jobData);
         kDebug() << "Received suggestions in "<< _typedText << " from " << m_activeEngine->name() << ": " << suggestionsList;
 
-        m_currentJob = NULL;
         emit suggestionReceived(_typedText, suggestionsList);
+        idleJob();
         return;
     }
 
@@ -206,6 +195,8 @@ void OpenSearchManager::jobFinished(KJob *job)
         {
             kFatal() << "Error while adding new open search engine";
         }
+        
+        idleJob();
     }
 }
 
@@ -232,3 +223,16 @@ QString OpenSearchManager::trimmedEngineName(const QString &engineName) const
 
     return trimmed;
 }
+
+
+void OpenSearchManager::idleJob()
+{
+    if (m_currentJob)
+    {
+        disconnect(m_currentJob);
+        m_currentJob->kill();
+    }
+    
+    m_jobData.clear();
+    m_state = IDLE;
+}
diff --git a/src/opensearch/opensearchmanager.h b/src/opensearch/opensearchmanager.h
index 224ada0..fd4b382 100644
--- a/src/opensearch/opensearchmanager.h
+++ b/src/opensearch/opensearchmanager.h
@@ -97,7 +97,9 @@ signals:
 
 private:
     QString trimmedEngineName(const QString &engineName) const;
-
+    
+    void idleJob();
+    
     // QString substitutueSearchText(const QString &searchText, const QString &requestURL) const;
     QByteArray m_jobData;
     QMap<QString, OpenSearchEngine*> m_enginesMap;
Comment 6 Andrius Štikonas 2010-10-03 11:13:49 UTC
It works for me now.
Comment 7 fuggum 2010-10-04 10:28:04 UTC
works for me now, also.
rekonq_0.6.0-0ubuntu2_amd64.deb\
thanx :)
cheers