| Summary: | [libzip] ZIP compression continues in background even when user cancels it | ||
|---|---|---|---|
| Product: | [Applications] ark | Reporter: | Patrick Silva <bugseforuns> |
| Component: | plugins | Assignee: | Ragnar Thomsen <rthomsen6> |
| Status: | RESOLVED FIXED | ||
| Severity: | normal | CC: | elvis.angelaccio |
| Priority: | NOR | ||
| Version First Reported In: | 17.12.1 | ||
| Target Milestone: | --- | ||
| Platform: | Arch Linux | ||
| OS: | Linux | ||
| Latest Commit: | https://commits.kde.org/ark/b1a251ebb96b86c8cba83343719fa8e67ab4ee9b | Version Fixed/Implemented In: | 18.03.80 |
| Sentry Crash Report: | |||
|
Description
Patrick Silva
2018-01-21 18:52:18 UTC
Confirmed, thanks for reporting. Git commit b1a251ebb96b86c8cba83343719fa8e67ab4ee9b by Elvis Angelaccio. Committed on 25/02/2018 at 22:41. Pushed by elvisangelaccio into branch 'master'. Rework kill logic The libzip plugin sometimes cannot react to `QThread::requestInterruption()` because there is a blocking `zip_close()` which writes to disk (e.g. with AddJobs). This means we have to manually abort the thread (by passing a timeout to `QThread::wait()` in `Job::doKill()`. We cannot do this uconditionally because we would end up with crashes in libarchive. Since the libarchive plugin is not affected by this problem, we rework the logic in `Job::doKill()` by assuming that the interface will tell us whether it needs to be brutally killed. This way we can distinguish between the libarchive and the libzip plugins (the ones that use a worker thread). The mutex in this patch is needed because in theory `m_operationMode` could be read and written by different threads at the same time, even though that's unlikely. FIXED-IN: 18.03.80 Task: T7824 M +4 -0 kerfuffle/archiveinterface.h M +13 -7 kerfuffle/jobs.cpp M +25 -7 plugins/libzipplugin/libzipplugin.cpp M +5 -0 plugins/libzipplugin/libzipplugin.h https://commits.kde.org/ark/b1a251ebb96b86c8cba83343719fa8e67ab4ee9b |