The deadline timer and retry timer are two independent GCD timers running on a background dispatch queue, both holding a reference to the same SqOperation instance. When the app is backgrounded mid-flight (background fetch, silent push), iOS freezes all GCD timers. On resume, both timers fire simultaneously — one calls run() while the other tears down the operation. This is a use-after-free race condition.
The deadline timer and retry timer are two independent GCD timers running on a background dispatch queue, both holding a reference to the same SqOperation instance. When the app is backgrounded mid-flight (background fetch, silent push), iOS freezes all GCD timers. On resume, both timers fire simultaneously — one calls run() while the other tears down the operation. This is a use-after-free race condition.