opensim-org / opensim-gui

SimTK OpenSim graphical user interface and distribution.
Apache License 2.0
61 stars 32 forks source link

Sometimes, mac GUI hangs after launching #251

Closed chrisdembia closed 6 years ago

chrisdembia commented 7 years ago

I am running into the situation very frequently where the GUI, on macs, will freeze right after launching. The beachball appears, and the lower status bar of the GUI never appears.

The crash sometimes happens when launching the GUI from NetBeans, but not regularly.

I am able to cause the crash by deleting the "userdir" (either Gui/opensim/build/testuserdir or ~/Library/Application Support/OpenSim) and then launching the GUI.

My sense is that it has something to do with jxbrowser.

Here's a stack trace obtained with jstack while the GUI is hanging:

2017-07-05 23:56:44
Full thread dump Java HotSpot(TM) 64-Bit Server VM (25.45-b02 mixed mode):

"Attach Listener" #39 daemon prio=9 os_prio=31 tid=0x00007fc7d600c000 nid=0x13c23 waiting on condition [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE

"IPC Process Thread" #37 daemon prio=6 os_prio=31 tid=0x00007fc7d424f800 nid=0x14503 runnable [0x0000700003637000]
   java.lang.Thread.State: RUNNABLE
        at com.teamdev.jxbrowser.chromium.internal.SharedMemoryLibrary.startIPC(Native Method)
        at com.teamdev.jxbrowser.chromium.internal.ipc.InternalChromiumProcess.doStart(Unknown Source)
        at com.teamdev.jxbrowser.chromium.internal.ipc.ChromiumProcess.start(Unknown Source)
        at com.teamdev.jxbrowser.chromium.internal.ipc.d.run(Unknown Source)
        at java.lang.Thread.run(Thread.java:745)

"IPC Server Thread" #36 daemon prio=6 os_prio=31 tid=0x00007fc7d5a68800 nid=0x14307 runnable [0x0000700003534000]
   java.lang.Thread.State: RUNNABLE
        at java.net.PlainSocketImpl.socketAccept(Native Method)
        at java.net.AbstractPlainSocketImpl.accept(AbstractPlainSocketImpl.java:404)
        at java.net.ServerSocket.implAccept(ServerSocket.java:545)
        at java.net.ServerSocket.accept(ServerSocket.java:513)
        at com.teamdev.jxbrowser.chromium.internal.ipc.Server.start(Unknown Source)
        at com.teamdev.jxbrowser.chromium.internal.ipc.e.run(Unknown Source)
        at java.lang.Thread.run(Thread.java:745)

"process reaper" #34 daemon prio=10 os_prio=31 tid=0x00007fc7d69ee800 nid=0x13f5b waiting on condition [0x00007000025af000]
   java.lang.Thread.State: TIMED_WAITING (parking)
        at sun.misc.Unsafe.park(Native Method)
        - parking to wait for  <0x0000000780fb89a0> (a java.util.concurrent.SynchronousQueue$TransferStack)
        at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:215)
        at java.util.concurrent.SynchronousQueue$TransferStack.awaitFulfill(SynchronousQueue.java:460)
        at java.util.concurrent.SynchronousQueue$TransferStack.transfer(SynchronousQueue.java:362)
        at java.util.concurrent.SynchronousQueue.poll(SynchronousQueue.java:941)
        at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1066)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1127)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
        at java.lang.Thread.run(Thread.java:745)

"org.python.google.common.base.internal.Finalizer" #32 daemon prio=6 os_prio=31 tid=0x00007fc7dc020800 nid=0x14037 in Object.wait() [0x0000700003431000]
   java.lang.Thread.State: WAITING (on object monitor)
        at java.lang.Object.wait(Native Method)
        at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:143)
        - locked <0x0000000781030780> (a java.lang.ref.ReferenceQueue$Lock)
        at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:164)
        at org.python.google.common.base.internal.Finalizer.run(Finalizer.java:127)

"DestroyJavaVM" #30 prio=5 os_prio=31 tid=0x00007fc7d6a45000 nid=0x1c03 waiting on condition [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE

"TimerQueue" #28 daemon prio=5 os_prio=31 tid=0x00007fc7d3cdd000 nid=0x1303b waiting on condition [0x0000700003128000]
   java.lang.Thread.State: WAITING (parking)
        at sun.misc.Unsafe.park(Native Method)
        - parking to wait for  <0x000000078088e410> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
        at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
        at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2039)
        at java.util.concurrent.DelayQueue.take(DelayQueue.java:211)
        at javax.swing.TimerQueue.run(TimerQueue.java:171)
        at java.lang.Thread.run(Thread.java:745)

