Skip to content

Commit 76e8506

Browse files
committed
Remove potential processing blocking with CDP
When using CDP, we poll the HTTP clients along with the CDP socket. Because this polling can be long, we first process any pending message. This can end up processing _all_ messages, in which case the poll will block for a long time. This change makes it so that when the initial processing processes 1+ message, we do not poll, but rather return. This allows the page lifecycle to be processed normally (and not just blocking on poll, waiting for the CDP client to send data).
1 parent 2d6e255 commit 76e8506

File tree

2 files changed

+9
-4
lines changed

2 files changed

+9
-4
lines changed

src/cdp/domains/log.zig

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,7 @@ pub fn LogInterceptor(comptime BC: type) type {
106106
}, .{
107107
.session_id = self.bc.session_id,
108108
}) catch |err| {
109-
log.err(.interceptor, "failed to send", .{.err = err});
109+
log.err(.interceptor, "failed to send", .{ .err = err });
110110
};
111111
}
112112
};

src/http/Client.zig

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -393,7 +393,9 @@ fn perform(self: *Client, timeout_ms: c_int) !PerformStatus {
393393

394394
// We're potentially going to block for a while until we get data. Process
395395
// whatever messages we have waiting ahead of time.
396-
try self.processMessages();
396+
if (try self.processMessages()) {
397+
return .normal;
398+
}
397399

398400
var status = PerformStatus.normal;
399401
if (self.extra_socket) |s| {
@@ -411,12 +413,13 @@ fn perform(self: *Client, timeout_ms: c_int) !PerformStatus {
411413
try errorMCheck(c.curl_multi_poll(multi, null, 0, timeout_ms, null));
412414
}
413415

414-
try self.processMessages();
416+
_ = try self.processMessages();
415417
return status;
416418
}
417419

418-
fn processMessages(self: *Client) !void {
420+
fn processMessages(self: *Client) !bool {
419421
const multi = self.multi;
422+
var processed = false;
420423
var messages_count: c_int = 0;
421424
while (c.curl_multi_info_read(multi, &messages_count)) |msg_| {
422425
const msg: *c.CURLMsg = @ptrCast(msg_);
@@ -475,10 +478,12 @@ fn processMessages(self: *Client) !void {
475478
.transfer = transfer,
476479
});
477480
}
481+
processed = true;
478482
} else |err| {
479483
self.requestFailed(transfer, err);
480484
}
481485
}
486+
return processed;
482487
}
483488

484489
fn endTransfer(self: *Client, transfer: *Transfer) void {

0 commit comments

Comments
 (0)