@@ -148,7 +148,7 @@ class ObjCBlock extends BindingType {
148148 final newClosureBlock = ObjCBuiltInFunctions .newClosureBlock.gen (w);
149149 final getBlockClosure = ObjCBuiltInFunctions .getBlockClosure.gen (w);
150150 final releaseFn = ObjCBuiltInFunctions .objectRelease.gen (w);
151- final wrapBlockingBlockFn = ObjCBuiltInFunctions .wrapBlockingBlock .gen (w);
151+ final objCContext = ObjCBuiltInFunctions .objCContext .gen (w);
152152 final signalWaiterFn = ObjCBuiltInFunctions .signalWaiter.gen (w);
153153 final returnFfiDartType = returnType.getFfiDartType (w);
154154 final voidPtrCType = voidPtr.getCType (w);
@@ -312,7 +312,7 @@ abstract final class $name {
312312 final rawListener = $newClosureBlock (
313313 $blockingListenerCallable .nativeFunction.cast(),
314314 $listenerConvFn , keepIsolateAlive);
315- final wrapper = $wrapBlockingBlockFn ($ wrapBlockingFn , raw, rawListener);
315+ final wrapper = $wrapBlockingFn ( raw, rawListener, $ objCContext );
316316 $releaseFn (raw.cast());
317317 $releaseFn (rawListener.cast());
318318 return $blockType (wrapper, retain: false, release: true);
@@ -406,19 +406,14 @@ typedef ${returnType.getNativeType()} (^$blockingName)($blockingArgStr);
406406__attribute__((visibility("default"))) __attribute__((used))
407407$listenerName $blockingWrapper (
408408 $blockingName block, $blockingName listenerBlock,
409- void* (*newWaiter)(), void (*awaitWaiter)(void*)) NS_RETURNS_RETAINED {
410- NSThread *targetThread = [NSThread currentThread];
411- return ^void($argStr ) {
412- if ([NSThread currentThread] == targetThread) {
413- ${generateRetain ('block' )};
414- block(${blockingRetains .join (', ' )});
415- } else {
416- void* waiter = newWaiter();
417- ${generateRetain ('listenerBlock' )};
418- listenerBlock(${blockingListenerRetains .join (', ' )});
419- awaitWaiter(waiter);
420- }
421- };
409+ DOBJC_Context* ctx) NS_RETURNS_RETAINED {
410+ BLOCKING_BLOCK_IMPL(ctx, ^void($argStr ), {
411+ ${generateRetain ('block' )};
412+ block(${blockingRetains .join (', ' )});
413+ }, {
414+ ${generateRetain ('listenerBlock' )};
415+ listenerBlock(${blockingListenerRetains .join (', ' )});
416+ });
422417}
423418''' ;
424419 }
0 commit comments