"Thread-4" #27 daemon prio=5 os_prio=31 tid=0x00007fc7d3453000 nid=0x1313b in Object.wait() [0x0000700003025000]
   java.lang.Thread.State: WAITING (on object monitor)
        at java.lang.Object.wait(Native Method)
        - waiting on <0x0000000780561f68> (a java.util.LinkedList)
        at java.lang.Object.wait(Object.java:502)
        at java.util.prefs.AbstractPreferences$EventDispatchThread.run(AbstractPreferences.java:1482)
        - locked <0x0000000780561f68> (a java.util.LinkedList)

"Timer-0" #25 daemon prio=5 os_prio=31 tid=0x00007fc7d3594000 nid=0x129af in Object.wait() [0x0000700002f22000]
   java.lang.Thread.State: TIMED_WAITING (on object monitor)
        at java.lang.Object.wait(Native Method)
        - waiting on <0x000000078047cff8> (a java.util.TaskQueue)
        at java.util.TimerThread.mainLoop(Timer.java:552)
        - locked <0x000000078047cff8> (a java.util.TaskQueue)
        at java.util.TimerThread.run(Timer.java:505)

"File Watcher" #24 daemon prio=1 os_prio=31 tid=0x00007fc7d2ced800 nid=0x12713 waiting on condition [0x0000700002e1f000]
   java.lang.Thread.State: WAITING (parking)
        at sun.misc.Unsafe.park(Native Method)
        - parking to wait for  <0x000000078043c640> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
        at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
        at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2039)
        at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:442)
        at org.netbeans.modules.masterfs.watcher.macosx.OSXNotifier.nextEvent(OSXNotifier.java:108)
        at org.netbeans.modules.masterfs.providers.Notifier$1.nextEvent(Notifier.java:122)
        at org.netbeans.modules.masterfs.watcher.Watcher$Ext.run(Watcher.java:345)
        at java.lang.Thread.run(Thread.java:745)

"Thread-1" #23 daemon prio=1 os_prio=31 tid=0x00007fc7d356c000 nid=0x11f3f runnable [0x0000700002d1c000]
   java.lang.Thread.State: RUNNABLE
        at com.sun.jna.Native.invokeVoid(Native Method)
        at com.sun.jna.Function.invoke(Function.java:374)
        at com.sun.jna.Function.invoke(Function.java:323)
        at com.sun.jna.Library$Handler.invoke(Library.java:236)
        at com.sun.proxy.$Proxy2.CFRunLoopRun(Unknown Source)
        at org.netbeans.modules.masterfs.watcher.macosx.OSXNotifier$1.run(OSXNotifier.java:129)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
        at java.lang.Thread.run(Thread.java:745)

"Warm Up" #22 daemon prio=1 os_prio=31 tid=0x00007fc7d4546000 nid=0x11d47 in Object.wait() [0x0000700002c19000]
   java.lang.Thread.State: WAITING (on object monitor)
        at java.lang.Object.wait(Native Method)
        at java.lang.Object.wait(Object.java:502)
        at java.awt.EventQueue.invokeAndWait(EventQueue.java:1313)
        - locked <0x00000007abad4e60> (a java.awt.EventQueue$1AWTInvocationLock)
        at java.awt.EventQueue.invokeAndWait(EventQueue.java:1294)
        at javax.swing.SwingUtilities.invokeAndWait(SwingUtilities.java:1348)
        at org.netbeans.core.ui.warmup.MenuWarmUpTask.run(MenuWarmUpTask.java:96)
        at org.netbeans.core.startup.WarmUpSupport.run(WarmUpSupport.java:98)
        at org.openide.util.RequestProcessor$Task.run(RequestProcessor.java:1443)
        at org.netbeans.modules.openide.util.GlobalLookup.execute(GlobalLookup.java:68)
        at org.openide.util.lookup.Lookups.executeWith(Lookups.java:303)
        at org.openide.util.RequestProcessor$Processor.run(RequestProcessor.java:2058)

