mirror of
https://github.com/lightpanda-io/browser.git
synced 2026-03-21 20:24:42 +00:00
mcp: initialize server in mcpThread to avoid V8 isolate crashes
When running mcp server, it initialized lp.mcp.Server in the main thread which also implicitly created the V8 isolate in the main thread. When processing requests (like calling the goto tool) inside mcpThread, V8 would assert that the isolate doesn't match the current thread. Fixes #1938
This commit is contained in:
17
src/main.zig
17
src/main.zig
@@ -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| {
|
||||||
|
|||||||
Reference in New Issue
Block a user