Files
orca/native/computer-use-macos/Sources/OrcaComputerUseMacOSCore/AgentConnectionRequestLoop.swift
T
F8 Team 810c262b1e fix(computer-use): release macOS screenshot memory after each request (#27374)
The macOS helper serves each sidecar connection on a dedicated thread
that lives as long as the connection, and the sidecar keeps one
connection open while the helper runs. Encoding a screenshot with
NSBitmapImageRep leaves autoreleased objects that keep the captured
image alive, and that thread never drained its pool, so every
screenshot kept a window-sized buffer in WindowServer until the helper
restarted.

Drain an autorelease pool around each request.
2026-10-10 21:11:59 -07:00

17 lines
664 B
Swift

import Foundation
public enum AgentConnectionRequestLoop {
/// Serves request lines until `readLine` returns nil or `handle` returns false.
public static func run(readLine: () -> String?, handle: (String) -> Bool) {
var keepServing = true
while keepServing {
// Why: a connection thread outlives its requests; without a per-request pool, objects
// autoreleased while encoding a screenshot keep its WindowServer buffer until disconnect.
keepServing = autoreleasepool {
guard let line = readLine() else { return false }
return handle(line)
}
}
}
}