[Qt-interest] Bug in QNetworkReply abort
Stanislav Kolar
skolar at kerio.com
Tue Jul 27 15:05:23 CEST 2010
Thank you for all responses - the problem was in my code ;-) I called qApp->processEvents() in the downloadProgress slot, which isn't probably acceptable..
Stanislav Kolar
Research & Development
.................................................................
Kerio Technologies
Anglicke nabrezi 1, 301 49 Plzen
Czech Republic
tel. 377 338 901, fax 377 338 921
www.kerio.com
.................................................................
Connect. Communicate. Collaborate. Securely.
-----Original Message-----
From: Mandeep Sandhu [mailto:mandeepsandhu.chd at gmail.com]
Sent: Thursday, July 22, 2010 6:39 AM
To: Stanislav Kolar
Cc: qt-interest at trolltech.com
Subject: Re: [Qt-interest] Bug in QNetworkReply abort
I've been using QNAM and co. for a while now. I've not experienced any
bugs yet (though I've not used the post method yet).
Are you certain you have a valid QNetworkReply pointer when you are
calling abort (maybe you have called delete/deleteLater() in the reply
processing slot)?
I had a similar problem where my reply pointer was not valid. I found
the problem when I used QPointer<QNetworkReply> for storing the reply
pointer and checking if it was null or not before accessing any fxn.
Can you check if you have a valid pointer when calling abort.
HTH,
-mandeep
On Wed, Jul 21, 2010 at 8:16 PM, Stanislav Kolar <skolar at kerio.com> wrote:
> Hi all,
>
> there is probably a bug in QNetworkAccessManager.
> If I call QNetworkReply::abort(), the application crashes. The reply object is result of QNetworkAccessManager::post method.
>
> The call stack is
> ================================
> QtCored4.dll!QScopedPointer<QObjectData,QScopedPointerDeleter<QObjectData> >::data() Line 135 + 0x3 bytes C++
> QtCored4.dll!qGetPtrHelper<QScopedPointer<QObjectData,QScopedPointerDeleter<QObjectData> > >(const QScopedPointer<QObjectData,QScopedPointerDeleter<QObjectData> > & p={...}) Line 2314 + 0xb bytes C++
> QtCored4.dll!QObject::d_func() Line 125 + 0x13 bytes C++
> QtCored4.dll!QMetaObject::activate(QObject * sender=0x00000000, const QMetaObject * m=0x6415efac, int local_signal_index=0x00000007, void * * argv=0x0012d530) Line 3210 + 0xc bytes C++
> QtNetworkd4.dll!QHttpNetworkReply::dataSendProgress(__int64 _t1=0x0000000001014000, __int64 _t2=0x000000000134fac9) Line 146 + 0x15 bytes C++
> QtNetworkd4.dll!QHttpNetworkConnectionChannel::sendRequest() Line 268 C++
> QtNetworkd4.dll!QHttpNetworkConnectionChannel::_q_bytesWritten(__int64 bytes=0x0000000000008000) Line 877 C++
> QtNetworkd4.dll!QHttpNetworkConnectionChannel::qt_metacall(QMetaObject::Call _c=InvokeMetaMethod, int _id=0x00000001, void * * _a=0x0012d7e4) Line 91 + 0x15 bytes C++
> QtCored4.dll!QMetaObject::metacall(QObject * object=0x015554ac, QMetaObject::Call cl=InvokeMetaMethod, int idx=0x00000005, void * * argv=0x0012d7e4) Line 238 C++
> QtCored4.dll!QMetaObject::activate(QObject * sender=0x0151e310, const QMetaObject * m=0x67304f48, int local_signal_index=0x00000001, void * * argv=0x0012d7e4) Line 3287 + 0x27 bytes C++
> QtCored4.dll!QIODevice::bytesWritten(__int64 _t1=0x0000000000008000) Line 98 + 0x14 bytes C++
> QtNetworkd4.dll!QAbstractSocketPrivate::flush() Line 771 C++
> QtNetworkd4.dll!QAbstractSocketPrivate::canWriteNotification() Line 685 C++
> QtNetworkd4.dll!QAbstractSocketPrivate::writeNotification() Line 78 + 0x15 bytes C++
> QtNetworkd4.dll!QAbstractSocketEngine::writeNotification() Line 161 C++
> QtNetworkd4.dll!QWriteNotifier::event(QEvent * e=0x0012dd78) Line 1130 C++
> QtGuid4.dll!QApplicationPrivate::notify_helper(QObject * receiver=0x015877c8, QEvent * e=0x0012dd78) Line 4302 + 0x11 bytes C++
> QtGuid4.dll!QApplication::notify(QObject * receiver=0x015877c8, QEvent * e=0x0012dd78) Line 3706 + 0x10 bytes C++
> QtCored4.dll!QCoreApplication::notifyInternal(QObject * receiver=0x015877c8, QEvent * event=0x0012dd78) Line 726 + 0x15 bytes C++
> QtCored4.dll!QCoreApplication::sendEvent(QObject * receiver=0x015877c8, QEvent * event=0x0012dd78) Line 215 + 0x39 bytes C++
> QtCored4.dll!qt_internal_proc(HWND__ * hwnd=0x004b028c, unsigned int message=0x00000400, unsigned int wp=0x0000015c, long lp=0x00000002) Line 478 + 0xf bytes C++
> user32.dll!_InternalCallWinProc at 20() + 0x28 bytes
> user32.dll!_UserCallWinProcCheckWow at 32() + 0xb7 bytes
> user32.dll!_DispatchMessageWorker at 8() + 0xdc bytes
> user32.dll!_DispatchMessageW at 4() + 0xf bytes
> QtCored4.dll!QEventDispatcherWin32::processEvents(QFlags<enum QEventLoop::ProcessEventsFlag> flags={...}) Line 781 C++
> QtGuid4.dll!QGuiEventDispatcherWin32::processEvents(QFlags<enum QEventLoop::ProcessEventsFlag> flags={...}) Line 1145 + 0x15 bytes C++
> QtCored4.dll!QEventLoop::processEvents(QFlags<enum QEventLoop::ProcessEventsFlag> flags={...}) Line 150 C++
> QtCored4.dll!QEventLoop::exec(QFlags<enum QEventLoop::ProcessEventsFlag> flags={...}) Line 201 + 0x2d bytes C++
> QtCored4.dll!QCoreApplication::exec() Line 1003 + 0x15 bytes C++
> QtGuid4.dll!QApplication::exec() Line 3582 C++
>
> It seems that the loop in
>
> bool QHttpNetworkConnectionChannel::sendRequest()
>
> tries to
>
> emit reply->dataSendProgress(written, bytesTotal);
>
> even though QHttpNetworkReply *reply is already destroyed - it is deleted by destructor of QNetworkAccessHttpBacked - the QHttpNetworkReply object is its children:
>
> QtNetworkd4.dll!QHttpNetworkReply::~QHttpNetworkReply() Line 64 C++
> QtNetworkd4.dll!QHttpNetworkReply::`scalar deleting destructor'() + 0xf bytes C++
> QtCored4.dll!QObjectPrivate::deleteChildren() Line 1978 + 0x24 bytes C++
> QtCored4.dll!QObject::~QObject() Line 977 C++
> QtNetworkd4.dll!QNetworkAccessBackend::~QNetworkAccessBackend() Line 157 + 0x9 bytes C++
> QtNetworkd4.dll!QNetworkAccessHttpBackend::~QNetworkAccessHttpBackend() Line 309 + 0x3d bytes C++
> QtNetworkd4.dll!QNetworkAccessHttpBackend::`scalar deleting destructor'() + 0xf bytes C++
> QtCored4.dll!qDeleteInEventHandler(QObject * o=0x01587a08) Line 3993 + 0x21 bytes C++
> QtCored4.dll!QObject::event(QEvent * e=0x01ffa7b8) Line 1223 + 0xc bytes C++
> QtGuid4.dll!QApplicationPrivate::notify_helper(QObject * receiver=0x01587a08, QEvent * e=0x01ffa7b8) Line 4302 + 0x11 bytes C++
> QtGuid4.dll!QApplication::notify(QObject * receiver=0x01587a08, QEvent * e=0x01ffa7b8) Line 3706 + 0x10 bytes C++
> QtCored4.dll!QCoreApplication::notifyInternal(QObject * receiver=0x01587a08, QEvent * event=0x01ffa7b8) Line 726 + 0x15 bytes C++
> ..
>
>
> Did I something wrong ? Is it a known bug ? Or have somebody some advise/question ?
>
> Stanislav Kolar
> Research & Development
> .................................................................
> Kerio Technologies
> Anglicke nabrezi 1, 301 49 Plzen
> Czech Republic
> tel. 377 338 901, fax 377 338 921
> www.kerio.com
> .................................................................
> Connect. Communicate. Collaborate. Securely.
>
>
>
>
> _______________________________________________
> Qt-interest mailing list
> Qt-interest at trolltech.com
> http://lists.trolltech.com/mailman/listinfo/qt-interest
>
More information about the Qt-interest-old
mailing list