summaryrefslogtreecommitdiff
path: root/src/tools/clangbackend/ipcsource/clangjobqueue.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/tools/clangbackend/ipcsource/clangjobqueue.cpp')
-rw-r--r--src/tools/clangbackend/ipcsource/clangjobqueue.cpp29
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;