After an evaluation, GNOME has moved from Bugzilla to GitLab. Learn more about GitLab.
No new issues can be reported in GNOME Bugzilla anymore.
To report an issue in a GNOME project, go to GNOME GitLab.
Do not go to GNOME Gitlab for: Bluefish, Doxygen, GnuCash, GStreamer, java-gnome, LDTP, NetworkManager, Tomboy.
Bug 766782 - OpenGL in broadway leads to segmentation fault
OpenGL in broadway leads to segmentation fault
Status: RESOLVED FIXED
Product: gtk+
Classification: Platform
Component: Backend: Broadway
3.20.x
Other Linux
: Normal normal
: ---
Assigned To: gtk-bugs
gtk-bugs
Depends on:
Blocks:
 
 
Reported: 2016-05-22 23:29 UTC by Jason Crain
Modified: 2016-05-23 07:54 UTC
See Also:
GNOME target: ---
GNOME version: ---


Attachments
gdk: Provide safe fallback for creating GL contexts (2.23 KB, patch)
2016-05-23 07:35 UTC, Emmanuele Bassi (:ebassi)
none Details | Review
gdk: Provide safe fallback for creating GL contexts (1.71 KB, patch)
2016-05-23 07:53 UTC, Emmanuele Bassi (:ebassi)
committed Details | Review

Description Jason Crain 2016-05-22 23:29:31 UTC
Forwarding from https://bugs.debian.org/823520
==========
When launching an application that uses OpenGL in broadwayd, it crashes with segmentation fault.

Steps to reproduce the issue:
1) broadwayd -a 127.0.0.1 -p 8889 :2 &
2) GDK_BACKEND=broadway BROADWAY_DISPLAY=:2 gtk3-demo
3) Go to 127.0.0.1:8889 in browser
4) Select OpenGL example in the window and launch it
5) The application crashes and the console says: Segmentation fault.
Comment 1 Jason Crain 2016-05-22 23:31:41 UTC
I'm able to reproduce this on Debian unstable with gtk 3.20.4.  Stacktrace is below.

