Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Crashing on Linux #6

Open
andymule opened this issue Apr 20, 2024 · 2 comments
Open

Crashing on Linux #6

andymule opened this issue Apr 20, 2024 · 2 comments

Comments

@andymule
Copy link

andymule commented Apr 20, 2024

I'm in WSL, but have no trouble running other graphics examples, like raylib stuff and xclock. I even made a test X11 app that calls __strlen_avx2 (which is crashing in your example), and that works. Any ideas? Lots of dumps attached

❯ swift run 3D_01_RotatingCube
Building for debugging...
[6/6] Linking 3D_01_RotatingCube
Build complete! (1.36s)
[GateEngine] Loaded static resource search paths: (GameDelegate search paths not included)
  "[MainBundle]/GateEngineDemos_2D_01_AnimatedSprite.resources",
  "[MainBundle]/",
  "[MainBundle]/GateEngine_GateEngine.resources",
[GateEngine] No Game State "SaveState.json" found. Creating new Game State.
[GateEngine] No Game State "GateEngine.json" found. Creating new Game State.
swift-runtime: unable to suspend thread 8033
swift-runtime: unable to suspend thread 8033

💣 Program crashed: Bad pointer dereference at 0x0000000000000000

Thread 0 "3D_01_RotatingC" crashed:

0 0x00007fe8b54467fd __strlen_avx2 + 29 in libc.so.6

Backtrace took 0.61s
❯ swift run 2D_Pong
Building for debugging...
[630/630] Linking 2D_Pong
Build complete! (15.23s)
[GateEngine] Loaded static resource search paths: (GameDelegate search paths not included)
  "[MainBundle]/GateEngineDemos_2D_01_AnimatedSprite.resources",
  "[MainBundle]/",
  "[MainBundle]/GateEngine_GateEngine.resources",
[GateEngine] No Game State "SaveState.json" found. Creating new Game State.
[GateEngine] No Game State "GateEngine.json" found. Creating new Game State.
swift-runtime: unable to suspend thread 7893
swift-runtime: unable to suspend thread 7893

💣 Program crashed: Bad pointer dereference at 0x0000000000000000

Thread 0 "2D_Pong" crashed:

0 0x00007ffb1d06f7fd __strlen_avx2 + 29 in libc.so.6

