-
Notifications
You must be signed in to change notification settings - Fork 665
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Crash fixes and valgrind error fix #6563
Conversation
Client no longer crashes with the path - couple of concerns tho:
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Code looks good, see inline comment though
@@ -1226,7 +1227,10 @@ bool FolderStatusModel::SubFolderInfo::hasLabel() const | |||
void FolderStatusModel::SubFolderInfo::resetSubs(FolderStatusModel *model, QModelIndex index) | |||
{ | |||
_fetched = false; | |||
delete _fetchingJob; | |||
if (_fetchingJob) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Does this guarantee that no signals from the stale job will be emitted? Maybe disconnect them?
The problem here is that we were sometimes allocating the error_string with qstrdup, which need to be released with delete[] and not free(). Simplify the code by using QString instead. ``` ==7230== Mismatched free() / delete / delete [] ==7230== at 0x4C2E10B: free (vg_replace_malloc.c:530) ==7230== by 0x57C2321: csync_s::reinitialize() (csync.cpp:247) ==7230== by 0x548130F: OCC::SyncEngine::finalize(bool) (syncengine.cpp:1212) ==7230== by 0x5481223: OCC::SyncEngine::handleSyncError(csync_s*, char const*) (syncengine.cpp:746) ==7230== by 0x5483E78: OCC::SyncEngine::slotDiscoveryJobFinished(int) (syncengine.cpp:965) ==7230== by 0x5495E34: QtPrivate::FunctorCall<QtPrivate::IndexesList<0>, QtPrivate::List<int>, void, void (OCC::SyncEngine::*)(int)>::call(void (OCC::SyncEngine::*)(int), OCC::SyncEngine*, void**) (qobjectdefs_impl.h:134) ==7230== by 0x5495D92: void QtPrivate::FunctionPointer<void (OCC::SyncEngine::*)(int)>::call<QtPrivate::List<int>, void>(void (OCC::SyncEngine::*)(int), OCC::SyncEngine*, void**) (qobjectdefs_impl.h:167) ==7230== by 0x5495CB5: QtPrivate::QSlotObject<void (OCC::SyncEngine::*)(int), QtPrivate::List<int>, void>::impl(int, QtPrivate::QSlotObjectBase*, QObject*, void**, bool*) (qobjectdefs_impl.h:396) ==7230== by 0xA9BF2E1: QObject::event(QEvent*) (in /usr/lib/libQt5Core.so.5.11.0) ==7230== by 0x64BE983: QApplicationPrivate::notify_helper(QObject*, QEvent*) (in /usr/lib/libQt5Widgets.so.5.11.0) ==7230== by 0x64C625A: QApplication::notify(QObject*, QEvent*) (in /usr/lib/libQt5Widgets.so.5.11.0) ==7230== by 0xA994BC8: QCoreApplication::notifyInternal2(QObject*, QEvent*) (in /usr/lib/libQt5Core.so.5.11.0) ==7230== Address 0x225b2640 is 0 bytes inside a block of size 50 alloc'd ==7230== at 0x4C2DC6F: operator new[](unsigned long) (vg_replace_malloc.c:423) ==7230== by 0xA7E8FC8: qstrdup(char const*) (in /usr/lib/libQt5Core.so.5.11.0) ==7230== by 0x53F5750: OCC::DiscoveryJob::remote_vio_opendir_hook(char const*, void*) (discoveryphase.cpp:666) ==7230== by 0x57E1278: csync_vio_opendir(csync_s*, char const*) (csync_vio.cpp:39) ==7230== by 0x57D718F: csync_ftw(csync_s*, char const*, int (*)(csync_s*, std::unique_ptr<csync_file_stat_s, std::default_delete<csync_file_stat_s> >), unsigned int) (csync_update.cpp:674) ==7230== by 0x57C1B05: csync_update(csync_s*) (csync.cpp:109) ==7230== by 0x53F5BCC: OCC::DiscoveryJob::start() (discoveryphase.cpp:718) ==7230== by 0x54B8F74: OCC::DiscoveryJob::qt_static_metacall(QObject*, QMetaObject::Call, int, void**) (moc_discoveryphase.cpp:494) ==7230== by 0xA9BF2E1: QObject::event(QEvent*) (in /usr/lib/libQt5Core.so.5.11.0) ==7230== by 0x64BE983: QApplicationPrivate::notify_helper(QObject*, QEvent*) (in /usr/lib/libQt5Widgets.so.5.11.0) ==7230== by 0x64C625A: QApplication::notify(QObject*, QEvent*) (in /usr/lib/libQt5Widgets.so.5.11.0) ==7230== by 0xA994BC8: QCoreApplication::notifyInternal2(QObject*, QEvent*) (in /usr/lib/libQt5Core.so.5.11.0) ==7230== ```
…olders In FolderStatusModel::slotLscolFinishedWithError, the call to parentInfo->resetSubs deleted the 'job' and the reply 'r' which we accessed later to get the error code. Fix this problem twice by 1) Get the error code before caling resetSubs 2) in FolderStatusModel::SubFolderInfo::resetSubs, call deleteLater instead of delete Regression introduced in commit d69936e Issue #6562
(Added the disconnection before merging.) |
Fix the crash reported in #6562
Also cleanup another warning reported by valgrind.
See individual commit message for more info.