Program received signal SIGSEGV, Segmentation fault.
0x0000000000000000 in ?? ()
  • #0 0x0000000000000000 in
  • #1 gdk_window_get_paint_gl_context
    at /build/gtk+3.0-3.20.4/./gdk/gdkwindow.c line 2773
  • #2 gdk_window_create_gl_context
    at /build/gtk+3.0-3.20.4/./gdk/gdkwindow.c line 2825
  • #3 gtk_gl_area_real_create_context
    at /build/gtk+3.0-3.20.4/./gtk/gtkglarea.c line 332
  • #8 <emit signal ??? on instance 0xa40130 [GtkGLArea]>
    at /build/glib2.0-wnDt2X/glib2.0-2.48.1/./gobject/gsignal.c line 3441
  • #9 gtk_gl_area_realize
    at /build/gtk+3.0-3.20.4/./gtk/gtkglarea.c line 297
  • #13 <emit signal ??? on instance 0xa40130 [GtkGLArea]>
    at /build/glib2.0-wnDt2X/glib2.0-2.48.1/./gobject/gsignal.c line 3441
  • #14 gtk_widget_realize
    at /build/gtk+3.0-3.20.4/./gtk/gtkwidget.c line 5453
  • #15 gtk_widget_map
    at /build/gtk+3.0-3.20.4/./gtk/gtkwidget.c line 4980
  • #16 gtk_box_forall
    at /build/gtk+3.0-3.20.4/./gtk/gtkbox.c line 2661
  • #17 gtk_container_map
    at /build/gtk+3.0-3.20.4/./gtk/gtkcontainer.c line 3681
  • #18 _g_closure_invoke_va
    at /build/glib2.0-wnDt2X/glib2.0-2.48.1/./gobject/gclosure.c line 867
  • #19 g_signal_emit_valist
    at /build/glib2.0-wnDt2X/glib2.0-2.48.1/./gobject/gsignal.c line 3294
  • #20 g_signal_emit
    at /build/glib2.0-wnDt2X/glib2.0-2.48.1/./gobject/gsignal.c line 3441
  • #21 gtk_widget_map
    at /build/gtk+3.0-3.20.4/./gtk/gtkwidget.c line 4982
  • #22 gtk_window_map
    at /build/gtk+3.0-3.20.4/./gtk/gtkwindow.c line 6206
  • #23 _g_closure_invoke_va
    at /build/glib2.0-wnDt2X/glib2.0-2.48.1/./gobject/gclosure.c line 867
  • #24 g_signal_emit_valist
    at /build/glib2.0-wnDt2X/glib2.0-2.48.1/./gobject/gsignal.c line 3294
  • #25 g_signal_emit
    at /build/glib2.0-wnDt2X/glib2.0-2.48.1/./gobject/gsignal.c line 3441
  • #26 gtk_widget_map
    at /build/gtk+3.0-3.20.4/./gtk/gtkwidget.c line 4982
  • #27 gtk_window_show
    at /build/gtk+3.0-3.20.4/./gtk/gtkwindow.c line 6111
  • #31 <emit signal ??? on instance 0xa247f0 [GtkWindow]>
    at /build/glib2.0-wnDt2X/glib2.0-2.48.1/./gobject/gsignal.c line 3441
  • #32 gtk_widget_show
    at /build/gtk+3.0-3.20.4/./gtk/gtkwidget.c line 4783
  • #33 do_glarea
    at /build/gtk+3.0-3.20.4/./demos/gtk-demo/glarea.c line 421
  • #34 run_example_for_row
    at /build/gtk+3.0-3.20.4/./demos/gtk-demo/main.c line 128
  • #35 activate_run
    at /build/gtk+3.0-3.20.4/./demos/gtk-demo/main.c line 162
  • #39 <emit signal ??? on instance 0x9549e0 [GSimpleAction]>
    at /build/glib2.0-wnDt2X/glib2.0-2.48.1/./gobject/gsignal.c line 3441
  • #40 g_simple_action_activate
    at /build/glib2.0-wnDt2X/glib2.0-2.48.1/./gio/gsimpleaction.c line 225
  • #41 gtk_action_muxer_activate_action
    at /build/gtk+3.0-3.20.4/./gtk/gtkactionmuxer.c line 412
  • #42 gtk_action_muxer_activate_action
    at /build/gtk+3.0-3.20.4/./gtk/gtkactionmuxer.c line 414
  • #43 gtk_action_muxer_activate_action
    at /build/gtk+3.0-3.20.4/./gtk/gtkactionmuxer.c line 414
  • #44 gtk_real_button_clicked
    at /build/gtk+3.0-3.20.4/./gtk/gtkbutton.c line 1973
  • #45 _g_closure_invoke_va
    at /build/glib2.0-wnDt2X/glib2.0-2.48.1/./gobject/gclosure.c line 867
  • #46 g_signal_emit_valist
    at /build/glib2.0-wnDt2X/glib2.0-2.48.1/./gobject/gsignal.c line 3294
  • #47 g_signal_emit
    at /build/glib2.0-wnDt2X/glib2.0-2.48.1/./gobject/gsignal.c line 3441
  • #48 gtk_button_do_release
    at /build/gtk+3.0-3.20.4/./gtk/gtkbutton.c line 1843
  • #49 gtk_real_button_released
    at /build/gtk+3.0-3.20.4/./gtk/gtkbutton.c line 1961
  • #50 _g_closure_invoke_va
    at /build/glib2.0-wnDt2X/glib2.0-2.48.1/./gobject/gclosure.c line 867
  • #51 g_signal_emit_valist
    at /build/glib2.0-wnDt2X/glib2.0-2.48.1/./gobject/gsignal.c line 3294
  • #52 g_signal_emit
    at /build/glib2.0-wnDt2X/glib2.0-2.48.1/./gobject/gsignal.c line 3441
  • #53 multipress_released_cb
    at /build/gtk+3.0-3.20.4/./gtk/gtkbutton.c line 666
  • #54 ffi_call_unix64
  • #55 ffi_call
  • #56 g_cclosure_marshal_generic_va
    at /build/glib2.0-wnDt2X/glib2.0-2.48.1/./gobject/gclosure.c line 1604
  • #57 _g_closure_invoke_va
    at /build/glib2.0-wnDt2X/glib2.0-2.48.1/./gobject/gclosure.c line 867
  • #58 g_signal_emit_valist
    at /build/glib2.0-wnDt2X/glib2.0-2.48.1/./gobject/gsignal.c line 3294
  • #59 g_signal_emit
    at /build/glib2.0-wnDt2X/glib2.0-2.48.1/./gobject/gsignal.c line 3441
  • #60 gtk_gesture_multi_press_end
    at /build/gtk+3.0-3.20.4/./gtk/gtkgesturemultipress.c line 282
  • #61 g_cclosure_marshal_VOID__BOXEDv
    at /build/glib2.0-wnDt2X/glib2.0-2.48.1/./gobject/gmarshal.c line 1950
  • #62 _g_closure_invoke_va
    at /build/glib2.0-wnDt2X/glib2.0-2.48.1/./gobject/gclosure.c line 867
  • #63 g_signal_emit_valist
    at /build/glib2.0-wnDt2X/glib2.0-2.48.1/./gobject/gsignal.c line 3294
  • #64 g_signal_emit
    at /build/glib2.0-wnDt2X/glib2.0-2.48.1/./gobject/gsignal.c line 3441
  • #65 _gtk_gesture_check_recognized
    at /build/gtk+3.0-3.20.4/./gtk/gtkgesture.c line 345
  • #66 _gtk_gesture_check_recognized
    at /build/gtk+3.0-3.20.4/./gtk/gtkgesture.c line 386
  • #67 gtk_gesture_handle_event
    at /build/gtk+3.0-3.20.4/./gtk/gtkgesture.c line 777
  • #68 gtk_gesture_single_handle_event
    at /build/gtk+3.0-3.20.4/./gtk/gtkgesturesingle.c line 221
  • #69 gtk_event_controller_handle_event
    at /build/gtk+3.0-3.20.4/./gtk/gtkeventcontroller.c line 230
  • #70 _gtk_widget_run_controllers
    at /build/gtk+3.0-3.20.4/./gtk/gtkwidget.c line 7328
  • #71 _gtk_marshal_BOOLEAN__BOXEDv
    at /build/gtk+3.0-3.20.4/./gtk/gtkmarshalers.c line 131
  • #72 _g_closure_invoke_va
    at /build/glib2.0-wnDt2X/glib2.0-2.48.1/./gobject/gclosure.c line 867
  • #73 g_signal_emit_valist
    at /build/glib2.0-wnDt2X/glib2.0-2.48.1/./gobject/gsignal.c line 3294
  • #74 g_signal_emit
    at /build/glib2.0-wnDt2X/glib2.0-2.48.1/./gobject/gsignal.c line 3441
  • #75 gtk_widget_event_internal
    at /build/gtk+3.0-3.20.4/./gtk/gtkwidget.c line 7703
  • #76 propagate_event
    at /build/gtk+3.0-3.20.4/./gtk/gtkmain.c line 2555
  • #77 propagate_event
    at /build/gtk+3.0-3.20.4/./gtk/gtkmain.c line 2657
  • #78 gtk_main_do_event
    at /build/gtk+3.0-3.20.4/./gtk/gtkmain.c line 1878
  • #79 _gdk_event_emit
    at /build/gtk+3.0-3.20.4/./gdk/gdkevents.c line 73
  • #80 gdk_event_source_dispatch
    at /build/gtk+3.0-3.20.4/./gdk/broadway/gdkeventsource.c line 411
  • #81 g_main_context_dispatch
    at /build/glib2.0-wnDt2X/glib2.0-2.48.1/./glib/gmain.c line 3154
  • #82 g_main_context_dispatch
    at /build/glib2.0-wnDt2X/glib2.0-2.48.1/./glib/gmain.c line 3769
  • #83 g_main_context_iterate
    at /build/glib2.0-wnDt2X/glib2.0-2.48.1/./glib/gmain.c line 3840
  • #84 g_main_context_iteration
    at /build/glib2.0-wnDt2X/glib2.0-2.48.1/./glib/gmain.c line 3901
  • #85 g_application_run
    at /build/glib2.0-wnDt2X/glib2.0-2.48.1/./gio/gapplication.c line 2381
  • #86 main
    at /build/gtk+3.0-3.20.4/./demos/gtk-demo/main.c line 1180

Comment 2 Emmanuele Bassi (:ebassi) 2016-05-23 07:35:42 UTC
Broadway does not support OpenGL.

Having said that, we should probably return an error instead of just crashing.
Comment 3 Emmanuele Bassi (:ebassi) 2016-05-23 07:35:55 UTC
Created attachment 328367 [details] [review]
gdk: Provide safe fallback for creating GL contexts

If the backend does not override GdkWindowClass.create_gl_context()
then we should provide a fallback that gives an error, instead of
crashing.
Comment 4 Emmanuele Bassi (:ebassi) 2016-05-23 07:53:30 UTC
Created attachment 328370 [details] [review]
gdk: Provide safe fallback for creating GL contexts

If the backend does not override GdkWindowClass.create_gl_context()
then we should provide a fallback that gives an error, instead of
crashing.
Comment 5 Emmanuele Bassi (:ebassi) 2016-05-23 07:54:13 UTC
Attachment 328370 [details] pushed as 9c3802f - gdk: Provide safe fallback for creating GL contexts