[crash] QContactManager is accessed after deletion
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
qt-folks |
New
|
Undecided
|
Unassigned |
Bug Description
If QContactManager is freed before it completed doing whatever it does for initialization, it crashes. Valgrind output and sample application is attached.
-- Valgrind output
valgrind --track-origins=yes --num-callers=40 --db-attach=yes --read-var-info=yes ./contact_crash
==2464== Memcheck, a memory error detector
==2464== Copyright (C) 2002-2011, and GNU GPL'd, by Julian Seward et al.
==2464== Using Valgrind-3.7.0 and LibVEX; rerun with -h for copyright info
==2464== Command: ./contact_crash
==2464==
Creating a new folks engine
==2464== Invalid read of size 8
==2464== at 0x4E785AC: QtContacts:
==2464== by 0x95BB28A: Folks::
==2464== by 0x95BB075: Folks::
==2464== by 0x95C5666: Folks::
==2464== by 0x9834E92: g_cclosure_
==2464== by 0xA0E913F: g_closure_invoke (gclosure.c:777)
==2464== by 0xA0FA54F: signal_
==2464== by 0xA1024AE: g_signal_
==2464== by 0xA102B4F: g_signal_
==2464== by 0x9837136: _folks_
==2464== by 0x9839ACB: _folks_
==2464== by 0x9841632: g_cclosure_
==2464== by 0xA0E913F: g_closure_invoke (gclosure.c:777)
==2464== by 0xA0FA54F: signal_
==2464== by 0xA1024AE: g_signal_
==2464== by 0xA102B4F: g_signal_
==2464== by 0x98419E6: _folks_
==2464== by 0xA33F729: _tpf_persona_
==2464== by 0xA3420A1: _tpf_persona_
==2464== by 0xA5C4F56: g_simple_
==2464== by 0xA34BB46: connection_
==2464== by 0x9D8D7B1: ??? (in /usr/lib/
==2464== by 0x9E067CF: ??? (in /usr/lib/
==2464== by 0x6F37AB4: g_main_
==2464== by 0x6F37DE7: g_main_
==2464== by 0x6F37EA3: g_main_
==2464== by 0x52DD3CB: QEventDispatche
==2464== by 0x5294C4A: QEventLoop:
==2464== by 0x529802F: QCoreApplicatio
==2464== by 0x40125A: main (in /home/mgehre/
==2464== Address 0x8abd960 is 0 bytes inside a block of size 56 free'd
==2464== at 0x4C2A44B: operator delete(void*) (in /usr/lib/
==2464== by 0x95B7AD3: Folks::
==2464== by 0x4E76555: QtContacts:
==2464== by 0x40140F: Task::run() (in /home/mgehre/
==2464== by 0x52BB75D: QObject:
==2464== by 0x5295FCC: QCoreApplicatio
==2464== by 0x5295CCD: QCoreApplicatio
==2464== by 0x5297985: QCoreApplicatio
==2464== by 0x52DD242: ??? (in /usr/lib/
==2464== by 0x6F37AB4: g_main_
==2464== by 0x6F37DE7: g_main_
==2464== by 0x6F37EA3: g_main_
==2464== by 0x52DD3CB: QEventDispatche
==2464== by 0x5294C4A: QEventLoop:
==2464== by 0x529802F: QCoreApplicatio
==2464== by 0x40125A: main (in /home/mgehre/
---- main.cpp:
#include <QCoreApplication>
#include <QObject>
#include <QTimer>
#include <QContactManager>
#include "main.h"
void Task::run() {
QtContacts:
}
int main(int argc, char* argv[])
{
QCoreApplic
QTimer:
return a.exec();
}
---- main.h:
#include <QObject>
class Task : public QObject
{
Q_OBJECT
public slots:
void run();
};
--- contact_crash.pro
QT += contacts
SOURCES += main.cpp
HEADERS += main.h