> On Mar 17, 2023, at 7:49 AM, Alan Snyder <javali...@cbfiddle.com> wrote:
> 
> block() means invoke the block


Not exactly and it still seems unnecessary here.

It appears to convert the block to a selector and then to invoke it. 

Eliminate the comments and NSLog’s and I think the following is equivalent and 
a bit more concise. Note that performOnMainThread also includes a main thread 
check with the same wait=YES.

Unfortunately this still doesn’t eliminate the -XstartOnFirstThread hang. Still 
looking at that. The hang doesn’t ever get into the block. The paths to get 
here are slightly different but I haven’t figured out where the difference 
amounts to a bug.

+ (void)performOnMainThreadWaiting:(BOOL)wait block:(void (^)())block {
//    if ([NSThread isMainThread] && wait == YES) {
/*
        if ([NSThread isMainThread]) {
        NSLog(@"ThreadUtilities perform main and wait");
        //block();
        [self performOnMainThread: on:self withObject:block waitUntilDone:wait];
    } else {
*/
        if (wait == YES) {
                NSLog(@"ThreadUtilities not main and wait");
            [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];
        }
//    }
}

+ (void)performOnMainThread:(SEL)aSelector on:(id)target withObject:(id)arg 
waitUntilDone:(BOOL)wait {
    NSLog(@"ThreadUtilities performOnMainThread target %@ with %@ on main %d 
name %@ wait %d", target, arg, [NSThread isMainThread],[[NSThread 
currentThread] name], wait);
        NSLog(@"%@", NSThread.callStackSymbols);
        NSLog(@"*********************************");
    if ([NSThread isMainThread] && wait == YES) {
        [target performSelector:aSelector withObject:arg];
    } else {
        [target performSelectorOnMainThread:aSelector withObject:arg 
waitUntilDone:wait modes:javaModes];
    }
}

invokeBlock is simply block()

+ (void)invokeBlock:(void (^)())block {
  block();
}

If really of interest the difference I’m seeing so far is this 
for -XstartOnFirstThread which works

