Bug 361263 - Assert when deleting messages (ASSERT: "its.count() == 1")
Summary: Assert when deleting messages (ASSERT: "its.count() == 1")
Status: RESOLVED FIXED
Alias: None
Product: Akonadi
Classification: Frameworks and Libraries
Component: server (show other bugs)
Version: GIT (master)
Platform: Compiled Sources Linux
: NOR crash
Target Milestone: ---
Assignee: kdepim bugs
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2016-04-01 07:58 UTC by Christophe Marin
Modified: 2016-04-22 22:37 UTC (History)
1 user (show)

See Also:
Latest Commit:
Version Fixed In: 16.04.1


Attachments

Note You need to log in before you can comment on or make changes to this bug.
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