Backtrace took 0.61s
* thread #1, name = '2D_Pong', stop reason = signal SIGSEGV: invalid address (fault address: 0x0)
  * frame #0: 0x00007ffff695d7fd libc.so.6`__strlen_avx2 at strlen-avx2.S:74
    frame #1: 0x00007ffff7e7ff32 libX11.so.6`___lldb_unnamed_symbol1648 + 98
    frame #2: 0x00007ffff7e80df1 libX11.so.6`XrmGetStringDatabase + 65
    frame #3: 0x00005555559af3d9 2D_Pong`X11Window.updateStoredMetaData(pixelSize=nil, self=0x0000555556cfd420) at X11Window.swift:30:32
    frame #4: 0x00005555559b04e8 2D_Pong`X11Window.init(window=0x0000555556cc6f40, self=0x0000555556cfd420) at X11Window.swift:90:9
    frame #5: 0x00005555559afe14 2D_Pong`X11Window.__allocating_init(window:) at X11Window.swift:0
    frame #6: 0x0000555555a08250 2D_Pong`Window.windowBacking.getter(self=0x0000555556cc6f40) at
 Window.swift:51:58
    frame #7: 0x0000555555a08523 2D_Pong`Window.renderTargetBackend.getter(self=0x0000555556cc6f40) at Window.swift:54:9
    frame #8: 0x0000555555a0887a 2D_Pong`Window.renderTargetBackend.modify at <compiler-generated>:0
    frame #9: 0x0000555555a0acd9 2D_Pong`protocol witness for _RenderTargetProtocol.renderTargetBackend.modify in conformance Window at <compiler-generated>:0
    frame #10: 0x00005555559fbedd 2D_Pong`_RenderTargetProtocol.clearColor.setter(newValue=(red = 0, green = 0, blue = 0, alpha = 1), self=0x0000555556cc6f40) at RenderTarget.swift:164:44
    frame #11: 0x0000555555a09d3f 2D_Pong`Window.init(identifier="main", style=system, options=(rawValue = 8), self=0x0000555556cc6f40) at Window.swift:127:25
    frame #12: 0x0000555555a09bd2 2D_Pong`Window.__allocating_init(identifier:style:options:) at
 Window.swift:0
    frame #13: 0x0000555555a0d24c 2D_Pong`WindowManager.createWindow(identifier="main", style=system, options=(rawValue = 8), self=0x0000555557155590) at WindowManager.swift:56:30
    frame #14: 0x00005555557c0024 2D_Pong`GameDelegate.createMainWindow(game=0x0000555556cdae80, identifier="main", self=0x0000555556cc3e10) at GameDelegate.swift:78:39
    frame #15: 0x0000555555c92661 2D_Pong`protocol witness for GameDelegate.createMainWindow(game:identifier:) in conformance PongGameDelegate at <compiler-generated>:0
    frame #16: 0x00005555557bd79e 2D_Pong`Game.didFinishLaunching(self=0x0000555556cdae80) at Game.swift:62:34
    frame #17: 0x00007ffff763c54d libswift_Concurrency.so`swift::runJobInEstablishedExecutorContext(swift::Job*) + 349
    frame #18: 0x00007ffff763cd7c libswift_Concurrency.so`swift_job_run + 92
    frame #19: 0x00007ffff73cc8c8 libdispatch.so`_dispatch_main_queue_callback_4CF + 504
    frame #20: 0x00007ffff70ab728 libFoundation.so`__CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__ + 8
    frame #21: 0x00007ffff70a74b9 libFoundation.so`__CFRunLoopRun + 1705
    frame #22: 0x00007ffff70a6b6e libFoundation.so`CFRunLoopRunSpecific + 510
    frame #23: 0x00007ffff6ffccf2 libFoundation.so`Foundation.RunLoop.run(until: Foundation.Date) -> () + 226
    frame #24: 0x00005555559ad105 2D_Pong`LinuxPlatform.main(self=0x0000555556cc3e30) at LinuxPlatform.swift:58:26
    frame #25: 0x00005555557c1863 2D_Pong`static GameDelegate.main(self=@thick _D_Pong.PongGameDelegate.Type) at GameDelegate.swift:154:30
    frame #26: 0x0000555555c924c3 2D_Pong`static PongGameDelegate.$main(self=@thick _D_Pong.PongGameDelegate.Type) at <compiler-generated>:0
    frame #27: 0x0000555555c9e128 2D_Pong`_D_Pong_main at Pong.swift:46:13
    frame #28: 0x00007ffff67e9d90 libc.so.6`__libc_start_call_main(main=(2D_Pong`_D_Pong_main at Pong.swift), argc=1, argv=0x00007fffffffdfa8) at libc_start_call_main.h:58:16
    frame #29: 0x00007ffff67e9e40 libc.so.6`__libc_start_main_impl(main=(2D_Pong`_D_Pong_main at Pong.swift), argc=1, argv=0x00007fffffffdfa8, init=<unavailable>, fini=<unavailable>, rtld_fini=<unavailable>, stack_end=0x00007fffffffdf98) at libc-start.c:392:3
    frame #30: 0x00005555555eb6f5 2D_Pong`_start + 37
(lldb)
@andymule
Copy link
Author

The problem is either a missing or an empty XResources database. I can't find where the actual file is on ubuntu, but I can say that inserting ANYTHING into the database fixes these crashes. I just did this xrdb -merge <<< "MyApp.background: white"

I'll poke around the code and see if I can't add a default database write before the read as a permanent workaround. This seems more like a bug on X11 library on WSL (maybe all of Ubuntu? idk)

@andymule
Copy link
Author

andymule commented May 3, 2024

In X11Window.swift you just need this string to not be nil and everything runs fine.

I dont actually understand what's supposed to be happening here so I'll leave it to you to patch properly. Thanks for your work!

@preconcurrency @MainActor func updateStoredMetaData(pixelSize: Size2? = nil) {
        var resourceString: UnsafeMutablePointer<CChar>? = XResourceManagerString(xDisplay)
        XrmInitialize() /* Need to initialize the DB before calling Xrm* functions */
        
        if resourceString == nil {
            resourceString = UnsafeMutablePointer<CChar>.allocate(capacity: 1)
        }

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant