Merge pull request #1940 from lightpanda-io/fix-mcp-crash

mcp: initialize server in mcpThread to avoid V8 isolate crashes
This commit is contained in:
Karl Seguin
2026-03-21 20:35:31 +08:00
committed by GitHub

View File

@@ -150,12 +150,7 @@ fn run(allocator: Allocator, main_arena: Allocator) !void {
log.opts.format = .logfmt; log.opts.format = .logfmt;
var stdout = std.fs.File.stdout().writer(&.{}); var worker_thread = try std.Thread.spawn(.{}, mcpThread, .{ allocator, app });
var mcp_server: *lp.mcp.Server = try .init(allocator, app, &stdout.interface);
defer mcp_server.deinit();
var worker_thread = try std.Thread.spawn(.{}, mcpThread, .{ mcp_server, app });
defer worker_thread.join(); defer worker_thread.join();
app.network.run(); app.network.run();
@@ -171,8 +166,16 @@ fn fetchThread(app: *App, url: [:0]const u8, fetch_opts: lp.FetchOpts) void {
}; };
} }
fn mcpThread(mcp_server: *lp.mcp.Server, app: *App) void { fn mcpThread(allocator: std.mem.Allocator, app: *App) void {
defer app.network.stop(); defer app.network.stop();
var stdout = std.fs.File.stdout().writer(&.{});
var mcp_server: *lp.mcp.Server = lp.mcp.Server.init(allocator, app, &stdout.interface) catch |err| {
log.fatal(.mcp, "mcp init error", .{ .err = err });
return;
};
defer mcp_server.deinit();
var stdin_buf: [64 * 1024]u8 = undefined; var stdin_buf: [64 * 1024]u8 = undefined;
var stdin = std.fs.File.stdin().reader(&stdin_buf); var stdin = std.fs.File.stdin().reader(&stdin_buf);
lp.mcp.router.processRequests(mcp_server, &stdin.interface) catch |err| { lp.mcp.router.processRequests(mcp_server, &stdin.interface) catch |err| {