From: David Faure Date: Tue, 02 Oct 2012 18:27:03 +0000 Subject: Fix crash when watchUserLimitReached() leads to deleting the KInotify instance X-Git-Url: http://quickgit.kde.org/?p=nepomuk-core.git&a=commitdiff&h=804e54f83ade8a377d392d350981ead07f60a9d3 --- Fix crash when watchUserLimitReached() leads to deleting the KInotify instance ... which emitted the signal. So don't use a direct delete. BUG: 307388 FIXED-IN: 4.9.3 --- --- a/services/filewatch/nepomukfilewatch.cpp +++ b/services/filewatch/nepomukfilewatch.cpp @@ -323,7 +323,8 @@ void Nepomuk2::FileWatch::slotInotifyWatchUserLimitReached() { // we do it the brutal way for now hoping with new kernels and defaults this will never happen - delete m_dirWatch; + // Delete the KInotify and switch to KDirNotify dbus signals + m_dirWatch->deleteLater(); m_dirWatch = 0; connectToKDirWatch(); } From: Dan Vrátil Date: Wed, 03 Oct 2012 11:27:22 +0000 Subject: Add null-crash guards for m_dirWatch to FileWatch X-Git-Url: http://quickgit.kde.org/?p=nepomuk-core.git&a=commitdiff&h=32b44881dda4f243932c59c11bf39c91f30c224b --- Add null-crash guards for m_dirWatch to FileWatch BUG: 307388 --- --- a/services/filewatch/nepomukfilewatch.cpp +++ b/services/filewatch/nepomukfilewatch.cpp @@ -114,6 +114,7 @@ Nepomuk2::FileWatch::FileWatch( QObject* parent, const QList& ) : Service( parent ) + , m_dirWatch( 0 ) { // Create the configuration instance singleton (for thread-safety) // ============================================================== @@ -324,8 +325,10 @@ { // we do it the brutal way for now hoping with new kernels and defaults this will never happen // Delete the KInotify and switch to KDirNotify dbus signals - m_dirWatch->deleteLater(); - m_dirWatch = 0; + if( m_dirWatch ) { + m_dirWatch->deleteLater(); + m_dirWatch = 0; + } connectToKDirWatch(); } #endif @@ -413,7 +416,9 @@ void Nepomuk2::FileWatch::slotDeviceTeardownRequested(const Nepomuk2::RemovableMediaCache::Entry* entry ) { #ifdef BUILD_KINOTIFY - m_dirWatch->removeWatch( entry->mountPath() ); + if( m_dirWatch ) { + m_dirWatch->removeWatch( entry->mountPath() ); + } #endif }