"AWT-EventQueue-0" #21 prio=6 os_prio=31 tid=0x00007fc7d2b1b800 nid=0x1000f waiting on condition [0x0000700002a0e000]
   java.lang.Thread.State: TIMED_WAITING (parking)
        at sun.misc.Unsafe.park(Native Method)
        - parking to wait for  <0x00000007ab6f5e80> (a java.util.concurrent.CountDownLatch$Sync)
        at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:215)
        at java.util.concurrent.locks.AbstractQueuedSynchronizer.doAcquireSharedNanos(AbstractQueuedSynchronizer.java:1037)
        at java.util.concurrent.locks.AbstractQueuedSynchronizer.tryAcquireSharedNanos(AbstractQueuedSynchronizer.java:1328)
        at java.util.concurrent.CountDownLatch.await(CountDownLatch.java:277)
        at com.teamdev.jxbrowser.chromium.internal.ipc.LatchUtil.await(Unknown Source)
        at com.teamdev.jxbrowser.chromium.internal.ipc.LatchUtil.await(Unknown Source)
        at com.teamdev.jxbrowser.chromium.internal.ipc.IPC.a(Unknown Source)
        at com.teamdev.jxbrowser.chromium.internal.ipc.IPC.start(Unknown Source)
        - locked <0x00000007ab566220> (a com.teamdev.jxbrowser.chromium.internal.ipc.IPC)
        at com.teamdev.jxbrowser.chromium.Browser.<init>(Unknown Source)
        at com.teamdev.jxbrowser.chromium.Browser.<init>(Unknown Source)
        at com.teamdev.jxbrowser.chromium.Browser.<init>(Unknown Source)
        at org.opensim.javabrowser.jxBrowserTopComponent.<init>(jxBrowserTopComponent.java:55)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:422)
        at org.netbeans.modules.settings.convertors.XMLSettingsSupport.newInstance(XMLSettingsSupport.java:100)
        at org.netbeans.modules.settings.convertors.XMLSettingsSupport$SettingsRecognizer.instanceCreate(XMLSettingsSupport.java:628)
        at org.netbeans.modules.settings.convertors.SerialDataConvertor$SettingsInstance.instanceCreate(SerialDataConvertor.java:426)
        at org.netbeans.core.windows.persistence.PersistenceManager.getTopComponentPersistentForID(PersistenceManager.java:571)
        at org.netbeans.core.windows.persistence.PersistenceManager.getTopComponentForID(PersistenceManager.java:681)
        at org.netbeans.core.windows.PersistenceHandler.getTopComponentForID(PersistenceHandler.java:478)
        at org.netbeans.core.windows.LazyLoader.loadNow(LazyLoader.java:158)
        at org.netbeans.core.windows.LazyLoader.access$400(LazyLoader.java:62)
        at org.netbeans.core.windows.LazyLoader$2.run(LazyLoader.java:129)
        at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311)
        at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:756)
        at java.awt.EventQueue.access$500(EventQueue.java:97)
        at java.awt.EventQueue$3.run(EventQueue.java:709)
        at java.awt.EventQueue$3.run(EventQueue.java:703)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:75)
        at java.awt.EventQueue.dispatchEvent(EventQueue.java:726)
        at org.netbeans.core.TimableEventQueue.dispatchEvent(TimableEventQueue.java:159)
        at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
        at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
        at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)

"Java2D Disposer" #20 daemon prio=10 os_prio=31 tid=0x00007fc7d31ce000 nid=0xfd0f in Object.wait() [0x000070000290d000]
   java.lang.Thread.State: WAITING (on object monitor)
        at java.lang.Object.wait(Native Method)
        at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:143)
        - locked <0x0000000780479e78> (a java.lang.ref.ReferenceQueue$Lock)
        at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:164)
        at sun.java2d.Disposer.run(Disposer.java:148)
        at java.lang.Thread.run(Thread.java:745)

"Java2D Queue Flusher" #19 daemon prio=10 os_prio=31 tid=0x00007fc7d3a16800 nid=0xf407 in Object.wait() [0x000070000280a000]
   java.lang.Thread.State: TIMED_WAITING (on object monitor)
        at java.lang.Object.wait(Native Method)
        at sun.java2d.opengl.OGLRenderQueue$QueueFlusher.run(OGLRenderQueue.java:203)
        - locked <0x000000078041f3b8> (a sun.java2d.opengl.OGLRenderQueue$QueueFlusher)

"RequestProcessor queue manager" #18 daemon prio=5 os_prio=31 tid=0x00007fc7d316e800 nid=0xee03 in Object.wait() [0x0000700002707000]
   java.lang.Thread.State: TIMED_WAITING (on object monitor)
        at java.lang.Object.wait(Native Method)
        at org.openide.util.RequestProcessor$TickTac.obtainFirst(RequestProcessor.java:2282)
        - locked <0x000000078038fd48> (a java.lang.Class for org.openide.util.RequestProcessor$TickTac)
        at org.openide.util.RequestProcessor$TickTac.run(RequestProcessor.java:2258)

