diff options
Diffstat (limited to 'src/tools/clangbackend/ipcsource/clangjobqueue.cpp')
-rw-r--r-- | src/tools/clangbackend/ipcsource/clangjobqueue.cpp | 29 |
1 files changed, 27 insertions, 2 deletions
diff --git a/src/tools/clangbackend/ipcsource/clangjobqueue.cpp b/src/tools/clangbackend/ipcsource/clangjobqueue.cpp index 8c9ace68e6..383c2ecaa4 100644 --- a/src/tools/clangbackend/ipcsource/clangjobqueue.cpp +++ b/src/tools/clangbackend/ipcsource/clangjobqueue.cpp @@ -53,6 +53,19 @@ bool JobQueue::add(const JobRequest &job) return false; } + if (!m_documents.hasDocument(job.filePath, job.projectPartId)) { + qCDebug(jobsLog) << "Not adding / cancelling due to already closed document:" << job; + cancelJobRequest(job); + return false; + } + + const Document document = m_documents.document(job.filePath, job.projectPartId); + if (!document.isIntact()) { + qCDebug(jobsLog) << "Not adding / cancelling due not intact document:" << job; + cancelJobRequest(job); + return false; + } + qCDebug(jobsLog) << "Adding" << job; m_queue.append(job); @@ -90,7 +103,7 @@ void JobQueue::removeExpiredRequests() m_queue = cleanedRequests; } -bool JobQueue::isJobRequestExpired(const JobRequest &jobRequest) const +bool JobQueue::isJobRequestExpired(const JobRequest &jobRequest) { const JobRequest::ExpirationReasons expirationReasons = jobRequest.expirationReasons; const UnsavedFiles unsavedFiles = m_documents.unsavedFiles(); @@ -120,7 +133,8 @@ bool JobQueue::isJobRequestExpired(const JobRequest &jobRequest) const const Document document = m_documents.document(jobRequest.filePath, jobRequest.projectPartId); if (!document.isIntact()) { - qCDebug(jobsLog) << "Removing due to not intact translation unit:" << jobRequest; + qCDebug(jobsLog) << "Removing/Cancelling due to not intact document:" << jobRequest; + cancelJobRequest(jobRequest); return true; } @@ -174,6 +188,12 @@ void JobQueue::prioritizeRequests() std::stable_sort(m_queue.begin(), m_queue.end(), lessThan); } +void JobQueue::cancelJobRequest(const JobRequest &jobRequest) +{ + if (m_cancelJobRequest) + m_cancelJobRequest(jobRequest); +} + static bool passesPreconditions(const JobRequest &request, const Document &document) { using Condition = JobRequest::Condition; @@ -280,6 +300,11 @@ void JobQueue::setIsJobRunningForJobRequestHandler( m_isJobRunningForJobRequestHandler = isJobRunningHandler; } +void JobQueue::setCancelJobRequest(const JobQueue::CancelJobRequest &cancelJobRequest) +{ + m_cancelJobRequest = cancelJobRequest; +} + JobRequests &JobQueue::queue() { return m_queue; |