2023-03-17 21:40:34.426 java[25865:2604833] java_md_macosx.m 
CreateExecutionEnvironment
2023-03-17 21:40:34.427 java[25865:2604833] java_md_macosx.m 
CreateExecutionEnvironment before MacOSXStartup
2023-03-17 21:40:34.427 java[25865:2604833] java_md_macosx MacOSXStartup
2023-03-17 21:40:34.427 java[25865:2604833] java_md_macosx ParkEventLoop
2023-03-17 21:40:34.427 java[25865:2604834] java_md_macosx.m 
CreateExecutionEnvironment
2023-03-17 21:40:34.427 java[25865:2604834] java_md_macosx.m 
CreateExecutionEnvironment before MacOSXStartup
2023-03-17 21:40:34.427 java[25865:2604834] java_md_macosx.m 
CreateExecutionEnvironment after MacOSXStartup
2023-03-17 21:40:35.342 java[25865:2604835] ThreadUtilities performOnMainThread 
target ThreadUtilities with <__NSMallocBlock__: 0x600001d0b630> on main 0 name  
wait 0
2023-03-17 21:40:35.343 java[25865:2604835] (
        0   libosxapp.dylib                     0x000000010b9b3f43 
+[ThreadUtilities performOnMainThread:on:withObject:waitUntilDone:] + 131
        1   libawt_lwawt.dylib                  0x000000010bded11a +[AWTStarter 
start:] + 346
        2   libawt_lwawt.dylib                  0x000000010bdeedb1 
Java_sun_lwawt_macosx_LWCToolkit_initAppkit + 273
        3   ???                                 0x000000011ccfdde0 0x0 + 
4778352096
)
2023-03-17 21:40:35.343 java[25865:2604835] *********************************
2023-03-17 21:40:35.343 java[25865:2604833] ThreadUtilities invokeBlockCopy
2023-03-17 21:40:35.343 java[25865:2604833] (
        0   libosxapp.dylib                     0x000000010b9b3dcb 
+[ThreadUtilities invokeBlockCopy:] + 43
        1   Foundation                          0x00007ff8039c9190 
__NSThreadPerformPerform + 177
        2   CoreFoundation                      0x00007ff802b4eb78 
__CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 17
        3   CoreFoundation                      0x00007ff802b4eb27 
__CFRunLoopDoSource0 + 157
        4   CoreFoundation                      0x00007ff802b4e901 
__CFRunLoopDoSources0 + 212
        5   CoreFoundation                      0x00007ff802b4d57b 
__CFRunLoopRun + 929
        6   CoreFoundation                      0x00007ff802b4cb60 
CFRunLoopRunSpecific + 560
        7   libjli.dylib                        0x000000010ae4dd42 
CreateExecutionEnvironment + 450
        8   libjli.dylib                        0x000000010ae49a13 JLI_Launch + 
1411
        9   java                                0x000000010ada1c05 main + 389
        10  dyld                                0x00007ff802740310 start + 2432
)
2023-03-17 21:40:35.343 java[25865:2604833] *********************************
2023-03-17 21:40:35.586 java[25865:2604835] ThreadUtilities not main and wait
2023-03-17 21:40:35.586 java[25865:2604835] ThreadUtilities performOnMainThread 
target ThreadUtilities with <__NSGlobalBlock__: 0x10be3f758> on main 0 name  
wait 1
2023-03-17 21:40:35.586 java[25865:2604835] (
        0   libosxapp.dylib                     0x000000010b9b3f43 
+[ThreadUtilities performOnMainThread:on:withObject:waitUntilDone:] + 131
        1   libawt_lwawt.dylib                  0x000000010bded1f8 +[AWTStarter 
start:] + 568
        2   libawt_lwawt.dylib                  0x000000010bdeedb1 
Java_sun_lwawt_macosx_LWCToolkit_initAppkit + 273
        3   ???                                 0x000000011ccfdde0 0x0 + 
4778352096
)
2023-03-17 21:40:35.586 java[25865:2604835] *********************************
2023-03-17 21:40:35.636 java[25865:2604899] MTLGraphicsConfig 
tryLoadMetalLibrary on main 0 name Java: AWT-EventQueue-0
2023-03-17 21:40:35.636 java[25865:2604899] ThreadUtilities not main and wait
2023-03-17 21:40:35.636 java[25865:2604899] ThreadUtilities performOnMainThread 
target ThreadUtilities with <__NSStackBlock__: 0x7000039ca628> on main 0 name 
Java: AWT-EventQueue-0 wait 1
2023-03-17 21:40:35.636 java[25865:2604899] (
        0   libosxapp.dylib                     0x000000010b9b3f43 
+[ThreadUtilities performOnMainThread:on:withObject:waitUntilDone:] + 131
        1   libawt_lwawt.dylib                  0x000000010bdf41cb 
Java_sun_java2d_metal_MTLGraphicsConfig_tryLoadMetalLibrary + 347
        2   ???                                 0x000000011ccfdde0 0x0 + 
4778352096
        3   ???                                 0x000000011ccf96ba 0x0 + 
4778333882
)
2023-03-17 21:40:35.636 java[25865:2604899] *********************************
2023-03-17 21:40:35.636 java[25865:2604833] MTLGraphicsConfig 
tryLoadMetalLibrary in block on main 1 name 
_____________________________________________________

Where you can see it ends up in and running the block. The main differences 
seeming to be that it takes a pass through the CFRunLoop doing an 
invokeBlockCopy resulting in a  <__NSGlobalBlock__: 0x10be3f758>  instead of a 
plain old <__NSStackBlock__: 0x7000039ca628> This appears to come from 
7   libjli.dylib                        0x000000010ae4dd42 
CreateExecutionEnvironment + 450
But I haven’t figured out exactly where in CreateExecutionEnvironment this is 
and why the -XstartOnFirstThread doesn’t do the same thing. Or if that actually 
amounts to the bug.


With -XstartOnFirstThread the trace is less verbose…