"Inactive RequestProcessor thread [Was:AutoUpdate-UI/org.netbeans.modules.autoupdate.ui.actions.AutoupdateCheckScheduler$7]" #16 daemon prio=1 os_prio=31 tid=0x00007fc7d42c2000 nid=0xd22f in Object.wait() [0x0000700002501000]
   java.lang.Thread.State: TIMED_WAITING (on object monitor)
        at java.lang.Object.wait(Native Method)
        at org.openide.util.RequestProcessor$Processor.run(RequestProcessor.java:2002)
        - locked <0x00000007803867e0> (a java.lang.Object)

"AWT-Shutdown" #15 prio=5 os_prio=31 tid=0x00007fc7d580c000 nid=0x8223 in Object.wait() [0x00007000021f2000]
   java.lang.Thread.State: WAITING (on object monitor)
        at java.lang.Object.wait(Native Method)
        at java.lang.Object.wait(Object.java:502)
        at sun.awt.AWTAutoShutdown.run(AWTAutoShutdown.java:295)
        - locked <0x0000000780379270> (a java.lang.Object)
        at java.lang.Thread.run(Thread.java:745)

"AppKit Thread" #14 daemon prio=5 os_prio=31 tid=0x00007fc7d2a13000 nid=0x307 runnable [0x00007fff5e681000]
   java.lang.Thread.State: RUNNABLE
        at sun.lwawt.macosx.LWCToolkit.doAWTRunLoopImpl(Native Method)
        at sun.lwawt.macosx.LWCToolkit.doAWTRunLoop(LWCToolkit.java:826)
        at sun.lwawt.macosx.LWCToolkit.invokeAndWait(LWCToolkit.java:643)
        at sun.lwawt.macosx.LWCToolkit.invokeAndWait(LWCToolkit.java:582)
        at sun.lwawt.macosx.CAccessibility.invokeAndWait(CAccessibility.java:80)
        at sun.lwawt.macosx.CAccessibility.getAccessibleRole(CAccessibility.java:237)

"CLI Requests Server" #13 daemon prio=5 os_prio=31 tid=0x00007fc7d4074000 nid=0x5803 runnable [0x000070000206c000]
   java.lang.Thread.State: RUNNABLE
        at java.net.PlainSocketImpl.socketAccept(Native Method)
        at java.net.AbstractPlainSocketImpl.accept(AbstractPlainSocketImpl.java:404)
        at java.net.ServerSocket.implAccept(ServerSocket.java:545)
        at java.net.ServerSocket.accept(ServerSocket.java:513)
        at org.netbeans.CLIHandler$Server.run(CLIHandler.java:1103)

"Active Reference Queue Daemon" #12 daemon prio=1 os_prio=31 tid=0x00007fc7d29fa000 nid=0x5603 in Object.wait() [0x0000700001f69000]
   java.lang.Thread.State: WAITING (on object monitor)
        at java.lang.Object.wait(Native Method)
        at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:143)
        - locked <0x0000000780371480> (a java.lang.ref.ReferenceQueue$Lock)
        at org.openide.util.lookup.implspi.ActiveQueue$Impl.removeSuper(ActiveQueue.java:93)
        at org.openide.util.lookup.implspi.ActiveQueue$Daemon.run(ActiveQueue.java:131)

"Service Thread" #9 daemon prio=9 os_prio=31 tid=0x00007fc7d2823000 nid=0x5203 runnable [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE

"C1 CompilerThread3" #8 daemon prio=9 os_prio=31 tid=0x00007fc7d2822000 nid=0x5003 waiting on condition [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE

"C2 CompilerThread2" #7 daemon prio=9 os_prio=31 tid=0x00007fc7d3025000 nid=0x4e03 waiting on condition [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE

"C2 CompilerThread1" #6 daemon prio=9 os_prio=31 tid=0x00007fc7d4055000 nid=0x4c03 waiting on condition [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE

"C2 CompilerThread0" #5 daemon prio=9 os_prio=31 tid=0x00007fc7d4053800 nid=0x4a03 waiting on condition [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE

"Signal Dispatcher" #4 daemon prio=9 os_prio=31 tid=0x00007fc7d4053000 nid=0x4803 runnable [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE

"Finalizer" #3 daemon prio=8 os_prio=31 tid=0x00007fc7d404a000 nid=0x3903 in Object.wait() [0x0000700001751000]
   java.lang.Thread.State: WAITING (on object monitor)
        at java.lang.Object.wait(Native Method)
        at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:143)
        - locked <0x000000078023dbe8> (a java.lang.ref.ReferenceQueue$Lock)
        at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:164)
        at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:209)

