Skip to content

Commit 8aed52b

Browse files
committed
use std.Thread.Pool even when building with -Dsingle-threaded
1 parent 77f0b1d commit 8aed52b

File tree

2 files changed

+22
-49
lines changed

2 files changed

+22
-49
lines changed

src/DocumentStore.zig

Lines changed: 6 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ allocator: std.mem.Allocator,
2222
/// the DocumentStore assumes that `config` is not modified while calling one of its functions.
2323
config: Config,
2424
lock: std.Thread.RwLock = .{},
25-
thread_pool: if (builtin.single_threaded) void else *std.Thread.Pool,
25+
thread_pool: *std.Thread.Pool,
2626
handles: std.StringArrayHashMapUnmanaged(*Handle) = .empty,
2727
build_files: if (supports_build_system) std.StringArrayHashMapUnmanaged(*BuildFile) else void = if (supports_build_system) .empty else {},
2828
cimports: if (supports_build_system) std.AutoArrayHashMapUnmanaged(Hash, translate_c.Result) else void = if (supports_build_system) .empty else {},
@@ -80,7 +80,7 @@ pub const BuildFile = struct {
8080
build_associated_config: ?std.json.Parsed(BuildAssociatedConfig) = null,
8181
impl: struct {
8282
mutex: std.Thread.Mutex = .{},
83-
build_runner_state: if (builtin.single_threaded) void else BuildRunnerState = if (builtin.single_threaded) {} else .idle,
83+
build_runner_state: BuildRunnerState = .idle,
8484
version: u32 = 0,
8585
/// contains information extracted from running build.zig with a custom build runner
8686
/// e.g. include paths & packages
@@ -835,11 +835,6 @@ pub fn invalidateBuildFile(self: *DocumentStore, build_file_uri: Uri) void {
835835

836836
const build_file = self.getBuildFile(build_file_uri) orelse return;
837837

838-
if (builtin.single_threaded) {
839-
self.invalidateBuildFileWorker(build_file);
840-
return;
841-
}
842-
843838
self.thread_pool.spawn(invalidateBuildFileWorker, .{ self, build_file }) catch {
844839
self.invalidateBuildFileWorker(build_file);
845840
return;
@@ -1474,17 +1469,11 @@ pub fn loadDirectoryRecursive(store: *DocumentStore, directory_uri: Uri) !usize
14741469
}
14751470
};
14761471

1477-
if (builtin.single_threaded) {
1478-
while (not_currently_loading_uris.pop()) |uri| {
1479-
S.getOrLoadHandleVoid(store, uri);
1480-
}
1481-
} else {
1482-
var wait_group: std.Thread.WaitGroup = .{};
1483-
while (not_currently_loading_uris.pop()) |uri| {
1484-
store.thread_pool.spawnWg(&wait_group, S.getOrLoadHandleVoid, .{ store, uri });
1485-
}
1486-
store.thread_pool.waitAndWork(&wait_group);
1472+
var wait_group: std.Thread.WaitGroup = .{};
1473+
while (not_currently_loading_uris.pop()) |uri| {
1474+
store.thread_pool.spawnWg(&wait_group, S.getOrLoadHandleVoid, .{ store, uri });
14871475
}
1476+
store.thread_pool.waitAndWork(&wait_group);
14881477

14891478
return file_count;
14901479
}

src/Server.zig

Lines changed: 16 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -56,8 +56,7 @@ offset_encoding: offsets.Encoding = .@"utf-16",
5656
status: Status = .uninitialized,
5757

5858
// private fields
59-
thread_pool: if (zig_builtin.single_threaded) void else std.Thread.Pool,
60-
wait_group: if (zig_builtin.single_threaded) void else std.Thread.WaitGroup,
59+
thread_pool: std.Thread.Pool,
6160
job_queue: std.fifo.LinearFifo(Job, .Dynamic),
6261
job_queue_lock: std.Thread.Mutex = .{},
6362
ip: InternPool = undefined,
@@ -2116,43 +2115,35 @@ fn isBlockingMessage(msg: Message) bool {
21162115
/// make sure to also set the `transport` field
21172116
pub fn create(allocator: std.mem.Allocator) !*Server {
21182117
const server = try allocator.create(Server);
2119-
errdefer server.destroy();
2118+
errdefer allocator.destroy(server);
21202119
server.* = .{
21212120
.allocator = allocator,
21222121
.config = .{},
21232122
.document_store = .{
21242123
.allocator = allocator,
21252124
.config = .init,
2126-
.thread_pool = if (zig_builtin.single_threaded) {} else undefined, // set below
2125+
.thread_pool = &server.thread_pool,
21272126
.diagnostics_collection = &server.diagnostics_collection,
21282127
},
21292128
.job_queue = .init(allocator),
21302129
.thread_pool = undefined, // set below
2131-
.wait_group = if (zig_builtin.single_threaded) {} else .{},
21322130
.diagnostics_collection = .{ .allocator = allocator },
21332131
};
21342132

2135-
if (zig_builtin.single_threaded) {
2136-
server.thread_pool = {};
2137-
} else {
2138-
try server.thread_pool.init(.{
2139-
.allocator = allocator,
2140-
.n_jobs = @min(4, std.Thread.getCpuCount() catch 1), // what is a good value here?
2141-
});
2142-
server.document_store.thread_pool = &server.thread_pool;
2143-
}
2133+
try server.thread_pool.init(.{
2134+
.allocator = allocator,
2135+
.n_jobs = @min(4, std.Thread.getCpuCount() catch 1), // what is a good value here?
2136+
});
2137+
errdefer server.thread_pool.deinit();
21442138

21452139
server.ip = try InternPool.init(allocator);
2140+
errdefer server.ip.deinit(allocator);
21462141

21472142
return server;
21482143
}
21492144

21502145
pub fn destroy(server: *Server) void {
2151-
if (!zig_builtin.single_threaded) {
2152-
server.wait_group.wait();
2153-
server.thread_pool.deinit();
2154-
}
2155-
2146+
server.thread_pool.deinit();
21562147
while (server.job_queue.readItem()) |job| job.deinit(server.allocator);
21572148
server.job_queue.deinit();
21582149
server.document_store.deinit();
@@ -2179,34 +2170,27 @@ pub fn keepRunning(server: Server) bool {
21792170
}
21802171
}
21812172

2182-
pub fn waitAndWork(server: *Server) void {
2183-
if (zig_builtin.single_threaded) return;
2184-
server.thread_pool.waitAndWork(&server.wait_group);
2185-
server.wait_group.reset();
2186-
}
2187-
21882173
/// The main loop of ZLS
21892174
pub fn loop(server: *Server) !void {
21902175
std.debug.assert(server.transport != null);
2176+
var wait_group: std.Thread.WaitGroup = .{};
21912177
while (server.keepRunning()) {
21922178
const json_message = try server.transport.?.readJsonMessage(server.allocator);
21932179
defer server.allocator.free(json_message);
21942180

21952181
try server.sendJsonMessage(json_message);
21962182

21972183
while (server.job_queue.readItem()) |job| {
2198-
if (zig_builtin.single_threaded) {
2199-
server.processJob(job);
2200-
continue;
2201-
}
2202-
22032184
switch (job.syncMode()) {
22042185
.exclusive => {
2205-
server.waitAndWork();
2186+
if (!zig_builtin.single_threaded) {
2187+
server.thread_pool.waitAndWork(&wait_group);
2188+
wait_group.reset();
2189+
}
22062190
server.processJob(job);
22072191
},
22082192
.shared => {
2209-
server.thread_pool.spawnWg(&server.wait_group, processJob, .{ server, job });
2193+
server.thread_pool.spawnWg(&wait_group, processJob, .{ server, job });
22102194
},
22112195
}
22122196
}

0 commit comments

Comments
 (0)