Bug 214346 - Crash when quitting with a connection attempt stuck on an invalid pre-shell command [Server::_send_internal, QIODevice::write]
Summary: Crash when quitting with a connection attempt stuck on an invalid pre-shell c...
Status: RESOLVED FIXED
Alias: None
Product: konversation
Classification: Applications
Component: general (show other bugs)
Version: unspecified
Platform: Unlisted Binaries Linux
: NOR crash
Target Milestone: ---
Assignee: Konversation Developers
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2009-11-13 04:38 UTC by João Eiras
Modified: 2009-11-21 02:27 UTC (History)
1 user (show)

See Also:
Latest Commit:
Version Fixed In:
Sentry Crash Report:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description João Eiras 2009-11-13 04:38:22 UTC
Application that crashed: konversation
Version of the application: 1.2
KDE Version: 4.3.2 (KDE 4.3.2)
Qt Version: 4.5.2
Operating System: Linux 2.6.31-14-generic i686
Distribution: Ubuntu 9.10

What I was doing when the application crashed:
Just pressed the x button on the title bar, which normally would minimize konversation to the system tray. I have two servers connected, one using ssl. Happens always.

 -- Backtrace:
Application: Konversation (konversation), signal: Segmentation fault
[Current thread is 1 (Thread 0xb78c4760 (LWP 10298))]

Thread 3 (Thread 0xb60f2b70 (LWP 10299)):
#0  0x003b9422 in __kernel_vsyscall ()
#1  0x00f6be15 in pthread_cond_wait@@GLIBC_2.3.2 () from /lib/tls/i686/cmov/libpthread.so.0
#2  0x06d6878d in pthread_cond_wait () from /lib/tls/i686/cmov/libc.so.6
#3  0x0556fe67 in QWaitConditionPrivate::wait (this=0x9031c30, mutex=0x9031c2c, time=4294967295) at thread/qwaitcondition_unix.cpp:87
#4  QWaitCondition::wait (this=0x9031c30, mutex=0x9031c2c, time=4294967295) at thread/qwaitcondition_unix.cpp:159
#5  0x00b72922 in QHostInfoAgent::run (this=0x9031c20) at kernel/qhostinfo.cpp:260
#6  0x0556ee32 in QThreadPrivate::start (arg=0x9031c20) at thread/qthread_unix.cpp:188
#7  0x00f6780e in start_thread () from /lib/tls/i686/cmov/libpthread.so.0
#8  0x06d5b7ee in clone () from /lib/tls/i686/cmov/libc.so.6

Thread 2 (Thread 0xb56ffb70 (LWP 10300)):
#0  0x003b9422 in __kernel_vsyscall ()
#1  0x06d54981 in select () from /lib/tls/i686/cmov/libc.so.6
#2  0x0563daf5 in QProcessManager::run (this=0x8c1cde0) at io/qprocess_unix.cpp:296
#3  0x0556ee32 in QThreadPrivate::start (arg=0x8c1cde0) at thread/qthread_unix.cpp:188
#4  0x00f6780e in start_thread () from /lib/tls/i686/cmov/libpthread.so.0
#5  0x06d5b7ee in clone () from /lib/tls/i686/cmov/libc.so.6