2023-03-18 04:43:12.889 java[50119:516520] java_md_macosx.m 
CreateExecutionEnvironment
2023-03-18 04:43:12.890 java[50119:516520] java_md_macosx.m 
CreateExecutionEnvironment before MacOSXStartup
2023-03-18 04:43:12.890 java[50119:516520] java_md_macosx MacOSXStartup
2023-03-18 04:43:12.890 java[50119:516520] java_md_macosx ParkEventLoop
2023-03-18 04:43:12.890 java[50119:516521] java_md_macosx.m 
CreateExecutionEnvironment
2023-03-18 04:43:12.891 java[50119:516521] java_md_macosx.m 
CreateExecutionEnvironment before MacOSXStartup
2023-03-18 04:43:12.891 java[50119:516520] java_md_macosx ParkEventLoop parking
2023-03-18 04:43:12.891 java[50119:516521] java_md_macosx.m 
CreateExecutionEnvironment after MacOSXStartup
2023-03-18 04:43:12.896 java[50119:516521] ProcessPlatformOption 
-XstartOnFirstThread
2023-03-18 04:43:12.896 java[50119:516521] java_md_macosx 
SetXStartOnFirstThreadArg before
2023-03-18 04:43:12.896 java[50119:516521] java_md_macosx 
SetXStartOnFirstThreadArg after
2023-03-18 04:43:13.447 java[50119:516520] ThreadUtilities performOnMainThread 
target ThreadUtilities with <__NSMallocBlock__: 0x600001f605a0> on main 1 name  
wait 0
2023-03-18 04:43:13.447 java[50119:516520] (
        0   libosxapp.dylib                     0x000000010738ef63 
+[ThreadUtilities performOnMainThread:on:withObject:waitUntilDone:] + 131
        1   libawt_lwawt.dylib                  0x00000001077c811a +[AWTStarter 
start:] + 346
        2   libawt_lwawt.dylib                  0x00000001077c9db1 
Java_sun_lwawt_macosx_LWCToolkit_initAppkit + 273
        3   ???                                 0x000000011028fde0 0x0 + 
4566089184
        4   ???                                 0x000000011028b7e2 0x0 + 
4566071266
)
2023-03-18 04:43:13.447 java[50119:516520] *********************************
2023-03-18 04:43:13.447 java[50119:516520] ThreadUtilities not main and wait
2023-03-18 04:43:13.447 java[50119:516520] ThreadUtilities performOnMainThread 
target ThreadUtilities with <__NSGlobalBlock__: 0x10781a758> on main 1 name  
wait 1
2023-03-18 04:43:13.447 java[50119:516520] (
        0   libosxapp.dylib                     0x000000010738ef63 
+[ThreadUtilities performOnMainThread:on:withObject:waitUntilDone:] + 131
        1   libawt_lwawt.dylib                  0x00000001077c81f8 +[AWTStarter 
start:] + 568
        2   libawt_lwawt.dylib                  0x00000001077c9db1 
Java_sun_lwawt_macosx_LWCToolkit_initAppkit + 273
        3   ???                                 0x000000011028fde0 0x0 + 
4566089184
        4   ???                                 0x000000011028b7e2 0x0 + 
4566071266
)
2023-03-18 04:43:13.447 java[50119:516520] *********************************
2023-03-18 04:43:13.529 java[50119:516547] MTLGraphicsConfig 
tryLoadMetalLibrary on main 0 name Java: AWT-EventQueue-0
2023-03-18 04:43:13.529 java[50119:516547] ThreadUtilities not main and wait
2023-03-18 04:43:13.529 java[50119:516547] ThreadUtilities performOnMainThread 
target ThreadUtilities with <__NSStackBlock__: 0x700004c06628> on main 0 name 
Java: AWT-EventQueue-0 wait 1
2023-03-18 04:43:13.530 java[50119:516547] (
        0   libosxapp.dylib                     0x000000010738ef63 
+[ThreadUtilities performOnMainThread:on:withObject:waitUntilDone:] + 131
        1   libawt_lwawt.dylib                  0x00000001077cf1cb 
Java_sun_java2d_metal_MTLGraphicsConfig_tryLoadMetalLibrary + 347
        2   ???                                 0x000000011028fde0 0x0 + 
4566089184
        3   ???                                 0x000000011028b6ba 0x0 + 
4566070970
)
2023-03-18 04:43:13.530 java[50119:516547] *********************************

And it is hung here without getting into the block.

_______________________________________________

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

Reply via email to