mirror of
https://github.com/StikDebug/StikDebug.git
synced 2026-10-15 20:10:30 +00:00
Reuse open remote server for JIT bounce-back to avoid cold-launch race
This commit is contained in:
parent
83da8aad29
commit
60accbe1d1
2 changed files with 33 additions and 13 deletions
|
|
@ -645,18 +645,7 @@ final class JITEnableContext {
|
|||
func relaunchApp(_ bundleID: String, logger: LogFunc? = nil) -> Bool {
|
||||
do {
|
||||
let pid = try withConnectedRemoteServer { remoteServer in
|
||||
try withProcessControl(remoteServer: remoteServer) { processControl in
|
||||
var pid: UInt64 = 0
|
||||
let ffiError = bundleID.withCString { bundleID in
|
||||
process_control_launch_app(processControl, bundleID, nil, 0, nil, 0, false, false, &pid)
|
||||
}
|
||||
|
||||
if let ffiError {
|
||||
throw error(from: ffiError, fallback: "Failed to return to app")
|
||||
}
|
||||
|
||||
return pid
|
||||
}
|
||||
try relaunchApp(bundleID, remoteServer: remoteServer)
|
||||
}
|
||||
|
||||
emitLog("Returned to \(bundleID) (PID \(pid))", logger: logger)
|
||||
|
|
@ -667,6 +656,32 @@ final class JITEnableContext {
|
|||
}
|
||||
}
|
||||
|
||||
func relaunchApp(_ bundleID: String, usingRemoteServer remoteServer: OpaquePointer, logger: LogFunc? = nil) -> Bool {
|
||||
do {
|
||||
let pid = try relaunchApp(bundleID, remoteServer: remoteServer)
|
||||
emitLog("Returned to \(bundleID) (PID \(pid))", logger: logger)
|
||||
return true
|
||||
} catch {
|
||||
emitLog("Failed to return to \(bundleID): \(error.localizedDescription)", logger: logger)
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
private func relaunchApp(_ bundleID: String, remoteServer: OpaquePointer) throws -> UInt64 {
|
||||
try withProcessControl(remoteServer: remoteServer) { processControl in
|
||||
var pid: UInt64 = 0
|
||||
let ffiError = bundleID.withCString { bundleID in
|
||||
process_control_launch_app(processControl, bundleID, nil, 0, nil, 0, false, false, &pid)
|
||||
}
|
||||
|
||||
if let ffiError {
|
||||
throw error(from: ffiError, fallback: "Failed to return to app")
|
||||
}
|
||||
|
||||
return pid
|
||||
}
|
||||
}
|
||||
|
||||
func startSyslogRelay(handler: @escaping SyslogLineHandler, onError: @escaping SyslogErrorHandler) {
|
||||
do {
|
||||
try ensureTunnel()
|
||||
|
|
|
|||
|
|
@ -132,7 +132,12 @@ final class RunJSViewModel: ObservableObject, Identifiable, @unchecked Sendable
|
|||
resumeLock.unlock()
|
||||
|
||||
appendLog("Returning to \(resumeBundleID)...")
|
||||
let success = JITEnableContext.shared.relaunchApp(resumeBundleID)
|
||||
let success: Bool
|
||||
if let remoteServer {
|
||||
success = JITEnableContext.shared.relaunchApp(resumeBundleID, usingRemoteServer: remoteServer)
|
||||
} else {
|
||||
success = JITEnableContext.shared.relaunchApp(resumeBundleID)
|
||||
}
|
||||
guard success else {
|
||||
appendLog("Failed to return to \(resumeBundleID) — continuing in the foreground.")
|
||||
return "failed to return to \(resumeBundleID)"
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue