==715736== Memcheck, a memory error detector
==715736== Copyright (C) 2002-2022, and GNU GPL'd, by Julian Seward et al.
==715736== Using Valgrind-3.22.0 and LibVEX; rerun with -h for copyright info
==715736== Command: io.elementary.camera
==715736==
==715736== Invalid write of size 8
==715736== at 0x1A1DF7D8: UnknownInlinedFun (list.h:61)
==715736== by 0x1A1DF7D8: destroy_port (gstpipewiredeviceprovider.c:489)
==715736== by 0x1A27BB87: pw_proxy_destroy (proxy.c:230)
==715736== by 0x1A27BDB7: pw_proxy_remove (proxy.c:254)
==715736== by 0x1A246D08: UnknownInlinedFun (core.c:166)
==715736== by 0x1A246D08: UnknownInlinedFun (map.h:218)
==715736== by 0x1A246D08: UnknownInlinedFun (core.c:205)
==715736== by 0x1A246D08: proxy_core_removed (core.c:186)
==715736== by 0x1A27BDB7: pw_proxy_remove (proxy.c:254)
==715736== by 0x1A247177: pw_core_disconnect (core.c:487)
==715736== by 0x1A1DC777: gst_pipewire_core_release (gstpipewirecore.c:174)
==715736== by 0x1A1DF3B6: gst_pipewire_device_provider_probe (gstpipewiredeviceprovider.c:624)
==715736== by 0x48D5C8F: gst_device_provider_get_devices (gstdeviceprovider.c:424)
==715736== by 0x48EAC79: gst_device_monitor_get_devices (gstdevicemonitor.c:447)
==715736== by 0x1158CD: UnknownInlinedFun (CameraView.vala:162)
==715736== by 0x1158CD: camera_main_window_constructor (MainWindow.vala:113)
==715736== by 0x49DEA4B: g_object_new_with_custom_constructor (gobject.c:2163)
==715736== Address 0x17f293c0 is 288 bytes inside a block of size 304 free'd
==715736== at 0x4845B2C: free (vg_replace_malloc.c:985)
==715736== by 0x1A246D08: UnknownInlinedFun (core.c:166)
==715736== by 0x1A246D08: UnknownInlinedFun (map.h:218)
==715736== by 0x1A246D08: UnknownInlinedFun (core.c:205)
==715736== by 0x1A246D08: proxy_core_removed (core.c:186)
==715736== by 0x1A27BDB7: pw_proxy_remove (proxy.c:254)
==715736== by 0x1A247177: pw_core_disconnect (core.c:487)
==715736== by 0x1A1DC777: gst_pipewire_core_release (gstpipewirecore.c:174)
==715736== by 0x1A1DF3B6: gst_pipewire_device_provider_probe (gstpipewiredeviceprovider.c:624)
==715736== by 0x48D5C8F: gst_device_provider_get_devices (gstdeviceprovider.c:424)
==715736== by 0x48EAC79: gst_device_monitor_get_devices (gstdevicemonitor.c:447)
==715736== by 0x1158CD: UnknownInlinedFun (CameraView.vala:162)
==715736== by 0x1158CD: camera_main_window_constructor (MainWindow.vala:113)
==715736== by 0x49DEA4B: g_object_new_with_custom_constructor (gobject.c:2163)
==715736== by 0x49E0D29: UnknownInlinedFun (gobject.c:2243)
==715736== by 0x49E0D29: g_object_new_valist (gobject.c:2584)
==715736== by 0x49E155E: g_object_new (gobject.c:2057)
==715736== Block was alloc'd at
==715736== at 0x4849E60: calloc (vg_replace_malloc.c:1595)
==715736== by 0x1A27B75E: pw_proxy_new (proxy.c:80)
==715736== by 0x1A45E46D: registry_marshal_bind.lto_priv.0 (protocol-native.c:1852)
==715736== by 0x1A1E07D7: UnknownInlinedFun (core.h:517)
==715736== by 0x1A1E07D7: registry_event_global (gstpipewiredeviceprovider.c:510)
==715736== by 0x1A45BBD1: registry_demarshal_global.lto_priv.0 (protocol-native.c:1826)
==715736== by 0x1A449020: process_remote (module-protocol-native.c:1037)
==715736== by 0x1A449807: on_remote_data (module-protocol-native.c:1071)
==715736== by 0x1A2EEF15: loop_iterate (loop.c:496)
==715736== by 0x1A290E16: do_loop (thread-loop.c:295)
==715736== by 0x58F9896: start_thread (pthread_create.c:444)
==715736== by 0x5980563: clone (clone.S:100)
==715736==
==715736== Invalid write of size 8
==715736== at 0x1A1DF7DF: UnknownInlinedFun (list.h:62)
==715736== by 0x1A1DF7DF: destroy_port (gstpipewiredeviceprovider.c:489)
==715736== by 0x1A27BB87: pw_proxy_destroy (proxy.c:230)
==715736== by 0x1A27BDB7: pw_proxy_remove (proxy.c:254)
==715736== by 0x1A246D08: UnknownInlinedFun (core.c:166)
==715736== by 0x1A246D08: UnknownInlinedFun (map.h:218)
==715736== by 0x1A246D08: UnknownInlinedFun (core.c:205)
==715736== by 0x1A246D08: proxy_core_removed (core.c:186)
==715736== by 0x1A27BDB7: pw_proxy_remove (proxy.c:254)
==715736== by 0x1A247177: pw_core_disconnect (core.c:487)
==715736== by 0x1A1DC777: gst_pipewire_core_release (gstpipewirecore.c:174)
==715736== by 0x1A1DF3B6: gst_pipewire_device_provider_probe (gstpipewiredeviceprovider.c:624)
==715736== by 0x48D5C8F: gst_device_provider_get_devices (gstdeviceprovider.c:424)
==715736== by 0x48EAC79: gst_device_monitor_get_devices (gstdevicemonitor.c:447)
==715736== by 0x1158CD: UnknownInlinedFun (CameraView.vala:162)
==715736== by 0x1158CD: camera_main_window_constructor (MainWindow.vala:113)
==715736== by 0x49DEA4B: g_object_new_with_custom_constructor (gobject.c:2163)
==715736== Address 0x17f293c8 is 296 bytes inside a block of size 304 free'd
==715736== at 0x4845B2C: free (vg_replace_malloc.c:985)
==715736== by 0x1A246D08: UnknownInlinedFun (core.c:166)
==715736== by 0x1A246D08: UnknownInlinedFun (map.h:218)
==715736== by 0x1A246D08: UnknownInlinedFun (core.c:205)
==715736== by 0x1A246D08: proxy_core_removed (core.c:186)
==715736== by 0x1A27BDB7: pw_proxy_remove (proxy.c:254)
==715736== by 0x1A247177: pw_core_disconnect (core.c:487)
==715736== by 0x1A1DC777: gst_pipewire_core_release (gstpipewirecore.c:174)
==715736== by 0x1A1DF3B6: gst_pipewire_device_provider_probe (gstpipewiredeviceprovider.c:624)
==715736== by 0x48D5C8F: gst_device_provider_get_devices (gstdeviceprovider.c:424)
==715736== by 0x48EAC79: gst_device_monitor_get_devices (gstdevicemonitor.c:447)
==715736== by 0x1158CD: UnknownInlinedFun (CameraView.vala:162)
==715736== by 0x1158CD: camera_main_window_constructor (MainWindow.vala:113)
==715736== by 0x49DEA4B: g_object_new_with_custom_constructor (gobject.c:2163)
==715736== by 0x49E0D29: UnknownInlinedFun (gobject.c:2243)
==715736== by 0x49E0D29: g_object_new_valist (gobject.c:2584)
==715736== by 0x49E155E: g_object_new (gobject.c:2057)
==715736== Block was alloc'd at
==715736== at 0x4849E60: calloc (vg_replace_malloc.c:1595)
==715736== by 0x1A27B75E: pw_proxy_new (proxy.c:80)
==715736== by 0x1A45E46D: registry_marshal_bind.lto_priv.0 (protocol-native.c:1852)
==715736== by 0x1A1E07D7: UnknownInlinedFun (core.h:517)
==715736== by 0x1A1E07D7: registry_event_global (gstpipewiredeviceprovider.c:510)
==715736== by 0x1A45BBD1: registry_demarshal_global.lto_priv.0 (protocol-native.c:1826)
==715736== by 0x1A449020: process_remote (module-protocol-native.c:1037)
==715736== by 0x1A449807: on_remote_data (module-protocol-native.c:1071)
==715736== by 0x1A2EEF15: loop_iterate (loop.c:496)
==715736== by 0x1A290E16: do_loop (thread-loop.c:295)
==715736== by 0x58F9896: start_thread (pthread_create.c:444)
==715736== by 0x5980563: clone (clone.S:100)
==715736==
(io.elementary.camera:715736): Gdk-WARNING **: 01:25:22.780: eglMakeCurrent failed
(io.elementary.camera:715736): Gdk-WARNING **: 01:25:22.801: eglMakeCurrent failed
(io.elementary.camera:715736): Gdk-WARNING **: 01:25:23.156: eglMakeCurrent failed
==715736== Invalid read of size 1
==715736== at 0x56F74D4: UnknownInlinedFun (gdkglcontext.c:420)
==715736== by 0x56F74D4: gdk_gl_texture_from_surface (gdkgl.c:734)
==715736== by 0x5700CBF: gdk_window_end_paint_internal (gdkwindow.c:3060)
==715736== by 0x5700DDA: UnknownInlinedFun (gdkwindow.c:3311)
==715736== by 0x5700DDA: gdk_window_end_draw_frame (gdkwindow.c:3294)
==715736== by 0x52503B9: gtk_widget_render (gtkwidget.c:17613)
==715736== by 0x50ED7FF: UnknownInlinedFun (gtkmain.c:1844)
==715736== by 0x50ED7FF: gtk_main_do_event (gtkmain.c:1691)
==715736== by 0x56EB416: UnknownInlinedFun (gdkevents.c:73)
==715736== by 0x56EB416: _gdk_event_emit (gdkevents.c:67)
==715736== by 0x56FD7B8: _gdk_window_process_updates_recurse_helper.lto_priv.0 (gdkwindow.c:3874)
==715736== by 0x5701E84: gdk_window_process_updates_internal (gdkwindow.c:4020)
==715736== by 0x5702090: UnknownInlinedFun (gdkwindow.c:4215)
==715736== by 0x5702090: gdk_window_process_updates_with_mode.lto_priv.0 (gdkwindow.c:4186)
==715736== by 0x49EDE84: UnknownInlinedFun (gclosure.c:895)
==715736== by 0x49EDE84: signal_emit_valist_unlocked (gsignal.c:3516)
==715736== by 0x49EDF90: g_signal_emit_valist (gsignal.c:3355)
==715736== by 0x49EE052: g_signal_emit (gsignal.c:3675)
==715736== Address 0xffffffffffffffe4 is not stack'd, malloc'd or (recently) free'd
==715736==
==715736==
==715736== Process terminating with default action of signal 11 (SIGSEGV): dumping core
==715736== Access not within mapped region at address 0xFFFFFFFFFFFFFFE4
==715736== at 0x56F74D4: UnknownInlinedFun (gdkglcontext.c:420)
==715736== by 0x56F74D4: gdk_gl_texture_from_surface (gdkgl.c:734)
==715736== by 0x5700CBF: gdk_window_end_paint_internal (gdkwindow.c:3060)
==715736== by 0x5700DDA: UnknownInlinedFun (gdkwindow.c:3311)
==715736== by 0x5700DDA: gdk_window_end_draw_frame (gdkwindow.c:3294)
==715736== by 0x52503B9: gtk_widget_render (gtkwidget.c:17613)
==715736== by 0x50ED7FF: UnknownInlinedFun (gtkmain.c:1844)
==715736== by 0x50ED7FF: gtk_main_do_event (gtkmain.c:1691)
==715736== by 0x56EB416: UnknownInlinedFun (gdkevents.c:73)
==715736== by 0x56EB416: _gdk_event_emit (gdkevents.c:67)
==715736== by 0x56FD7B8: _gdk_window_process_updates_recurse_helper.lto_priv.0 (gdkwindow.c:3874)
==715736== by 0x5701E84: gdk_window_process_updates_internal (gdkwindow.c:4020)
==715736== by 0x5702090: UnknownInlinedFun (gdkwindow.c:4215)
==715736== by 0x5702090: gdk_window_process_updates_with_mode.lto_priv.0 (gdkwindow.c:4186)
==715736== by 0x49EDE84: UnknownInlinedFun (gclosure.c:895)
==715736== by 0x49EDE84: signal_emit_valist_unlocked (gsignal.c:3516)
==715736== by 0x49EDF90: g_signal_emit_valist (gsignal.c:3355)
==715736== by 0x49EE052: g_signal_emit (gsignal.c:3675)
==715736== If you believe this happened as a result of a stack
==715736== overflow in your program's main thread (unlikely but
==715736== possible), you can try to increase the size of the
==715736== main thread stack using the --main-stacksize= flag.
==715736== The main thread stack size used in this run was 8388608.
==715736==
==715736== HEAP SUMMARY:
==715736== in use at exit: 20,608,344 bytes in 83,818 blocks
==715736== total heap usage: 845,848 allocs, 762,030 frees, 98,532,554 bytes allocated
==715736==
==715736== LEAK SUMMARY:
==715736== definitely lost: 52,528 bytes in 9 blocks
==715736== indirectly lost: 22,976 bytes in 962 blocks
==715736== possibly lost: 114,723 bytes in 1,510 blocks
==715736== still reachable: 19,956,565 bytes in 78,289 blocks
==715736== suppressed: 0 bytes in 0 blocks
==715736== Rerun with --leak-check=full to see details of leaked memory
==715736==
==715736== For lists of detected and suppressed errors, rerun with: -s
==715736== ERROR SUMMARY: 35 errors from 3 contexts (suppressed: 0 from 0)
I got a crash report that Camera crashes on start on Fedora 38 (GNOME/Wayland), and I was able to reproduce the same issue on Fedora 39 (both GNOME/Wayland and GNOME/Xorg) - I don't have a fully functional Pantheon session yet where I can test this, but I don't think Pantheon and GNOME/Xorg should be different here.
On Wayland, there are some Gdk-WARNING log messages, and on Xorg, there are GStreamer-CRITICAL log messages, but the crash that immediately follows those looks similar (null pointer dereference?).
I ran
valgrind io.elementary.cameraon both GNOME/Wayland and GNOME/Xorg on Fedora 39 and these are the logs that also includes the backtraces for the invalid reads / writes (there seem to be both use-after-free issues and null-pointer dereferences).log: valgrind io.elementary.camera on Wayland
log: valgrind io.elementary.camera on Xorg