Thread 1 (Thread 0xb78c4760 (LWP 10298)):
[KCrash Handler]
#6  QIODevice::d_func (this=0x0, data=0x8d40a10 "QUIT :Konversation terminated!\n", maxSize=31) at ../../include/QtCore/../../src/corelib/io/qiodevice.h:167
#7  QIODevice::write (this=0x0, data=0x8d40a10 "QUIT :Konversation terminated!\n", maxSize=31) at io/qiodevice.cpp:1207
#8  0x080d3c93 in Server::_send_internal (this=0x8f64108, outputLine=...) at /build/buildd/konversation-1.2/src/irc/server.cpp:1207
#9  0x080d460f in Server::toServer (this=0x8f64108, s=..., q=0x8f6ba90) at /build/buildd/konversation-1.2/src/irc/server.cpp:1218
#10 0x08156493 in IRCQueue::doSend (this=0x8f6ba90) at /build/buildd/konversation-1.2/src/irc/ircqueue.cpp:161
#11 0x081564e2 in IRCQueue::sendNow (this=0x8f6ba90) at /build/buildd/konversation-1.2/src/irc/ircqueue.cpp:184
#12 0x080d1985 in Server::flushQueues (this=0x8f64108) at /build/buildd/konversation-1.2/src/irc/server.cpp:1290
#13 0x080e0634 in Server::quitServer (this=0x8f64108) at /build/buildd/konversation-1.2/src/irc/server.cpp:723
#14 0x080b3b13 in ConnectionManager::quitServers (this=0x8c15b58) at /build/buildd/konversation-1.2/src/connectionmanager.cpp:235
#15 0x08086238 in Application::prepareShutdown (this=0xbff209b0) at /build/buildd/konversation-1.2/src/application.cpp:249
#16 0x080a2500 in MainWindow::queryClose (this=0x8c26128) at /build/buildd/konversation-1.2/src/mainwindow.cpp:599
#17 0x012807e1 in KMainWindow::closeEvent (this=0x8c26128, e=0xbff1f0c8) at ../../kdeui/widgets/kmainwindow.cpp:588
#18 0x025d9a06 in QWidget::event (this=0x8c26128, event=0xbff1f0c8) at kernel/qwidget.cpp:7699
#19 0x029a7297 in QMainWindow::event (this=0x8c26128, event=0xbff1f0c8) at widgets/qmainwindow.cpp:1399
#20 0x0127ddc4 in KMainWindow::event (this=0x8c26128, ev=0xbff1f0c8) at ../../kdeui/widgets/kmainwindow.cpp:1094
#21 0x012c430f in KXmlGuiWindow::event (this=0x8c26128, ev=0xbff1f0c8) at ../../kdeui/xmlgui/kxmlguiwindow.cpp:131
#22 0x02584f54 in QApplicationPrivate::notify_helper (this=0x8c26868, receiver=0x8c26128, e=0xbff1f0c8) at kernel/qapplication.cpp:4056
#23 0x0258c5ca in QApplication::notify (this=0xbff209b0, receiver=0x8c26128, e=0xbff1f0c8) at kernel/qapplication.cpp:4021
#24 0x01197bfa in KApplication::notify (this=0xbff209b0, receiver=0x8c26128, event=0xbff1f0c8) at ../../kdeui/kernel/kapplication.cpp:302
#25 0x0565f6cb in QCoreApplication::notifyInternal (this=0xbff209b0, receiver=0x8c26128, event=0xbff1f0c8) at kernel/qcoreapplication.cpp:610
#26 0x025df5d6 in QCoreApplication::sendSpontaneousEvent (this=0x8d25a50, mode=QWidgetPrivate::CloseWithSpontaneousEvent) at ../../include/QtCore/../../src/corelib/kernel/qcoreapplication.h:216
#27 QWidgetPrivate::close_helper (this=0x8d25a50, mode=QWidgetPrivate::CloseWithSpontaneousEvent) at kernel/qwidget.cpp:7120
#28 0x025e75eb in QETWidget::translateCloseEvent (this=0xbff209b0, w=0x8c26128, event=0xbff2061c, passive_only=false) at kernel/qapplication_x11.cpp:5291
#29 QApplication::x11ClientMessage (this=0xbff209b0, w=0x8c26128, event=0xbff2061c, passive_only=false) at kernel/qapplication_x11.cpp:3086
#30 0x025f8ff9 in QApplication::x11ProcessEvent (this=0xbff209b0, event=0xbff2061c) at kernel/qapplication_x11.cpp:3682
#31 0x02626502 in x11EventSourceDispatch (s=0x8c29630, callback=0, user_data=0x0) at kernel/qguieventdispatcher_glib.cpp:146
#32 0x01d9ee78 in g_main_context_dispatch () from /lib/libglib-2.0.so.0
#33 0x01da2720 in ?? () from /lib/libglib-2.0.so.0
#34 0x01da2853 in g_main_context_iteration () from /lib/libglib-2.0.so.0
#35 0x0568a02c in QEventDispatcherGlib::processEvents (this=0x8bfca78, flags=...) at kernel/qeventdispatcher_glib.cpp:327
#36 0x02625be5 in QGuiEventDispatcherGlib::processEvents (this=0x8bfca78, flags=...) at kernel/qguieventdispatcher_glib.cpp:202
#37 0x0565dc79 in QEventLoop::processEvents (this=0xbff20914, flags=) at kernel/qeventloop.cpp:149
#38 0x0565e0ca in QEventLoop::exec (this=0xbff20914, flags=...) at kernel/qeventloop.cpp:201
#39 0x0566053f in QCoreApplication::exec () at kernel/qcoreapplication.cpp:888
#40 0x02584dd7 in QApplication::exec () at kernel/qapplication.cpp:3525
#41 0x080a4e09 in main (argc=5, argv=0xbff20dc4) at /build/buildd/konversation-1.2/src/main.cpp:98

Reported using DrKonqi
Comment 1 João Eiras 2009-11-21 01:26:41 UTC
To reproduce this, I had the following setup:
 - one account on some irc server
 - one identity bound to the irc server account
   * on the identity dialog I experimented placing a "/nickserv ghost nickname pw" command on the "pre-shell command" field in the advanced tab (don't ask me if that's right :p)
 - I tried to connect to the server but it failed, the connection just stalled, so I closed konversation then and it crashed
Comment 2 Eike Hein 2009-11-21 01:52:45 UTC
> on the identity dialog I experimented placing a "/nickserv ghost nickname
pw" command on the "pre-shell command" field in the advanced tab

The "Pre-shell command" field is for a system command, e.g. to establish an SSH tunnel before connecting. It's not an IRC command. To run IRC commands at connection time, see the "Commands" field in a network's settings. Specifically for nick ghosting, see also this Wiki page:

http://konversation.kde.org/wiki/Ghosttrick
Comment 3 Eike Hein 2009-11-21 01:55:08 UTC
Crash reproduced (thanks for the extra info!); expanding the bug title a bit.
Comment 4 Eike Hein 2009-11-21 02:27:58 UTC
SVN commit 1052196 by hein:

* Avoid possibly stalling the connection attempt when there's a
  problem executing the pre-shell command.
* Add a sanity check to Server::quitServer() so it won't crash
  when it's called without the socket having been initialized.
BUG:214346


 M  +5 -0      ChangeLog  
 M  +13 -1     src/irc/server.cpp  
 M  +1 -0      src/irc/server.h  


WebSVN link: http://websvn.kde.org/?view=rev&revision=1052196