"Reference Handler" #2 daemon prio=10 os_prio=31 tid=0x00007fc7d4049800 nid=0x3703 in Object.wait() [0x000070000164e000]
   java.lang.Thread.State: WAITING (on object monitor)
        at java.lang.Object.wait(Native Method)
        at java.lang.Object.wait(Object.java:502)
        at java.lang.ref.Reference$ReferenceHandler.run(Reference.java:157)
        - locked <0x00000007803742d8> (a java.lang.ref.Reference$Lock)

"VM Thread" os_prio=31 tid=0x00007fc7d4047000 nid=0x3503 runnable

"GC task thread#0 (ParallelGC)" os_prio=31 tid=0x00007fc7d3007000 nid=0x2503 runnable

"GC task thread#1 (ParallelGC)" os_prio=31 tid=0x00007fc7d3007800 nid=0x2703 runnable

"GC task thread#2 (ParallelGC)" os_prio=31 tid=0x00007fc7d3008000 nid=0x2903 runnable

"GC task thread#3 (ParallelGC)" os_prio=31 tid=0x00007fc7d3009000 nid=0x2b03 runnable

"GC task thread#4 (ParallelGC)" os_prio=31 tid=0x00007fc7d2800800 nid=0x2d03 runnable

"GC task thread#5 (ParallelGC)" os_prio=31 tid=0x00007fc7d2809800 nid=0x2f03 runnable

"GC task thread#6 (ParallelGC)" os_prio=31 tid=0x00007fc7d3009800 nid=0x3103 runnable

"GC task thread#7 (ParallelGC)" os_prio=31 tid=0x00007fc7d300a000 nid=0x3303 runnable

"VM Periodic Task Thread" os_prio=31 tid=0x00007fc7d4050000 nid=0x5403 waiting on condition

JNI global references: 955
chrisdembia commented 7 years ago

When the GUI hangs, this is the bottom of the log:

12:20:59 INFO: Starting IPC...
12:20:59 INFO: Starting IPC Server...
12:20:59 INFO: Starting socket server
12:20:59 INFO: Starting socket server at port 1101...
12:20:59 INFO: Starting IPC Process...
12:20:59 INFO: /var/folders/cw/sf048g251sn1pcsvvv9vj3tr0000gn/T/jxbrowser-chromium-49.0.2623.110.6.4/jxbrowser.app/Contents/MacOS/jxbrowser 1101 5824 --disable-remote-core-animation --disable-surfaces

The log in the NetBeans, when the app launches successfully, contains the following:

12:23:02 INFO: OS name: Mac OS X
12:23:02 INFO: JRE version: 1.8.0_45 64-bit
12:23:02 INFO: JxBrowser version: 6.4
12:23:02 INFO: The '/var/folders/cw/sf048g251sn1pcsvvv9vj3tr0000gn/T/jxbrowser-chromium-49.0.2623.110.6.4/jxbrowser.app' file doesn't exist.
12:23:02 INFO: Extracting Chromium binaries to '/var/folders/cw/sf048g251sn1pcsvvv9vj3tr0000gn/T/jxbrowser-chromium-49.0.2623.110.6.4'
12:23:02 INFO: The '/chromium-mac.zip' JAR resource URL is jar:file:/Users/chris/repos/opensim-gui/5/opensim-gui/Gui/opensim/build/cluster/modules/ext/jxbrowser-mac-6.4.jar!/chromium-mac.zip
[warn] kq_init: detected broken kqueue; not using.: Undefined error: 0
[warn] kq_init: detected broken kqueue; not using.: Undefined error: 0
[warn] kq_init: detected broken kqueue; not using.: Undefined error: 0
[warn] kq_init: detected broken kqueue; not using.: Undefined error: 0
[warn] kq_init: detected broken kqueue; not using.: Undefined error: 0
[warn] kq_init: detected broken kqueue; not using.: Undefined error: 0
12:23:03 INFO: Chromium binaries are extracted to '/var/folders/cw/sf048g251sn1pcsvvv9vj3tr0000gn/T/jxbrowser-chromium-49.0.2623.110.6.4'
12:23:03 INFO: Restore permissions for file: /var/folders/cw/sf048g251sn1pcsvvv9vj3tr0000gn/T/jxbrowser-chromium-49.0.2623.110.6.4/jxbrowser.app/Contents/MacOS/jxbrowser
12:23:03 INFO: Restore permissions for file: /var/folders/cw/sf048g251sn1pcsvvv9vj3tr0000gn/T/jxbrowser-chromium-49.0.2623.110.6.4/jxbrowser.app/Contents/Frameworks/jxbrowser-helper.app/Contents/MacOS/jxbrowser-helper
12:23:03 INFO: Restore permissions for file: /var/folders/cw/sf048g251sn1pcsvvv9vj3tr0000gn/T/jxbrowser-chromium-49.0.2623.110.6.4/jxbrowser.app/Contents/Frameworks/jxbrowser-helper NP.app/Contents/MacOS/jxbrowser-helper NP
12:23:03 INFO: Restore permissions for file: /var/folders/cw/sf048g251sn1pcsvvv9vj3tr0000gn/T/jxbrowser-chromium-49.0.2623.110.6.4/jxbrowser.app/Contents/Frameworks/jxbrowser-helper EH.app/Contents/MacOS/jxbrowser-helper EH
12:23:03 INFO: Starting IPC...
12:23:03 INFO: Starting IPC Server...
12:23:03 INFO: Starting socket server
12:23:04 INFO: Starting socket server at port 1101...
12:23:04 INFO: Starting IPC Process...
12:23:04 INFO: /var/folders/cw/sf048g251sn1pcsvvv9vj3tr0000gn/T/jxbrowser-chromium-49.0.2623.110.6.4/jxbrowser.app/Contents/MacOS/jxbrowser 1101 6096 --disable-remote-core-animation --disable-surfaces 

