> On Mar 17, 2023, at 6:31 AM, Michael Hall <mik3h...@gmail.com> wrote: > > > >> On Mar 17, 2023, at 4:07 AM, Saagar Jha <saa...@saagarjha.com> wrote: >> >> The implementation of -[ThreadUtilities performOnMainThreadWaiting:block:] >> does the right thing here, which is calling the block directly if it’s >> already running on the main thread: >> https://github.com/openjdk/jdk/blob/9d518c528b11953b556aa7585fc69ff9c9a22435/src/java.desktop/macosx/native/libosxapp/ThreadUtilities.m#L103. >> It’s likely that your hang is caused by something else. >> >> Saagar Jha >> > > That was already suggested but I couldn’t understand how it could be done. > I’ll take it as correct with the second opinion. The stack trace seemed to > indicate this as the place. Maybe something within the block. > I may have to debug further. > > Thanks. > > Mike >
Sorry, I looked at your link and am still not sure this is correct if you are already on the main thread. [ThreadUtilities performOnMainThreadWaiting:YES block:^(){ + (void)performOnMainThreadWaiting:(BOOL)wait block:(void (^)())block { if ([NSThread isMainThread] && wait == YES) { block(); } else { if (wait == YES) { [self performOnMainThread:@selector(invokeBlock:) on:self withObject:block waitUntilDone:YES]; } else { void (^blockCopy)(void) = Block_copy(block); [self performOnMainThread:@selector(invokeBlockCopy:) on:self withObject:blockCopy waitUntilDone:NO]; } } } Given that the code is on the main thread and wait is indicated the code blocks correct? Until when? If it is until it is off the main thread, does that happen? Best case, whenever it comes out of the wait it falls through without ever attempting to run the block at all doesn’t it? Wouldn’t correct be something like… + (void)performOnMainThreadWaiting:(BOOL)wait block:(void (^)())block { if ([NSThread isMainThread] && wait == YES) { block(); } if (wait == YES) { [self performOnMainThread:@selector(invokeBlock:) on:self withObject:block waitUntilDone:YES]; } else { void (^blockCopy)(void) = Block_copy(block); [self performOnMainThread:@selector(invokeBlockCopy:) on:self withObject:blockCopy waitUntilDone:NO]; } } _______________________________________________ Cocoa-dev mailing list (Cocoa-dev@lists.apple.com) Please do not post admin requests or moderator comments to the list. Contact the moderators at cocoa-dev-admins(at)lists.apple.com Help/Unsubscribe/Update your Subscription: https://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com This email sent to arch...@mail-archive.com