patch for KABC file plugin
carpdjih at mailbox.tu-berlin.de
Thu Feb 16 16:49:01 GMT 2006
while trying to find the cause for http://bugs.kde.org/show_bug.cgi?id=87163
"kaddressbook empties resource on some conditions (data lost)", I found
several problems in the KABC file plugin.
From looking at my log files, the problem in #87163 seems to be that KDirWatch
notifies a change in the addressbook file (ResourceFile::fileChanged()),
which causes the addresses to be cleared and asyncLoad() to be called. This
loading apparently never succeeds during KDE shutdown, so the resource
remains empty. A little later, the resource is saved again and the file is
A fix for this is clear()ing the resource only right before loading the file,
after all async IO has succeeded (clearAndLoad() in the patch). Additionally
this prevents successive load() or loadAsync() calls from accumulating
address entries (unless there are measures against this somewhere else). For
extra safety, one could make a copy of mAddrMap before clear()ing and
restoring it if format->load() doesn't succeed. Should we do this?
- "stale temp file detected"
After downloading with KIO, the KTempFile was not deleted, leading to the
above debug message upon the next asyncLoad().
- always use KSaveFile for saving
- make sure to properly stop and start KDirWatch in all cases
- Synchronization issues:
Tickets are used to synchronize the saving of files. This should work with
synchronous loading, but with async saving the ticket is released as soon as
asyncSave returns. (See AddressBook::asyncSave()).
I have added a check to abort saving, if it's still in progress, but this
obviously only helps this current ResourceFile instance, so a better solution
is needed. Don't know who's affected by this.
Calling load() before loadAsync() has finished might also lead to troubles, so
I added a guard for this.
Attached is a patch for the 3.5 branch. I'll also fix the net plugin later,
which has similar issues.
-------------- next part --------------
A non-text attachment was scrubbed...
Size: 5641 bytes
Desc: not available
More information about the kde-core-devel