JuliaGraphics / QML.jl

Build Qt6 QML interfaces for Julia programs.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

`exec_async` crashes

rasmushenningsson opened this issue · comments

exec_async is causing frequent crashes (segmentation faults) for me - but exec works fine.
It crashes every time I run basic/observable.jl from QmlJuliaExamples.

Sometimes there's also a printout saying Maximum call stack size exceeded when using exec_async.

I can confirm that the example observable.jl crashes on Ubuntu 20.04 using Julia 1.9.3 and QML 0.8.
Stacktrace:

julia> include("observable.jl")
Output changed to 2.0

julia> 
[82118] signal (11.1): Speicherzugriffsfehler
in expression starting at none:0
_ZN8QVariantD1Ev at /home/ufechner/.julia/artifacts/8a8d0ba819ce1e30b93f34cc61f891d1334be59d/lib/libQt6Core.so.6 (unknown line)
_ZN11QQmlBinding8doUpdateERKN24QQmlJavaScriptExpression13DeleteWatcherE6QFlagsIN16QQmlPropertyData9WriteFlagEERN3QV45ScopeE at /home/ufechner/.julia/artifacts/5ec56e0e1b25eaaa5a9562609d54195b360a0348/lib/libQt6Qml.so.6 (unknown line)
_ZN11QQmlBinding6updateE6QFlagsIN16QQmlPropertyData9WriteFlagEE at /home/ufechner/.julia/artifacts/5ec56e0e1b25eaaa5a9562609d54195b360a0348/lib/libQt6Qml.so.6 (unknown line)
_ZN12QQmlNotifier10emitNotifyEP20QQmlNotifierEndpointPPv at /home/ufechner/.julia/artifacts/5ec56e0e1b25eaaa5a9562609d54195b360a0348/lib/libQt6Qml.so.6 (unknown line)
_Z10doActivateILb0EEvP7QObjectiPPv at /home/ufechner/.julia/artifacts/8a8d0ba819ce1e30b93f34cc61f891d1334be59d/lib/libQt6Core.so.6 (unknown line)
_Z10doActivateILb0EEvP7QObjectiPPv at /home/ufechner/.julia/artifacts/8a8d0ba819ce1e30b93f34cc61f891d1334be59d/lib/libQt6Core.so.6 (unknown line)
_ZN10QQuickItem5eventEP6QEvent at /home/ufechner/.julia/artifacts/5ec56e0e1b25eaaa5a9562609d54195b360a0348/lib/libQt6Quick.so.6 (unknown line)
_ZN16QCoreApplication15notifyInternal2EP7QObjectP6QEvent at /home/ufechner/.julia/artifacts/8a8d0ba819ce1e30b93f34cc61f891d1334be59d/lib/libQt6Core.so.6 (unknown line)
_ZN10QQuickItem5eventEP6QEvent at /home/ufechner/.julia/artifacts/5ec56e0e1b25eaaa5a9562609d54195b360a0348/lib/libQt6Quick.so.6 (unknown line)
_ZN16QCoreApplication15notifyInternal2EP7QObjectP6QEvent at /home/ufechner/.julia/artifacts/8a8d0ba819ce1e30b93f34cc61f891d1334be59d/lib/libQt6Core.so.6 (unknown line)
_ZN10QQuickItem5eventEP6QEvent at /home/ufechner/.julia/artifacts/5ec56e0e1b25eaaa5a9562609d54195b360a0348/lib/libQt6Quick.so.6 (unknown line)
_ZN16QCoreApplication15notifyInternal2EP7QObjectP6QEvent at /home/ufechner/.julia/artifacts/8a8d0ba819ce1e30b93f34cc61f891d1334be59d/lib/libQt6Core.so.6 (unknown line)
_ZN10QQuickItem5eventEP6QEvent at /home/ufechner/.julia/artifacts/5ec56e0e1b25eaaa5a9562609d54195b360a0348/lib/libQt6Quick.so.6 (unknown line)
_ZN16QCoreApplication15notifyInternal2EP7QObjectP6QEvent at /home/ufechner/.julia/artifacts/8a8d0ba819ce1e30b93f34cc61f891d1334be59d/lib/libQt6Core.so.6 (unknown line)
_ZN12QQuickWindow5eventEP6QEvent at /home/ufechner/.julia/artifacts/5ec56e0e1b25eaaa5a9562609d54195b360a0348/lib/libQt6Quick.so.6 (unknown line)
_ZN16QCoreApplication15notifyInternal2EP7QObjectP6QEvent at /home/ufechner/.julia/artifacts/8a8d0ba819ce1e30b93f34cc61f891d1334be59d/lib/libQt6Core.so.6 (unknown line)
_ZN22QGuiApplicationPrivate21processActivatedEventEPN29QWindowSystemInterfacePrivate20ActivatedWindowEventE at /home/ufechner/.julia/artifacts/8a8d0ba819ce1e30b93f34cc61f891d1334be59d/lib/libQt6Gui.so (unknown line)
_ZN22QWindowSystemInterface22sendWindowSystemEventsE6QFlagsIN10QEventLoop17ProcessEventsFlagEE at /home/ufechner/.julia/artifacts/8a8d0ba819ce1e30b93f34cc61f891d1334be59d/lib/libQt6Gui.so (unknown line)
_ZL17xcbSourceDispatchP8_GSourcePFiPvES1_ at /home/ufechner/.julia/artifacts/8a8d0ba819ce1e30b93f34cc61f891d1334be59d/plugins/platforms/../../lib/libQt6XcbQpa.so.6 (unknown line)
g_main_context_dispatch at /home/ufechner/.julia/artifacts/b6ebc4def1211ec4043d7c055f450d59f56747cc/lib/libglib-2.0.so.0 (unknown line)
g_main_context_iterate.isra.26 at /home/ufechner/.julia/artifacts/b6ebc4def1211ec4043d7c055f450d59f56747cc/lib/libglib-2.0.so.0 (unknown line)
g_main_context_iteration at /home/ufechner/.julia/artifacts/b6ebc4def1211ec4043d7c055f450d59f56747cc/lib/libglib-2.0.so.0 (unknown line)
_ZN20QEventDispatcherGlib13processEventsE6QFlagsIN10QEventLoop17ProcessEventsFlagEE at /home/ufechner/.julia/artifacts/8a8d0ba819ce1e30b93f34cc61f891d1334be59d/lib/libQt6Core.so.6 (unknown line)
_ZN16QCoreApplication13processEventsE6QFlagsIN10QEventLoop17ProcessEventsFlagEEi at /home/ufechner/.julia/artifacts/8a8d0ba819ce1e30b93f34cc61f891d1334be59d/lib/libQt6Core.so.6 (unknown line)
process_events at /home/ufechner/.julia/packages/CxxWrap/VnssN/src/CxxWrap.jl:624 [inlined]
#23 at /home/ufechner/.julia/packages/QML/UTMZh/src/QML.jl:609 [inlined]
macro expansion at ./asyncevent.jl:281 [inlined]
#702 at ./task.jl:134
unknown function (ip: 0x7f37db22b92f)
_jl_invoke at /cache/build/default-amdci5-5/julialang/julia-release-1-dot-9/src/gf.c:2758 [inlined]
ijl_apply_generic at /cache/build/default-amdci5-5/julialang/julia-release-1-dot-9/src/gf.c:2940
jl_apply at /cache/build/default-amdci5-5/julialang/julia-release-1-dot-9/src/julia.h:1880 [inlined]
start_task at /cache/build/default-amdci5-5/julialang/julia-release-1-dot-9/src/task.c:1092
Allocations: 5938121 (Pool: 5931601; Big: 6520); GC: 9
Speicherzugriffsfehler (Speicherabzug geschrieben)

