Application: ktorrent (4.0.3) KDE Platform Version: 4.5.1 (KDE 4.5.1) Qt Version: 4.7.0 Operating System: Linux 2.6.32-25-generic x86_64 Distribution: Linux Mint 9 Isadora -- Information about the crash: Stopping the download of one file (interrupt). No other downloads. The crash can be reproduced every time. -- Backtrace: Application: KTorrent (ktorrent), signal: Segmentation fault [Current thread is 1 (Thread 0x7f8f18fe6760 (LWP 10068))] Thread 11 (Thread 0x7f8efffff710 (LWP 10070)): #0 0x00007fffa4f46904 in clock_gettime () #1 0x00007f8f0fc0109f in *__GI_clock_gettime (clock_id=1, tp=0x7f8effffea90) at ../sysdeps/unix/clock_gettime.c:100 #2 0x00007f8f1654a4af in do_gettime () at tools/qelapsedtimer_unix.cpp:105 #3 qt_gettime () at tools/qelapsedtimer_unix.cpp:119 #4 0x00007f8f166161ed in QTimerInfoList::updateCurrentTime (this=0x1) at kernel/qeventdispatcher_unix.cpp:339 #5 0x00007f8f1661746c in QTimerInfoList::activateTimers (this=0x24bdb50) at kernel/qeventdispatcher_unix.cpp:561 #6 0x00007f8f166144b8 in timerSourceDispatch (source=<value optimized out>) at kernel/qeventdispatcher_glib.cpp:184 #7 idleTimerSourceDispatch (source=<value optimized out>) at kernel/qeventdispatcher_glib.cpp:231 #8 0x00007f8f0f95d8c2 in g_main_context_dispatch () from /lib/libglib-2.0.so.0 #9 0x00007f8f0f961748 in ?? () from /lib/libglib-2.0.so.0 #10 0x00007f8f0f9618fc in g_main_context_iteration () from /lib/libglib-2.0.so.0 #11 0x00007f8f16614183 in QEventDispatcherGlib::processEvents (this=0x23c38c0, flags=<value optimized out>) at kernel/qeventdispatcher_glib.cpp:415 #12 0x00007f8f165e6dd2 in QEventLoop::processEvents (this=<value optimized out>, flags=) at kernel/qeventloop.cpp:149 #13 0x00007f8f165e71bc in QEventLoop::exec (this=0x7f8effffedb0, flags=) at kernel/qeventloop.cpp:201 #14 0x00007f8f164f236d in QThread::exec (this=<value optimized out>) at thread/qthread.cpp:490 #15 0x00007f8f18b9891e in utp::UTPServerThread::run (this=0x24c24c0) at ../../src/utp/utpserverthread.cpp:44 #16 0x00007f8f164f52ee in QThreadPrivate::start (arg=0x24c24c0) at thread/qthread_unix.cpp:266 #17 0x00007f8f162639ca in start_thread (arg=<value optimized out>) at pthread_create.c:300 #18 0x00007f8f14b2170d in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:112 #19 0x0000000000000000 in ?? () Thread 10 (Thread 0x7f8eff7fe710 (LWP 10071)): #0 0x00007f8f14b19ff3 in select () at ../sysdeps/unix/syscall-template.S:82 #1 0x00007f8f18b5ffa2 in dht::RPCServerThread::run (this=0x252c2f0) at ../../src/dht/rpcserver.cpp:107 #2 0x00007f8f164f52ee in QThreadPrivate::start (arg=0x252c2f0) at thread/qthread_unix.cpp:266 #3 0x00007f8f162639ca in start_thread (arg=<value optimized out>) at pthread_create.c:300 #4 0x00007f8f14b2170d in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:112 #5 0x0000000000000000 in ?? () Thread 9 (Thread 0x7f8efeffd710 (LWP 10079)): #0 pthread_cond_timedwait@@GLIBC_2.3.2 () at ../nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_timedwait.S:211 #1 0x00007f8ef7839081 in ?? () from /usr/lib/libxine.so.1 #2 0x00007f8f162639ca in start_thread (arg=<value optimized out>) at pthread_create.c:300 #3 0x00007f8f14b2170d in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:112 #4 0x0000000000000000 in ?? () Thread 8 (Thread 0x7f8efe7fc710 (LWP 10080)): #0 0x00007fffa4f46904 in clock_gettime () #1 0x00007f8f0fc0109f in *__GI_clock_gettime (clock_id=1, tp=0x7f8efe7fbac0) at ../sysdeps/unix/clock_gettime.c:100 #2 0x00007f8f1654a4af in do_gettime () at tools/qelapsedtimer_unix.cpp:105 #3 qt_gettime () at tools/qelapsedtimer_unix.cpp:119 #4 0x00007f8f166161ed in QTimerInfoList::updateCurrentTime (this=0x1) at kernel/qeventdispatcher_unix.cpp:339 #5 0x00007f8f16616215 in QTimerInfoList::timerWait (this=0x1, tm=...) at kernel/qeventdispatcher_unix.cpp:442 #6 0x00007f8f166143cd in timerSourcePrepareHelper (src=<value optimized out>, timeout=0x7f8efe7fbbfc) at kernel/qeventdispatcher_glib.cpp:136 #7 0x00007f8f16614475 in timerSourcePrepare (source=0x1, timeout=0x7f8efe7fbac0) at kernel/qeventdispatcher_glib.cpp:169 #8 0x00007f8f0f960eb1 in g_main_context_prepare () from /lib/libglib-2.0.so.0 #9 0x00007f8f0f961318 in ?? () from /lib/libglib-2.0.so.0 #10 0x00007f8f0f9618fc in g_main_context_iteration () from /lib/libglib-2.0.so.0 #11 0x00007f8f166141d6 in QEventDispatcherGlib::processEvents (this=0x286f340, flags=<value optimized out>) at kernel/qeventdispatcher_glib.cpp:417 #12 0x00007f8f165e6dd2 in QEventLoop::processEvents (this=<value optimized out>, flags=) at kernel/qeventloop.cpp:149 #13 0x00007f8f165e71bc in QEventLoop::exec (this=0x7f8efe7fbd90, flags=) at kernel/qeventloop.cpp:201 #14 0x00007f8f164f236d in QThread::exec (this=<value optimized out>) at thread/qthread.cpp:490 #15 0x00007f8ef7a952b0 in ?? () from /usr/lib/qt4/plugins/phonon_backend/phonon_xine.so #16 0x00007f8f164f52ee in QThreadPrivate::start (arg=0x27e2400) at thread/qthread_unix.cpp:266 #17 0x00007f8f162639ca in start_thread (arg=<value optimized out>) at pthread_create.c:300 #18 0x00007f8f14b2170d in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:112 #19 0x0000000000000000 in ?? () Thread 7 (Thread 0x7f8efdffb710 (LWP 10081)): #0 0x00007f8f14b14f93 in *__GI___poll (fds=<value optimized out>, nfds=<value optimized out>, timeout=333) at ../sysdeps/unix/sysv/linux/poll.c:87 #1 0x00007f8ef252d915 in ?? () from /usr/lib/xine/plugins/1.27/xineplug_ao_out_alsa.so #2 0x00007f8f162639ca in start_thread (arg=<value optimized out>) at pthread_create.c:300 #3 0x00007f8f14b2170d in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:112 #4 0x0000000000000000 in ?? () Thread 6 (Thread 0x7f8f04f66710 (LWP 10082)): #0 pthread_cond_wait@@GLIBC_2.3.2 () at ../nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S:162 #1 0x00007f8ef7849e23 in ?? () from /usr/lib/libxine.so.1 #2 0x00007f8f162639ca in start_thread (arg=<value optimized out>) at pthread_create.c:300 #3 0x00007f8f14b2170d in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:112 #4 0x0000000000000000 in ?? () Thread 5 (Thread 0x7f8eea9b2710 (LWP 10100)): #0 0x00007fffa4f46904 in clock_gettime () #1 0x00007f8f0fc0109f in *__GI_clock_gettime (clock_id=1, tp=0x7f8eea9b1ae0) at ../sysdeps/unix/clock_gettime.c:100 #2 0x00007f8f1654a4af in do_gettime () at tools/qelapsedtimer_unix.cpp:105 #3 qt_gettime () at tools/qelapsedtimer_unix.cpp:119 #4 0x00007f8f166161ed in QTimerInfoList::updateCurrentTime (this=0x1) at kernel/qeventdispatcher_unix.cpp:339 #5 0x00007f8f16616215 in QTimerInfoList::timerWait (this=0x1, tm=...) at kernel/qeventdispatcher_unix.cpp:442 #6 0x00007f8f166143cd in timerSourcePrepareHelper (src=<value optimized out>, timeout=0x7f8eea9b1c1c) at kernel/qeventdispatcher_glib.cpp:136 #7 0x00007f8f16614475 in timerSourcePrepare (source=0x1, timeout=0x7f8eea9b1ae0) at kernel/qeventdispatcher_glib.cpp:169 #8 0x00007f8f0f960eb1 in g_main_context_prepare () from /lib/libglib-2.0.so.0 #9 0x00007f8f0f961318 in ?? () from /lib/libglib-2.0.so.0 #10 0x00007f8f0f9618fc in g_main_context_iteration () from /lib/libglib-2.0.so.0 #11 0x00007f8f166141d6 in QEventDispatcherGlib::processEvents (this=0x24a97e0, flags=<value optimized out>) at kernel/qeventdispatcher_glib.cpp:417 #12 0x00007f8f165e6dd2 in QEventLoop::processEvents (this=<value optimized out>, flags=) at kernel/qeventloop.cpp:149 #13 0x00007f8f165e71bc in QEventLoop::exec (this=0x7f8eea9b1db0, flags=) at kernel/qeventloop.cpp:201 #14 0x00007f8f164f236d in QThread::exec (this=<value optimized out>) at thread/qthread.cpp:490 #15 0x00007f8f165c6b48 in QInotifyFileSystemWatcherEngine::run (this=0x2dd0720) at io/qfilesystemwatcher_inotify.cpp:248 #16 0x00007f8f164f52ee in QThreadPrivate::start (arg=0x2dd0720) at thread/qthread_unix.cpp:266 #17 0x00007f8f162639ca in start_thread (arg=<value optimized out>) at pthread_create.c:300 #18 0x00007f8f14b2170d in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:112 #19 0x0000000000000000 in ?? () Thread 4 (Thread 0x7f8ee786c710 (LWP 10152)): #0 pthread_cond_timedwait@@GLIBC_2.3.2 () at ../nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_timedwait.S:211 #1 0x00007f8f164f48b5 in thread_sleep (ti=0x7f8ee786bda0) at thread/qthread_unix.cpp:416 #2 0x00007f8f164f4a20 in QThread::msleep (msecs=<value optimized out>) at thread/qthread_unix.cpp:442 #3 0x00007f8f18afe24d in net::DownloadThread::update (this=0x2383ab0) at ../../src/net/downloadthread.cpp:91 #4 0x00007f8f18afeb39 in net::NetworkThread::run (this=0x2383ab0) at ../../src/net/networkthread.cpp:48 #5 0x00007f8f164f52ee in QThreadPrivate::start (arg=0x2383ab0) at thread/qthread_unix.cpp:266 #6 0x00007f8f162639ca in start_thread (arg=<value optimized out>) at pthread_create.c:300 #7 0x00007f8f14b2170d in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:112 #8 0x0000000000000000 in ?? () Thread 3 (Thread 0x7f8ee706b710 (LWP 10153)): #0 pthread_cond_timedwait@@GLIBC_2.3.2 () at ../nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_timedwait.S:211 #1 0x00007f8f164f48b5 in thread_sleep (ti=0x7f8ee706ada0) at thread/qthread_unix.cpp:416 #2 0x00007f8f164f4a20 in QThread::msleep (msecs=<value optimized out>) at thread/qthread_unix.cpp:442 #3 0x00007f8f18afd8fd in net::UploadThread::update (this=0x2384120) at ../../src/net/uploadthread.cpp:89 #4 0x00007f8f18afeb39 in net::NetworkThread::run (this=0x2384120) at ../../src/net/networkthread.cpp:48 #5 0x00007f8f164f52ee in QThreadPrivate::start (arg=0x2384120) at thread/qthread_unix.cpp:266 #6 0x00007f8f162639ca in start_thread (arg=<value optimized out>) at pthread_create.c:300 #7 0x00007f8f14b2170d in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:112 #8 0x0000000000000000 in ?? () Thread 2 (Thread 0x7f8ee5868710 (LWP 10154)): #0 pthread_cond_wait@@GLIBC_2.3.2 () at ../nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S:162 #1 0x00007f8f164f5eab in QWaitConditionPrivate::wait (this=<value optimized out>, mutex=0x24e16e0, time=18446744073709551615) at thread/qwaitcondition_unix.cpp:88 #2 QWaitCondition::wait (this=<value optimized out>, mutex=0x24e16e0, time=18446744073709551615) at thread/qwaitcondition_unix.cpp:160 #3 0x00007f8f18b01b42 in net::ReverseResolverThread::run (this=0x24e16d0) at ../../src/net/reverseresolver.cpp:123 #4 0x00007f8f164f52ee in QThreadPrivate::start (arg=0x24e16d0) at thread/qthread_unix.cpp:266 #5 0x00007f8f162639ca in start_thread (arg=<value optimized out>) at pthread_create.c:300 #6 0x00007f8f14b2170d in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:112 #7 0x0000000000000000 in ?? () Thread 1 (Thread 0x7f8f18fe6760 (LWP 10068)): [KCrash Handler] #6 0x00000000006d7e60 in QObject::staticMetaObject () #7 0x00007f8f18b12b45 in bt::PeerManager::stop (this=0x26126f0) at ../../src/peer/peermanager.cpp:550 #8 0x00007f8f18b4481f in bt::TorrentControl::stop (this=0x25b3d00, wjob=0x0) at ../../src/torrent/torrentcontrol.cpp:486 #9 0x00007f8f188410fa in kt::QueueManager::stopSafely (this=<value optimized out>, tc=0x25b3d00, wjob=0x2cfda10) at ../../libktcore/torrent/queuemanager.cpp:752 #10 0x00007f8f18845432 in kt::QueueManager::stop (this=0x7f8f000009f0, todo=<value optimized out>) at ../../libktcore/torrent/queuemanager.cpp:222 #11 0x000000000048aa49 in kt::View::stopTorrents (this=0x2cbc9a0) at ../../ktorrent/view/view.cpp:195 #12 0x00000000004960b4 in kt::ViewManager::qt_metacall (this=0x24e99b0, _c=QMetaObject::InvokeMetaMethod, _id=47176208, _a=0x7fffa4f3d840) at ./viewmanager.moc:131 #13 0x00007f8f165ffda7 in QMetaObject::activate (sender=0x24eaf90, m=<value optimized out>, local_signal_index=<value optimized out>, argv=0x2cfda00) at kernel/qobject.cpp:3280 #14 0x00007f8f1572f002 in QAction::triggered (this=0x3056d30, _t1=false) at .moc/release-shared/moc_qaction.cpp:263 #15 0x00007f8f157306fb in QAction::activate (this=0x24eaf90, event=<value optimized out>) at kernel/qaction.cpp:1256 #16 0x00007f8f15b0b2da in QAbstractButtonPrivate::click (this=0x25e83e0) at widgets/qabstractbutton.cpp:528 #17 0x00007f8f15b0b58c in QAbstractButton::mouseReleaseEvent (this=0x25ccf90, e=0x7fffa4f3e180) at widgets/qabstractbutton.cpp:1121 #18 0x00007f8f15bda4fa in QToolButton::mouseReleaseEvent (this=0x3056d30, e=0x0) at widgets/qtoolbutton.cpp:721 #19 0x00007f8f1578c48e in QWidget::event (this=0x25ccf90, event=0x7fffa4f3e180) at kernel/qwidget.cpp:8187 #20 0x00007f8f157366ec in QApplicationPrivate::notify_helper (this=0x23b0530, receiver=0x25ccf90, e=0x7fffa4f3e180) at kernel/qapplication.cpp:4396 #21 0x00007f8f1573c9fe in QApplication::notify (this=0x7fffa4f3ee60, receiver=0x25ccf90, e=0x7fffa4f3e180) at kernel/qapplication.cpp:3959 #22 0x0000000000439f0a in kt::App::notify (this=0x3056d30, receiver=0x0, event=0x2cfda10) at ../../ktorrent/app.cpp:97 #23 0x00007f8f165e80ac in QCoreApplication::notifyInternal (this=0x7fffa4f3ee60, receiver=0x25ccf90, event=0x7fffa4f3e180) at kernel/qcoreapplication.cpp:732 #24 0x00007f8f1573b4ae in QCoreApplication::sendEvent (receiver=0x25ccf90, event=0x7fffa4f3e180, alienWidget=0x25ccf90, nativeWidget=0x25ac490, buttonDown=<value optimized out>, lastMouseReceiver=<value optimized out>, spontaneous=true) at ../../include/QtCore/../../src/corelib/kernel/qcoreapplication.h:215 #25 QApplicationPrivate::sendMouseEvent (receiver=0x25ccf90, event=0x7fffa4f3e180, alienWidget=0x25ccf90, nativeWidget=0x25ac490, buttonDown=<value optimized out>, lastMouseReceiver=<value optimized out>, spontaneous=true) at kernel/qapplication.cpp:3058 #26 0x00007f8f157be4a5 in QETWidget::translateMouseEvent (this=0x25ac490, event=<value optimized out>) at kernel/qapplication_x11.cpp:4403 #27 0x00007f8f157bcddc in QApplication::x11ProcessEvent (this=<value optimized out>, event=0x7fffa4f3eaa0) at kernel/qapplication_x11.cpp:3536 #28 0x00007f8f157e9012 in x11EventSourceDispatch (s=0x23bf740, callback=<value optimized out>, user_data=<value optimized out>) at kernel/qguieventdispatcher_glib.cpp:146 #29 0x00007f8f0f95d8c2 in g_main_context_dispatch () from /lib/libglib-2.0.so.0 #30 0x00007f8f0f961748 in ?? () from /lib/libglib-2.0.so.0 #31 0x00007f8f0f9618fc in g_main_context_iteration () from /lib/libglib-2.0.so.0 #32 0x00007f8f16614183 in QEventDispatcherGlib::processEvents (this=0x2381aa0, flags=<value optimized out>) at kernel/qeventdispatcher_glib.cpp:415 #33 0x00007f8f157e897e in QGuiEventDispatcherGlib::processEvents (this=0x3056d30, flags=<value optimized out>) at kernel/qguieventdispatcher_glib.cpp:204 #34 0x00007f8f165e6dd2 in QEventLoop::processEvents (this=<value optimized out>, flags=) at kernel/qeventloop.cpp:149 #35 0x00007f8f165e71bc in QEventLoop::exec (this=0x7fffa4f3edd0, flags=) at kernel/qeventloop.cpp:201 #36 0x00007f8f165eb26b in QCoreApplication::exec () at kernel/qcoreapplication.cpp:1009 #37 0x000000000042909b in main (argc=<value optimized out>, argv=<value optimized out>) at ../../ktorrent/main.cpp:176 Reported using DrKonqi
Can you send me that torrent ?
Am Mittwoch 17 November 2010, um 18:07:01 schrieb Joris Guisson: > https://bugs.kde.org/show_bug.cgi?id=257126 > > --- Comment #1 from Joris Guisson <joris guisson gmail com> > 2010-11-17 18:06:59 --- Can you send me that torrent ? Sure :-) rgds Kawe
commit d0b766ea1e2c383ba70e57d6d498207f1115ff30 branch master Author: Joris <joris.guisson@gmail.com> Date: Tue Nov 30 20:19:06 2010 +0100 Use weak pointers in PeerConnector and Authenticate, should fix a crash. BUG: 257126 diff --git a/ChangeLog b/ChangeLog index 4b042a3..67132d7 100644 --- a/ChangeLog +++ b/ChangeLog @@ -21,6 +21,7 @@ Changes in 1.1: - Revamp PieceData management, fixes a crash (247984) - Add support for warning message parameter in tracker replies - Make sure connection setup slots are distributed fairly to avoid starvation +- Use weak pointers in PeerConnector and Authenticate (258207) Changes in 1.0.5: - Update PeerID client identifications diff --git a/src/peer/authenticate.cpp b/src/peer/authenticate.cpp index 1d8c6f3..75d6654 100644 --- a/src/peer/authenticate.cpp +++ b/src/peer/authenticate.cpp @@ -161,8 +161,9 @@ namespace bt sock.clear(); timer.stop(); - if (pcon) - pcon->authenticationFinished(this,succes); + PeerConnector* pc = pcon.data(); + if (pc) + pc->authenticationFinished(this,succes); } void Authenticate::handshakeReceived(bool full) diff --git a/src/peer/authenticate.h b/src/peer/authenticate.h index 68714a5..163d363 100644 --- a/src/peer/authenticate.h +++ b/src/peer/authenticate.h @@ -90,7 +90,7 @@ namespace bt QString host; Uint16 port; bool succes; - PeerConnector* pcon; + QWeakPointer<PeerConnector> pcon; net::Socks* socks; }; } diff --git a/src/peer/peerconnector.cpp b/src/peer/peerconnector.cpp index a82cd79..8f43f3d 100644 --- a/src/peer/peerconnector.cpp +++ b/src/peer/peerconnector.cpp @@ -60,13 +60,13 @@ namespace bt QString ip; Uint16 port; bool local; - PeerManager* pman; + QWeakPointer<PeerManager> pman; Authenticate* auth; bool stopping; bool do_not_start; }; - PeerConnector::PeerConnector(const QString & ip,Uint16 port,bool local,PeerManager* pman) + PeerConnector::PeerConnector(const QString& ip, Uint16 port, bool local, bt::PeerManager* pman) : QObject(pman), Resource(&half_open_connections,pman->getTorrent().getInfoHash().toString()), d(new Private(this,ip,port,local,pman)) @@ -87,15 +87,11 @@ namespace bt { half_open_connections.add(this); } - - void PeerConnector::doNotStart() - { - d->do_not_start = true; - } void PeerConnector::acquired() { - if (d->do_not_start) + PeerManager* pm = d->pman.data(); + if (!pm || !pm->isStarted()) return; bool encryption = ServerInterface::isEncryptionEnabled(); @@ -149,9 +145,13 @@ namespace bt if (stopping) return; + PeerManager* pm = pman.data(); + if (!pm) + return; + if (ok) { - pman->peerAuthenticated(auth,p,ok); + pm->peerAuthenticated(auth,p,ok); return; } @@ -177,15 +177,19 @@ namespace bt allowed.removeAll(m); if (allowed.isEmpty()) - pman->peerAuthenticated(auth,p,false); + pm->peerAuthenticated(auth,p,false); else start(allowed.front()); } void PeerConnector::Private::start(PeerConnector::Method method) { + PeerManager* pm = pman.data(); + if (!pm) + return; + current_method = method; - const Torrent & tor = pman->getTorrent(); + const Torrent & tor = pm->getTorrent(); TransportProtocol proto = (method == TCP_WITH_ENCRYPTION || method == TCP_WITHOUT_ENCRYPTION) ? TCP : UTP; if (method == TCP_WITH_ENCRYPTION || method == UTP_WITH_ENCRYPTION) auth = new mse::EncryptedAuthenticate(ip,port,proto,tor.getInfoHash(),tor.getPeerID(),p); diff --git a/src/peer/peerconnector.h b/src/peer/peerconnector.h index 2311c89..74239dd 100644 --- a/src/peer/peerconnector.h +++ b/src/peer/peerconnector.h @@ -60,17 +60,10 @@ namespace bt void stop(); /** - Called when all PeerConnector's of a torrent are being removed. - The PeerConnector should not attempt to start after this call. - */ - void doNotStart(); - - /** * Set the maximum number of active PeerConnectors allowed */ static void setMaxActive(Uint32 mc); - typedef QSharedPointer<PeerConnector> Ptr; private: virtual void acquired(); diff --git a/src/peer/peermanager.cpp b/src/peer/peermanager.cpp index 5d0aa19..e7eedce 100644 --- a/src/peer/peermanager.cpp +++ b/src/peer/peermanager.cpp @@ -429,15 +429,7 @@ namespace bt d->available_chunks.clear(); d->started = false; ServerInterface::removePeerManager(this); - - // Tell all PeerConnector's that they should not start from now on - foreach (PeerConnector* pcon,d->connectors) - pcon->doNotStart(); - - // Use copy so that connectors can be safely emptied - QSet<PeerConnector*> connectors_copy = d->connectors; - foreach (PeerConnector* pcon,connectors_copy) - pcon->stop(); + d->connectors.clear(); if (d->superseeder) { @@ -694,10 +686,8 @@ namespace bt delete superseeder; - // Tell all PeerConnector's that they should not start from now on - foreach (PeerConnector* pcon,connectors) - pcon->doNotStart(); - qDeleteAll(connectors); + started = false; + connectors.clear(); } void PeerManager::Private::update()
*** Bug 258295 has been marked as a duplicate of this bug. ***