From 665831ffd7a3f8422fea16892ea8f9d5204c32ff Mon Sep 17 00:00:00 2001 From: PJ Date: Sat, 25 Apr 2026 15:33:41 +0700 Subject: [PATCH] fix(sidecar): walk cause chain in withReconnect to catch Maestro-wrapped IOException --- .../kotlin/dev/sanderling/sidecar/DriverBackend.kt | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/sidecar/src/main/kotlin/dev/sanderling/sidecar/DriverBackend.kt b/sidecar/src/main/kotlin/dev/sanderling/sidecar/DriverBackend.kt index 517d820..d91cf2a 100644 --- a/sidecar/src/main/kotlin/dev/sanderling/sidecar/DriverBackend.kt +++ b/sidecar/src/main/kotlin/dev/sanderling/sidecar/DriverBackend.kt @@ -530,11 +530,12 @@ class IosDriverBackend(private val udid: String) : DriverBackend { private fun withReconnect(block: () -> T): T { return try { block() - } catch (e: java.io.IOException) { - try { - driver.open() - warmup() - } catch (reconnectErr: Exception) { + } catch (e: Exception) { + val isIoFailure = generateSequence(e as Throwable) { it.cause } + .any { it is java.io.IOException } + if (!isIoFailure) throw e + try { driver.open(); warmup() } + catch (reconnectErr: Exception) { throw IllegalStateException("WDA reconnect failed: $reconnectErr", e) } block()