Bug 361263

Summary: Assert when deleting messages (ASSERT: "its.count() == 1")
Product: [Frameworks and Libraries] Akonadi Reporter: Christophe Marin <christophe>
Component: serverAssignee: kdepim bugs <kdepim-bugs>
Status: RESOLVED FIXED    
Severity: crash CC: dvratil
Priority: NOR    
Version: GIT (master)   
Target Milestone: ---   
Platform: Compiled Sources   
OS: Linux   
Latest Commit: Version Fixed In: 16.04.1

Description Christophe Marin 2016-04-01 07:58:07 UTC
I refreshed my master build yesterday and now I'm getting a reproducible crash when selecting several messages in kmail and delete them:

9:48:40 - kmail2(11691)/  : ASSERT: "its.count() == 1" in file /kde/src/5/akonadiserver/src/core/monitor_p.cpp, line 972

#7  0x00007f8ce8774f6e in qt_assert(char const*, char const*, int) (assertion=<optimized out>, file=<optimized out>, line=<optimized out>) at global/qglobal.cpp:2994
#8  0x00007f8ce1974c5b in Akonadi::MonitorPrivate::emitItemsNotification(Akonadi::Protocol::ChangeNotification const&, QVector<Akonadi::Item> const&, Akonadi::Collection const&, Akonadi::Collection const&) (this=0xce7200, msg_=..., items=..., collection=..., collectionDest=...) at /kde/src/5/akonadiserver/src/core/monitor_p.cpp:972
#9  0x00007f8ce19726f4 in Akonadi::MonitorPrivate::emitNotification(Akonadi::Protocol::ChangeNotification const&) (this=0xce7200, msg=...) at /kde/src/5/akonadiserver/src/core/monitor_p.cpp:587
#10 0x00007f8ce19227ea in Akonadi::ChangeRecorderPrivate::emitNotification(Akonadi::Protocol::ChangeNotification const&) (this=0xce7200, msg=...) at /kde/src/5/akonadiserver/src/core/changerecorder_p.cpp:499
#11 0x00007f8ce19739a9 in Akonadi::MonitorPrivate::flushPipeline() (this=0xce7200) at /kde/src/5/akonadiserver/src/core/monitor_p.cpp:802
#12 0x00007f8ce1973a08 in Akonadi::MonitorPrivate::dataAvailable() (this=0xce7200) at /kde/src/5/akonadiserver/src/core/monitor_p.cpp:811
#13 0x00007f8ce19666ee in Akonadi::Monitor::qt_static_metacall(QObject*, QMetaObject::Call, int, void**) (_o=0xbaab80, _c=QMetaObject::InvokeMetaMethod, _id=37, _a=0x7ffc29613350) at /kde/build/5/akonadiserver/src/core/moc_monitor.cpp:304
#14 0x00007f8ce8980961 in QMetaObject::activate(QObject*, int, int, void**) (sender=0xc16650, signalOffset=<optimized out>, local_signal_index=<optimized out>, argv=<optimized out>) at kernel/qobject.cpp:3730
#15 0x00007f8ce194254b in Akonadi::EntityCacheBase::dataAvailable() (this=0xc16650) at /kde/build/5/akonadiserver/src/core/moc_entitycache_p.cpp:145
#16 0x00007f8ce1918a45 in Akonadi::EntityListCache<Akonadi::Item, Akonadi::ItemFetchJob, Akonadi::ItemFetchScope>::processResult(KJob*) (this=0xc16650, job=0x3c8ed80) at /kde/src/5/akonadiserver/src/core/entitycache_p.h:499
#17 0x00007f8ce1942347 in Akonadi::EntityCacheBase::qt_static_metacall(QObject*, QMetaObject::Call, int, void**) (_o=0xc16650, _c=QMetaObject::InvokeMetaMethod, _id=1, _a=0x7ffc296136c0) at /kde/build/5/akonadiserver/src/core/moc_entitycache_p.cpp:80
#18 0x00007f8ce8980961 in QMetaObject::activate(QObject*, int, int, void**) (sender=0x3c8ed80, signalOffset=<optimized out>, local_signal_index=<optimized out>, argv=<optimized out>) at kernel/qobject.cpp:3730
#19 0x00007f8ce97ce7f5 in KJob::result(KJob*, KJob::QPrivateSignal) (this=0x3c8ed80, _t1=0x3c8ed80) at /kde/build/5/kcoreaddons/src/lib/moc_kjob.cpp:555
#20 0x00007f8ce97ccb8a in KJob::finishJob(bool) (this=0x3c8ed80, emitResult=true) at /kde/src/5/kcoreaddons/src/lib/jobs/kjob.cpp:109
#21 0x00007f8ce97cd273 in KJob::emitResult() (this=0x3c8ed80) at /kde/src/5/kcoreaddons/src/lib/jobs/kjob.cpp:293
#22 0x00007f8ce19e3c4b in Akonadi::JobPrivate::delayedEmitResult() (this=0x39f7220) at /kde/src/5/akonadiserver/src/core/jobs/job.cpp:153
#23 0x00007f8ce19e4d55 in Akonadi::Job::qt_static_metacall(QObject*, QMetaObject::Call, int, void**) (_o=0x3c8ed80, _c=QMetaObject::InvokeMetaMethod, _id=7, _a=0xba5b50) at /kde/build/5/akonadiserver/src/core/moc_job.cpp:108
#24 0x00007f8ce89814a1 in QObject::event(QEvent*) (this=0x3c8ed80, e=<optimized out>) at kernel/qobject.cpp:1256
Comment 1 Daniel Vrátil 2016-04-21 16:55:10 UTC
Do you actually delete, or do you just move to trash? If the latter, is your Trash folder owned by a different resource than the folder you are "deleting" from?
Comment 2 Christophe Marin 2016-04-21 20:55:46 UTC
The default action is to move to trash. The trash folder is owned by the default maildir resource.
Comment 3 Daniel Vrátil 2016-04-22 22:37:11 UTC
Git commit 0a90244dd6d399c55e2546d73f093692eb2520df by Daniel Vrátil.
Committed on 22/04/2016 at 22:28.
Pushed by dvratil into branch 'Applications/16.04'.

Fix assert for translated inter-resource remove of multiple items

The special handling to ensure translation of inter-resource move
did not consider moving of multiple items and the fact that when
it gets translated into Remove on source resource (or client) the
resource might not support batch removal.

Make sure that if split is needed we first perform split, then
translate to Remove/Add.
FIXED-IN: 16.04.1

M  +8    -1    src/core/monitor_p.cpp

http://commits.kde.org/akonadi/0a90244dd6d399c55e2546d73f093692eb2520df