@barche Any idea what could be the reason or how to further debug this issue?

I can confirm this and actually noticed it before the release, but I have no idea what causes it. It is due to a change between Qt 6.4 and 6.5.

Is it possible that this issue is related? JuliaGraphics/jlqml#15

Unfortunately no. I have no idea what is causing this, what I have determined is that launching any Qt6 event loop from within a Julia task (which is what exec_async does) crashes the program. Even if we place the normal exec in a julia @async call it crashes. There must be some kind of interaction between the Julia task system and the Qt event processing code, but I don't know what it is.

While the examples listmodel-fromjulia and observable crash, the example repl-background just works fine. (On Ubuntu 20.04).

@barche Any idea?

The difference is that in the repl-background example the QML doesn't contain any UI elements that take input. If you add e.g. a button it also crashes. I still have no idea at all on the root cause.

Both examples don't crash if you start Julia with: JULIA_COPY_STACKS=yes julia --project

Thanks to @ufechner7 's observation in barche/QmlJuliaExamples#12 we now know that a workaround is to set JULIA_COPY_STACKS=yes before launching Julia. Searching further on this in the Julia issues, the full explanation can be found here: JuliaLang/julia#31104 (comment)

The reason is that Qt 6.5 has a new stack bound checker: https://bugreports.qt.io/browse/QTBUG-106875, so that's why Qt 6.4 was not affected.

So what is the way to proceed?

  • document this parameter in the docstring of exec_async and the effected examples
  • add an assertion to exec_async that JULIA_COPY_STACKS is set to yes?
  • revert to Qt 6.4 ? (probably not)
    Is there any other way to avoid the need for this workaround?

The only currently viable workaround is setting JULIA_COPY_STACKS, so I think both an assertion and a docstring are needed.

Thanks to the golden tip here: JuliaLang/julia#31104 (comment)

I now have a fix running locally, so this should be committed soon.

You are a genius!

Fixed in QML.jl 0.8.1