• Elvis Angelaccio's avatar
    Rework kill logic · b1a251eb
    Elvis Angelaccio authored
    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.
    
    BUG: 389290
    FIXED-IN: 18.03.80
    Task: T7824
    b1a251eb
libzipplugin.cpp 35.3 KB