The issue could be the setting of permissions (see here) or the difference between 6096 and 5824.

chrisdembia commented 7 years ago

Related: https://stackoverflow.com/questions/37795754/jxbrowser-doesnt-start. Browser functionality should be started in a non-UI thread; I don't know if this is relevant for us.

chrisdembia commented 7 years ago

Deleting testuserdir when running the GUI from NetBeans caused a launched GUI to stop hanging, and generated this log:

[0706/130059:INFO:main-delegate.cpp(65)] Executable name: /private/var/folders/cw/sf048g251sn1pcsvvv9vj3tr0000gn/T/jxbrowser-chromium-55.0.2883.87.6.14.2/jxbrowser-chromium.app/Contents/MacOS/jxbrowser-chromium
[0706/130059:INFO:main-delegate.cpp(73)] Frameworks path: /private/var/folders/cw/sf048g251sn1pcsvvv9vj3tr0000gn/T/jxbrowser-chromium-55.0.2883.87.6.14.2/jxbrowser-chromium.app/Contents/Frameworks
[0706/130059:INFO:main-delegate.cpp(65)] Executable name: /private/var/folders/cw/sf048g251sn1pcsvvv9vj3tr0000gn/T/jxbrowser-chromium-55.0.2883.87.6.14.2/jxbrowser-chromium.app/Contents/MacOS/jxbrowser-chromium
[0706/130059:INFO:main-delegate.cpp(73)] Frameworks path: /private/var/folders/cw/sf048g251sn1pcsvvv9vj3tr0000gn/T/jxbrowser-chromium-55.0.2883.87.6.14.2/jxbrowser-chromium.app/Contents/Frameworks
[0706/130059:INFO:main-delegate.cpp(65)] Executable name: /private/var/folders/cw/sf048g251sn1pcsvvv9vj3tr0000gn/T/jxbrowser-chromium-55.0.2883.87.6.14.2/jxbrowser-chromium.app/Contents/MacOS/jxbrowser-chromium
[0706/130059:INFO:main-delegate.cpp(73)] Frameworks path: /private/var/folders/cw/sf048g251sn1pcsvvv9vj3tr0000gn/T/jxbrowser-chromium-55.0.2883.87.6.14.2/jxbrowser-chromium.app/Contents/Frameworks
[0706/130059:INFO:main-delegate.cpp(65)] Executable name: /private/var/folders/cw/sf048g251sn1pcsvvv9vj3tr0000gn/T/jxbrowser-chromium-55.0.2883.87.6.14.2/jxbrowser-chromium.app/Contents/Frameworks/jxbrowser-chromium-helper.app/Contents/MacOS/jxbrowser-chromium-helper
[0706/130059:INFO:main-delegate.cpp(80)] Frameworks path: /private/var/folders/cw/sf048g251sn1pcsvvv9vj3tr0000gn/T/jxbrowser-chromium-55.0.2883.87.6.14.2/jxbrowser-chromium.app/Contents/Frameworks
[0706/130059:INFO:main-delegate.cpp(65)] Executable name: /private/var/folders/cw/sf048g251sn1pcsvvv9vj3tr0000gn/T/jxbrowser-chromium-55.0.2883.87.6.14.2/jxbrowser-chromium.app/Contents/Frameworks/jxbrowser-chromium-helper.app/Contents/MacOS/jxbrowser-chromium-helper
[0706/130059:INFO:main-delegate.cpp(80)] Frameworks path: /private/var/folders/cw/sf048g251sn1pcsvvv9vj3tr0000gn/T/jxbrowser-chromium-55.0.2883.87.6.14.2/jxbrowser-chromium.app/Contents/Frameworks
[0706/130059:INFO:main-delegate.cpp(65)] Executable name: /private/var/folders/cw/sf048g251sn1pcsvvv9vj3tr0000gn/T/jxbrowser-chromium-55.0.2883.87.6.14.2/jxbrowser-chromium.app/Contents/Frameworks/jxbrowser-chromium-helper.app/Contents/MacOS/jxbrowser-chromium-helper
[0706/130059:INFO:main-delegate.cpp(80)] Frameworks path: /private/var/folders/cw/sf048g251sn1pcsvvv9vj3tr0000gn/T/jxbrowser-chromium-55.0.2883.87.6.14.2/jxbrowser-chromium.app/Contents/Frameworks
Loading plugins from directory /Users/chris/repos/opensim-gui/6/opensim-gui/Gui/opensim/plugins
INFO [org.netbeans.core.windows.persistence]: [PersistenceManager.getTopComponentForID] Problem when deserializing TopComponent for tcID:'jxBrowserTopComponent'. Reason: null
Content: 
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE settings PUBLIC "-//NetBeans//DTD Session settings 1.0//EN" "http://www.netbeans.org/dtds/sessionsettings-1_0.dtd">
<settings version="1.0">
  <instance class="org.opensim.javabrowser.jxBrowserTopComponent"/>
