From 10dc8335d211331978d45017a0d3fe47bd360b47 Mon Sep 17 00:00:00 2001 From: nimlgen <138685161+nimlgen@users.noreply.github.com> Date: Fri, 7 Nov 2025 19:52:54 +0800 Subject: [PATCH] tinygpu: fix teardown crash (#13143) * tinygpu: fix crash * um? * double relase * restore --- .../TinyGPUDriverUserClient.cpp | 35 +++++++++---------- 1 file changed, 17 insertions(+), 18 deletions(-) diff --git a/extra/usbgpu/tbgpu/installer/TinyGPUDriverExtension/TinyGPUDriverUserClient.cpp b/extra/usbgpu/tbgpu/installer/TinyGPUDriverExtension/TinyGPUDriverUserClient.cpp index 71df2e28ab..b84985df43 100644 --- a/extra/usbgpu/tbgpu/installer/TinyGPUDriverExtension/TinyGPUDriverUserClient.cpp +++ b/extra/usbgpu/tbgpu/installer/TinyGPUDriverExtension/TinyGPUDriverUserClient.cpp @@ -46,26 +46,9 @@ bool TinyGPUDriverUserClient::init() void TinyGPUDriverUserClient::free() { - // release all DMA allocations for this client if (ivars) { - for (uint32_t i = 0; i < ivars->dmaCount; i++) { - auto &d = ivars->dmas[i]; - if (d.dmaCmd) { - d.dmaCmd->CompleteDMA(kIODMACommandCompleteDMANoOptions); - d.dmaCmd->release(); - d.dmaCmd = nullptr; - } - if (d.sharedBuf) { - d.sharedBuf->release(); - d.sharedBuf = nullptr; - } - } - ivars->dmaCount = 0; - - ivars->provider.reset(); + IOSafeDeleteNULL(ivars, TinyGPUDriverUserClient_IVars, 1); } - - IOSafeDeleteNULL(ivars, TinyGPUDriverUserClient_IVars, 1); super::free(); } @@ -94,6 +77,22 @@ error: kern_return_t TinyGPUDriverUserClient::Stop_Impl(IOService* in_provider) { + // release all DMA allocations for this client + if (ivars) { + for (size_t i = 0; i < ivars->dmaCount; i++) { + auto &d = ivars->dmas[i]; + if (d.dmaCmd) { + d.dmaCmd->CompleteDMA(kIODMACommandCompleteDMANoOptions); + d.dmaCmd->release(); + d.dmaCmd = nullptr; + } + } + ivars->dmaCount = 0; + IOSafeDeleteNULL(ivars->dmas, TinyGPUCreateDMAResp, ivars->dmaCap); + ivars->dmas = nullptr; + ivars->provider.reset(); + } + return Stop(in_provider, SUPERDISPATCH); }