diff options
author | Dmytro Poplavskiy <dmytro.poplavskiy@nokia.com> | 2011-08-25 12:31:00 +1000 |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2011-08-26 06:18:10 +0200 |
commit | ba62df130c91ba472cadb77bd596e19fd6ca5ccb (patch) | |
tree | 06c1ce65ae9666925afbbf6eeaafe216f04d2bd7 | |
parent | 5d71ee6abf9f3ab4ba88d929b61038f4f994125f (diff) | |
download | qtmultimedia-ba62df130c91ba472cadb77bd596e19fd6ca5ccb.tar.gz |
Fixed crash when QMediaObject is deleted before QMediaRecorder.
Change-Id: I8a1674b6f3d2b2c9ab888facff21f94af41b81de
Reviewed-on: http://codereview.qt.nokia.com/3544
Reviewed-by: Qt Sanity Bot <qt_sanity_bot@ovi.com>
Reviewed-by: Michael Goddard <michael.goddard@nokia.com>
-rw-r--r-- | src/multimediakit/qmediarecorder.cpp | 7 | ||||
-rw-r--r-- | tests/auto/qmediarecorder/tst_qmediarecorder.cpp | 20 | ||||
-rwxr-xr-x | tests/auto/qmediarecorder/tst_qmediarecorder.h | 1 |
3 files changed, 27 insertions, 1 deletions
diff --git a/src/multimediakit/qmediarecorder.cpp b/src/multimediakit/qmediarecorder.cpp index 1c08e28a5..2584359ef 100644 --- a/src/multimediakit/qmediarecorder.cpp +++ b/src/multimediakit/qmediarecorder.cpp @@ -168,7 +168,12 @@ void QMediaRecorderPrivate::_q_error(int error, const QString &errorString) void QMediaRecorderPrivate::_q_serviceDestroyed() { - q_func()->setMediaObject(0); + mediaObject = 0; + control = 0; + formatControl = 0; + audioControl = 0; + videoControl = 0; + metaDataControl = 0; } void QMediaRecorderPrivate::_q_notify() diff --git a/tests/auto/qmediarecorder/tst_qmediarecorder.cpp b/tests/auto/qmediarecorder/tst_qmediarecorder.cpp index 6805a2680..4f46f54f5 100644 --- a/tests/auto/qmediarecorder/tst_qmediarecorder.cpp +++ b/tests/auto/qmediarecorder/tst_qmediarecorder.cpp @@ -165,6 +165,26 @@ void tst_QMediaRecorder::testNullControls() QCOMPARE(spy.count(), 0); } +void tst_QMediaRecorder::testDeleteMediaObject() +{ + MockMediaRecorderControl *mock = new MockMediaRecorderControl(this); + MockMediaRecorderService *service = new MockMediaRecorderService(this, mock); + MockMediaObject *object = new MockMediaObject(this, service); + QMediaRecorder *capture = new QMediaRecorder(object); + + QVERIFY(capture->mediaObject() == object); + QVERIFY(capture->isAvailable()); + + delete object; + delete service; + delete mock; + + QVERIFY(capture->mediaObject() == 0); + QVERIFY(!capture->isAvailable()); + + delete capture; +} + void tst_QMediaRecorder::testError() { const QString errorString(QLatin1String("format error")); diff --git a/tests/auto/qmediarecorder/tst_qmediarecorder.h b/tests/auto/qmediarecorder/tst_qmediarecorder.h index 253a750e6..d0202a0c0 100755 --- a/tests/auto/qmediarecorder/tst_qmediarecorder.h +++ b/tests/auto/qmediarecorder/tst_qmediarecorder.h @@ -70,6 +70,7 @@ public slots: private slots: void testNullService(); void testNullControls(); + void testDeleteMediaObject(); void testError(); void testSink(); void testRecord(); |