</settings>
Class: class org.opensim.javabrowser.jxBrowserTopComponent
Source: MultiFileObject@d74f3f9[Windows2Local/Components/jxBrowserTopComponent.settings]
Content: 
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE settings PUBLIC "-//NetBeans//DTD Session settings 1.0//EN" "http://www.netbeans.org/dtds/sessionsettings-1_0.dtd">
<settings version="1.0">
  <instance class="org.opensim.javabrowser.jxBrowserTopComponent"/>
</settings>
Class: class org.opensim.javabrowser.jxBrowserTopComponent
Source: MultiFileObject@d74f3f9[Windows2Local/Components/jxBrowserTopComponent.settings]
Caused: com.teamdev.jxbrowser.chromium.internal.ipc.IPCException: Failed to initialize IPC. Remote process doesn't respond.
    at com.teamdev.jxbrowser.chromium.internal.ipc.IPC.a(SourceFile:175)
    at com.teamdev.jxbrowser.chromium.internal.ipc.IPC.start(SourceFile:144)
    at com.teamdev.jxbrowser.chromium.Browser.<init>(SourceFile:384)
    at com.teamdev.jxbrowser.chromium.Browser.<init>(SourceFile:337)
    at com.teamdev.jxbrowser.chromium.Browser.<init>(SourceFile:317)
    at org.opensim.javabrowser.jxBrowserTopComponent.<init>(jxBrowserTopComponent.java:55)
Caused: java.lang.reflect.InvocationTargetException
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:422)
    at org.netbeans.modules.settings.convertors.XMLSettingsSupport.newInstance(XMLSettingsSupport.java:100)
    at org.netbeans.modules.settings.convertors.XMLSettingsSupport$SettingsRecognizer.instanceCreate(XMLSettingsSupport.java:628)
Caused: java.io.IOException
    at org.netbeans.modules.settings.convertors.XMLSettingsSupport$SettingsRecognizer.instanceCreate(XMLSettingsSupport.java:630)
    at org.netbeans.modules.settings.convertors.SerialDataConvertor$SettingsInstance.instanceCreate(SerialDataConvertor.java:426)
[catch] at org.netbeans.core.windows.persistence.PersistenceManager.getTopComponentPersistentForID(PersistenceManager.java:571)
    at org.netbeans.core.windows.persistence.PersistenceManager.getTopComponentForID(PersistenceManager.java:681)
    at org.netbeans.core.windows.PersistenceHandler.getTopComponentForID(PersistenceHandler.java:478)
    at org.netbeans.core.windows.LazyLoader.loadNow(LazyLoader.java:158)
    at org.netbeans.core.windows.LazyLoader.access$400(LazyLoader.java:62)
    at org.netbeans.core.windows.LazyLoader$2.run(LazyLoader.java:129)
    at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311)
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:756)
    at java.awt.EventQueue.access$500(EventQueue.java:97)
    at java.awt.EventQueue$3.run(EventQueue.java:709)
    at java.awt.EventQueue$3.run(EventQueue.java:703)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:75)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:726)
    at org.netbeans.core.TimableEventQueue.dispatchEvent(TimableEventQueue.java:159)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
