Skip to content

Commit 90cf413

Browse files
committed
Add Lowest job priority
for the indexing job. Change job scheduler to keep indexing jobs while jobs with Fence priority are executing. Fixes #1362
1 parent 66e8416 commit 90cf413

File tree

4 files changed

+18
-12
lines changed

4 files changed

+18
-12
lines changed

source/ada/lsp-ada_indexing.ads

+1-1
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ private
8686

8787
overriding function Priority
8888
(Self : Indexing_Job) return LSP.Server_Jobs.Job_Priority is
89-
(LSP.Server_Jobs.Low);
89+
(LSP.Server_Jobs.Lowest);
9090

9191
overriding procedure Execute
9292
(Self : in out Indexing_Job;

source/server/lsp-job_schedulers.adb

+10-5
Original file line numberDiff line numberDiff line change
@@ -132,9 +132,11 @@ package body LSP.Job_Schedulers is
132132
end if;
133133

134134
if Job.Priority = Fence then
135-
-- Process other jobs before any Fence job
136-
while (for some List of Self.Jobs => not List.Is_Empty) loop
137-
Self.Process_Job (Client, Waste);
135+
-- Process other jobs (excluding indexing) before any Fence job
136+
while
137+
(for some List of Self.Jobs (Low .. High) => not List.Is_Empty)
138+
loop
139+
Self.Process_Job (Client, Waste, From => Low);
138140

139141
if Waste.Assigned then
140142
return;
@@ -163,14 +165,17 @@ package body LSP.Job_Schedulers is
163165
(Self : in out Job_Scheduler'Class;
164166
Client :
165167
in out LSP.Client_Message_Receivers.Client_Message_Receiver'Class;
166-
Waste : out LSP.Server_Messages.Server_Message_Access)
168+
Waste : out LSP.Server_Messages.Server_Message_Access;
169+
From : LSP.Server_Jobs.Job_Priority := LSP.Server_Jobs.Lowest)
167170
is
168171
Status : LSP.Server_Jobs.Execution_Status;
169172
begin
170173
Self.Complete_Last_Fence_Job (null, Waste);
171174

172175
if not Waste.Assigned then
173-
for List of reverse Self.Jobs when not List.Is_Empty loop
176+
for List of reverse Self.Jobs (From .. LSP.Server_Jobs.High)
177+
when not List.Is_Empty
178+
loop
174179
declare
175180
Job : LSP.Server_Jobs.Server_Job_Access := List.First_Element;
176181
begin

source/server/lsp-job_schedulers.ads

+4-4
Original file line numberDiff line numberDiff line change
@@ -68,8 +68,9 @@ package LSP.Job_Schedulers is
6868
(Self : in out Job_Scheduler'Class;
6969
Client :
7070
in out LSP.Client_Message_Receivers.Client_Message_Receiver'Class;
71-
Waste : out LSP.Server_Messages.Server_Message_Access);
72-
-- Execute (already created) jobs with ordinal priority (Low, High).
71+
Waste : out LSP.Server_Messages.Server_Message_Access;
72+
From : LSP.Server_Jobs.Job_Priority := LSP.Server_Jobs.Lowest);
73+
-- Execute (already created) jobs with ordinal priority (From .. High).
7374
-- When a job is done the routine returns (in Waste) the message to be
7475
-- deallocated by the server. The Client is used to send messages during
7576
-- the execution of the job.
@@ -88,8 +89,7 @@ private
8889
package Job_Lists is new Ada.Containers.Doubly_Linked_Lists
8990
(LSP.Server_Jobs.Server_Job_Access, LSP.Server_Jobs."=");
9091

91-
subtype Ordinal_Priority is LSP.Server_Jobs.Job_Priority
92-
range LSP.Server_Jobs.Low .. LSP.Server_Jobs.High;
92+
subtype Ordinal_Priority is LSP.Server_Jobs.Ordinal_Priority;
9393

9494
type Job_List_Array is array (Ordinal_Priority) of Job_Lists.List;
9595

source/server/lsp-server_jobs.ads

+3-2
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,10 @@ with LSP.Server_Messages;
2121
package LSP.Server_Jobs is
2222
pragma Preelaborate;
2323

24-
type Job_Priority is (Low, High, Immediate, Fence);
24+
type Job_Priority is (Lowest, Low, High, Immediate, Fence);
2525
-- Job priority to schedule jobs.
2626
--
27+
-- @value Lowest - indexing jobs
2728
-- @value Low - long running jobs like find-all-references
2829
-- @value High - fast queries like hover
2930
-- @value Immediate - urgent queries like cancel-request
@@ -33,7 +34,7 @@ package LSP.Server_Jobs is
3334
-- new messages until the job is done. Server execute each job in its
3435
-- queue before executing any Fence job.
3536

36-
subtype Ordinal_Priority is Job_Priority range Low .. High;
37+
subtype Ordinal_Priority is Job_Priority range Lowest .. High;
3738

3839
type Server_Job is limited interface;
3940

0 commit comments

Comments
 (0)