mirror of
https://github.com/lightpanda-io/browser.git
synced 2025-10-29 15:13:28 +00:00
On CDP process error, let client decide how to close
Fixes issue where CDP closes the client, but client still registers a recv operation.
This commit is contained in:
@@ -114,15 +114,15 @@ pub const CDP = struct {
|
|||||||
self.session = try self.browser.newSession(self);
|
self.session = try self.browser.newSession(self);
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn processMessage(self: *CDP, msg: []const u8) void {
|
pub fn processMessage(self: *CDP, msg: []const u8) bool {
|
||||||
const arena = &self.message_arena;
|
const arena = &self.message_arena;
|
||||||
defer _ = arena.reset(.{ .retain_with_limit = 1024 * 16 });
|
defer _ = arena.reset(.{ .retain_with_limit = 1024 * 16 });
|
||||||
|
|
||||||
self.dispatch(arena.allocator(), self, msg) catch |err| {
|
self.dispatch(arena.allocator(), self, msg) catch |err| {
|
||||||
log.err("failed to process message: {}\n{s}", .{ err, msg });
|
log.err("failed to process message: {}\n{s}", .{ err, msg });
|
||||||
self.client.close(null);
|
return false;
|
||||||
return;
|
|
||||||
};
|
};
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Called from above, in processMessage which handles client messages
|
// Called from above, in processMessage which handles client messages
|
||||||
|
|||||||
@@ -555,6 +555,7 @@ fn ClientT(comptime S: type, comptime C: type) type {
|
|||||||
errdefer self.server.queueClose(self.socket);
|
errdefer self.server.queueClose(self.socket);
|
||||||
|
|
||||||
var reader = &self.reader;
|
var reader = &self.reader;
|
||||||
|
|
||||||
while (true) {
|
while (true) {
|
||||||
const msg = reader.next() catch |err| {
|
const msg = reader.next() catch |err| {
|
||||||
switch (err) {
|
switch (err) {
|
||||||
@@ -578,7 +579,10 @@ fn ClientT(comptime S: type, comptime C: type) type {
|
|||||||
self.server.queueClose(self.socket);
|
self.server.queueClose(self.socket);
|
||||||
return false;
|
return false;
|
||||||
},
|
},
|
||||||
.text, .binary => self.cdp.?.processMessage(msg.data),
|
.text, .binary => if (self.cdp.?.processMessage(msg.data) == false) {
|
||||||
|
self.close(null);
|
||||||
|
return false;
|
||||||
|
},
|
||||||
}
|
}
|
||||||
if (msg.cleanup_fragment) {
|
if (msg.cleanup_fragment) {
|
||||||
reader.cleanup();
|
reader.cleanup();
|
||||||
|
|||||||
Reference in New Issue
Block a user