Content: 
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE settings PUBLIC "-//NetBeans//DTD Session settings 1.0//EN" "http://www.netbeans.org/dtds/sessionsettings-1_0.dtd">
<settings version="1.0">
  <instance class="org.opensim.javabrowser.jxBrowserTopComponent"/>
</settings>
ALL [null]: Class: class org.opensim.javabrowser.jxBrowserTopComponent
ALL [null]: Source: MultiFileObject@d74f3f9[Windows2Local/Components/jxBrowserTopComponent.settings]
WARNING [org.openide.filesystems.Ordering]: Not all children in Menu/Window/ marked with the position attribute: [org-netbeans-core-windows-actions-GlobalPropertiesAction.shadow, org-opensim-console-ScriptingShellTopComponent.shadow, org-opensim-coordinateviewer-CoordinateViewerAction.shadow, org-opensim-graphlEditor-topologyEditorTopComponent.shadow, org-opensim-javabrowser-jxBrowserTopComponent.shadow, org-opensim-logger-LoggerAction.shadow], but some are: [org-opensim-view-ExplorerAction.instance, org-opensim-view-actions-ViewAddNewAction.shadow, org-opensim-threejs-VisualizerWindow.shadow, ConfigureWindow]
WARNING [org.openide.filesystems.Ordering]: Found same position 500 for both Menu/Help/Separator1.instance and Menu/Help/org-opensim-plotter-separatorBefore.instance

However, the jxBrowser did not launch.

chrisdembia commented 7 years ago

The specific folder that, when deleted, causes the hang is ~/Library/Application Support/OpenSim/4.0.Beta/config/Windows2Local/Modes.

chrisdembia commented 7 years ago

After I delete all the *.wsmodes files in Modes, I can start the GUI about 3 times, after which the GUI will hang.

I wonder if this is related to the need to start JxBrowser in a non-UI thread when using JavaFX (https://jxbrowser.support.teamdev.com/support/solutions/articles/9000013071-using-jxbrowser-in-javafx, https://www.teamdev.com/downloads/jxbrowser/javadoc/com/teamdev/jxbrowser/chromium/BrowserCore.html).

chrisdembia commented 7 years ago

Sometimes, adding <active-tc id="jxBrowserTopComponent" /> to ~/Library/Application Support/OpenSim/4.0.Beta/config/Windows2Local/Modes/editor.wsmode causes the GUI to no longer hang the next time it's loaded. Removing this line from editor.wsmode can cause the GUI to hang (the next time it's loaded).

chrisdembia commented 7 years ago

This page looks promising: https://stackoverflow.com/questions/41557279/jxbrowser-java-ipc-external-true-vm-argument

By default, on macOS JxBrowser initializes Chromium engine in Java process. It's required to support heavyweight rendering mode when Chromium window is embedded into Java frame. In macOS native window from one process (Chromium) cannot be embedded into a native window from another process (Java). Initializing Chromium in Java process might cause deadlock issues on macOS. It's because SWT, JavaFX, and Chromium share the same Cocoa native thread in Java process. The java.ipc.external=true VM option tells JxBrowser to initialize and run Chromium engine in separate native process. In this case Java and Chromium don't share Cocoa native thread. It allows solving deadlock issues on macOS platform. As you may see, in this case heavyweight rendering mode cannot be used. So, in this case only lightweight rendering mode is used. This is the only downside of using this VM option.

chrisdembia commented 7 years ago

For some reason, the mac build I made earlier this week does not have this issue.

chrisdembia commented 7 years ago

I edited the installer to contain a postinstall script that writes the necessary file to the Application Support directory (on this branch: submodules_refine_mac_packaging_isb_beta_20170705). Though my recent testing on a fresh mac VM indicates that this postinstall script is not necessary for the first launch of the GUI to succeed.

chrisdembia commented 7 years ago

The recent changes @aymanhab made to when the visualizer server is launched does not fix this issue. However, changing jxBrowserTopComponent.java:30 from

@TopComponent.Registration(mode = "editor", openAtStartup = true)

to

@TopComponent.Registration(mode = "editor", openAtStartup = false)

seems to fix the issue / deadlock.

Is there a way to delay loading of the visualizer component until the model is done loading?