diff --git a/src/multimediakit/qmediarecorder.cpp b/src/multimediakit/qmediarecorder.cpp index 1c08e28a..2584359e 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 6805a268..4f46f54f 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 253a750e..d0202a0c 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();