GNOME Bugzilla – Bug 654913
Cheese should check the return value of gtk_clutter_init() for failure
Last modified: 2011-09-09 15:41:04 UTC
Created attachment 192250 [details] debugging output for cogl 1.7.2 (triggered by launching cheese 3.0.2) A segmentation fault in cogl 1.7.2 and current git (1.7.3/2.0.0 git version 1.7.6) is triggered by just launching cheese 3.0.2. Please see attached debugging information (for both versions, although they should be similar to each other).
Created attachment 192251 [details] debugging output for cogl git (triggered by launching cheese 3.0.2)
the issue is not a segfault in Cogl: Starting program: /usr/bin/cheese [Thread debugging using libthread_db enabled] (cheese:30587): Clutter-CRITICAL **: Unable to initialize Clutter: Unable to find suitable fbconfig for the GLX context: Unable to find fbconfig with rgba visual [New Thread 0x7fffe52a0700 (LWP 30591)] [New Thread 0x7fffe4897700 (LWP 30592)] the issue is that Clutter does not initialize properly, and yet you go on instead of just gracefully exiting.
If you read below in that dump, there is a segmentation fault occurring in cogl. Nothing should ever leave the user with a segmentation fault in my opinion ! Even if there is an unrecoverable condition, the program or the library should abort gracefully with an error message trying to explain what is going on. However, it's still happening with cogl version 1.7.4 (released in the meanwhile). All I can do is to try clutter from git. So, that's what I am going to do now and then I will update...
Created attachment 192393 [details] debugging output using cogl 1.7.4 and clutter from git This attachment should be more informative than the previous two (no compiler optimisation).
So, unfortunately, it's still happening with cogl 1.7.4 and clutter from git.
Seems like cogl pipeline is not making sure that authority != NULL.
And before then, the real issue seems to be that cogl_material_new() called from clutter_texture_init() returns NULL.
(In reply to comment #3) > If you read below in that dump, there is a segmentation fault occurring in > cogl. > > Nothing should ever leave the user with a segmentation fault in my opinion ! Clutter will return an error code from clutter_init(); applications using Clutter should honour this error code and abort gracefully. anything happening after that is undefined, and may include segmentation faults. > Even if there is an unrecoverable condition, the program or the library should > abort gracefully with an error message trying to explain what is going on. exactly what Clutter does: it returns an error code and prints an error message. re-assigning to Cheese.
It seems to me that the segmentation fault is occurring in cogl, because it is not checking that authority is not NULL, when cogl/cogl_material_{new,set_layer}() is called from clutter_texture_init() before clutter could return any error code and/or message. Of course checking that authority is not NULL in cogl (and producing an error code and/or message) is only part of the problem, but I do like robust code, anyone does... If clutter could understand that something is going wrong when calling cogl_material_{new,set_layer}(), then clutter could also react to such anomalous condition and return an error code and/or message. Only at that point, I suppose, cheese could eventually understand something is wrong with clutter. Otherwise if (clutter crashes because) cogl crashes, how could cheese realise that something is wrong if the function crashes before returning to the caller in cheese ? Or at least that is my understanding...
And you didn't reassign it to cheese if that is what you wanted to do. It seems that you just moved it from cogl version 1.7.x to cogl version unspecified and from cogl/CoglPipeline to cogl/general. I tagged again version 1.7.x because I have no proof that it occurs with other versions (other than cogl git).
I think I got your point now. You mean that cheese should check the return value of gtk_clutter_init() and make sure that it is != CLUTTER_INIT_SUCCESS. Yes, that makes sense. If that is carried out, then cheese would exit immediately. So perhaps, you meant something like this: --- cheese-3.0.2/src/cheese-main.c 2011-07-18 02:39:54.000000000 +0200 +++ cheese-3.0.2-detect-clutter-init-failure/src/cheese-main.c 2011-07-22 17:12:32.132885920 +0200 @@ -340,7 +340,7 @@ gint _vala_main (gchar** args, int args_ bindtextdomain (GETTEXT_PACKAGE, PACKAGE_LOCALEDIR); bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8"); textdomain (GETTEXT_PACKAGE); - gtk_clutter_init (&args_length1, &args); + if (gtk_clutter_init (&args_length1, &args) != CLUTTER_INIT_SUCCESS) return 0; _tmp0_ = cheese_main_new ("org.gnome.Cheese", G_APPLICATION_FLAGS_NONE); _g_object_unref0 (app); app = _tmp0_; --- cheese-3.0.2/libcheese/cheese-widget.c 2011-06-15 04:56:13.000000000 +0200 +++ cheese-3.0.2-detect-clutter-init-failure/libcheese/cheese-widget.c 2011-07-22 17:19:12.038501047 +0200 @@ -385,7 +385,7 @@ cheese_widget_class_init (CheeseWidgetCl GObjectClass *object_class = G_OBJECT_CLASS (klass); GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); - gtk_clutter_init (NULL, NULL); + if (gtk_clutter_init (NULL, NULL) != CLUTTER_INIT_SUCCESS) return; clutter_gst_init (NULL, NULL); object_class->finalize = cheese_widget_finalize; --- cheese-3.0.2/tests/cheese-test-camera.c 2011-06-15 04:56:13.000000000 +0200 +++ cheese-3.0.2-detect-clutter-init-failure/tests/cheese-test-camera.c 2011-07-22 17:20:19.137598935 +0200 @@ -42,7 +42,7 @@ main (int argc, char **argv) bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8"); textdomain (GETTEXT_PACKAGE); - gtk_clutter_init (&argc, &argv); + if (gtk_clutter_init (&argc, &argv) != CLUTTER_INIT_SUCCESS) return 1; window = gtk_window_new (GTK_WINDOW_TOPLEVEL); gtk_window_set_default_size (GTK_WINDOW (window), 400, 300); --- cheese-3.0.2/tests/cheese-test-chooser.c 2011-06-15 04:56:13.000000000 +0200 +++ cheese-3.0.2-detect-clutter-init-failure/tests/cheese-test-chooser.c 2011-07-22 17:20:38.707634186 +0200 @@ -35,7 +35,7 @@ main (int argc, char **argv) bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8"); textdomain (GETTEXT_PACKAGE); - gtk_clutter_init (&argc, &argv); + if (gtk_clutter_init (&argc, &argv) != CLUTTER_INIT_SUCCESS) return 1; window = cheese_avatar_chooser_new (); g_signal_connect (G_OBJECT (window), "response", --- cheese-3.0.2/tests/cheese-test-widget.c 2011-06-15 04:56:13.000000000 +0200 +++ cheese-3.0.2-detect-clutter-init-failure/tests/cheese-test-widget.c 2011-07-22 17:20:56.986669274 +0200 @@ -30,7 +30,7 @@ main (int argc, char **argv) bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8"); textdomain (GETTEXT_PACKAGE); - gtk_clutter_init (&argc, &argv); + if (gtk_clutter_init (&argc, &argv) != CLUTTER_INIT_SUCCESS) return 1; window = gtk_window_new (GTK_WINDOW_TOPLEVEL); gtk_window_set_default_size (GTK_WINDOW (window), 400, 300);
But maybe tomorrow comes another application which does not check for CLUTTER_INIT_SUCCESS and we end up in the same situation of a segmentation fault ? In any case, let's get to the point, why is clutter failing to initialise ? [hb4l@vortex tests]$ cheese (cheese:879): Clutter-CRITICAL **: Unable to initialize Clutter: Unable to find suitable fbconfig for the GLX context: Unable to find fbconfig with rgba visual [hb4l@vortex tests]$ CLUTTER_DISABLE_ARGB_VISUAL=1 cheese failed to create drawable (cheese:880): Clutter-CRITICAL **: Unable to initialize Clutter: Unable to select the newly created GLX context I am using the nv driver from xorg because the original NVidia driver has never been working. It mentions GLX, so perhaps the following logs might help ? [hb4l@vortex tests]# grep GL /var/log/Xorg.0.log [ 64.025] (==) AIGLX enabled [ 64.025] (II) Loading extension GLX [ 67.775] (II) AIGLX: Screen 0 is not DRI2 capable [ 67.775] (II) AIGLX: Screen 0 is not DRI capable [ 67.887] (II) AIGLX: Loaded and initialized /usr/lib64/dri/swrast_dri.so [ 67.887] (II) GLX: Initialized DRISWRAST GL provider for screen 0 [hb4l@vortex ~]$ glxinfo name of display: :0.0 display: :0 screen: 0 direct rendering: Yes server glx vendor string: SGI server glx version string: 1.4 server glx extensions: GLX_ARB_multisample, GLX_EXT_visual_info, GLX_EXT_visual_rating, GLX_EXT_import_context, GLX_EXT_texture_from_pixmap, GLX_OML_swap_method, GLX_SGI_make_current_read, GLX_SGIS_multisample, GLX_SGIX_fbconfig, GLX_SGIX_pbuffer, GLX_MESA_copy_sub_buffer, GLX_INTEL_swap_event client glx vendor string: Mesa Project and SGI client glx version string: 1.4 client glx extensions: GLX_ARB_get_proc_address, GLX_ARB_multisample, GLX_EXT_import_context, GLX_EXT_visual_info, GLX_EXT_visual_rating, GLX_MESA_copy_sub_buffer, GLX_MESA_swap_control, GLX_OML_swap_method, GLX_OML_sync_control, GLX_SGI_make_current_read, GLX_SGI_swap_control, GLX_SGI_video_sync, GLX_SGIS_multisample, GLX_SGIX_fbconfig, GLX_SGIX_pbuffer, GLX_SGIX_visual_select_group, GLX_EXT_texture_from_pixmap, GLX_INTEL_swap_event GLX version: 1.4 GLX extensions: GLX_ARB_get_proc_address, GLX_ARB_multisample, GLX_EXT_import_context, GLX_EXT_visual_info, GLX_EXT_visual_rating, GLX_OML_swap_method, GLX_SGIS_multisample, GLX_SGIX_fbconfig, GLX_SGIX_pbuffer, GLX_INTEL_swap_event OpenGL vendor string: Mesa Project OpenGL renderer string: Software Rasterizer OpenGL version string: 2.1 Mesa 7.10.3 OpenGL shading language version string: 1.20 OpenGL extensions: GL_ARB_copy_buffer, GL_ARB_depth_clamp, GL_ARB_depth_texture, GL_ARB_draw_buffers, GL_ARB_draw_elements_base_vertex, GL_ARB_explicit_attrib_location, GL_ARB_fragment_coord_conventions, GL_ARB_fragment_program, GL_ARB_fragment_program_shadow, GL_ARB_fragment_shader, GL_ARB_framebuffer_object, GL_ARB_half_float_pixel, GL_ARB_half_float_vertex, GL_ARB_map_buffer_range, GL_ARB_multisample, GL_ARB_multitexture, GL_ARB_occlusion_query, GL_ARB_pixel_buffer_object, GL_ARB_point_parameters, GL_ARB_point_sprite, GL_ARB_provoking_vertex, GL_ARB_shader_objects, GL_ARB_shading_language_100, GL_ARB_shadow_ambient, GL_ARB_shadow, GL_ARB_sync, GL_ARB_texture_border_clamp, GL_ARB_texture_compression, GL_ARB_texture_cube_map, GL_ARB_texture_env_add, GL_ARB_texture_env_combine, GL_ARB_texture_env_crossbar, GL_ARB_texture_env_dot3, GL_ARB_texture_mirrored_repeat, GL_ARB_texture_non_power_of_two, GL_ARB_texture_rectangle, GL_ARB_texture_rg, GL_ARB_texture_swizzle, GL_ARB_transpose_matrix, GL_ARB_vertex_array_bgra, GL_ARB_vertex_array_object, GL_ARB_vertex_buffer_object, GL_ARB_vertex_program, GL_ARB_vertex_shader, GL_ARB_window_pos, GL_EXT_abgr, GL_EXT_bgra, GL_EXT_blend_color, GL_EXT_blend_equation_separate, GL_EXT_blend_func_separate, GL_EXT_blend_logic_op, GL_EXT_blend_minmax, GL_EXT_blend_subtract, GL_EXT_compiled_vertex_array, GL_EXT_copy_texture, GL_EXT_depth_bounds_test, GL_EXT_draw_buffers2, GL_EXT_draw_range_elements, GL_EXT_fog_coord, GL_EXT_framebuffer_blit, GL_EXT_framebuffer_multisample, GL_EXT_framebuffer_object, GL_EXT_gpu_program_parameters, GL_EXT_multi_draw_arrays, GL_EXT_packed_depth_stencil, GL_EXT_packed_pixels, GL_EXT_paletted_texture, GL_EXT_pixel_buffer_object, GL_EXT_point_parameters, GL_EXT_polygon_offset, GL_EXT_provoking_vertex, GL_EXT_rescale_normal, GL_EXT_secondary_color, GL_EXT_separate_shader_objects, GL_EXT_separate_specular_color, GL_EXT_shadow_funcs, GL_EXT_shared_texture_palette, GL_EXT_stencil_two_side, GL_EXT_stencil_wrap, GL_EXT_subtexture, GL_EXT_texture3D, GL_EXT_texture_array, GL_EXT_texture_cube_map, GL_EXT_texture_edge_clamp, GL_EXT_texture_env_add, GL_EXT_texture_env_combine, GL_EXT_texture_env_dot3, GL_EXT_texture_lod_bias, GL_EXT_texture_mirror_clamp, GL_EXT_texture_object, GL_EXT_texture, GL_EXT_texture_rectangle, GL_EXT_texture_sRGB, GL_EXT_texture_swizzle, GL_EXT_vertex_array_bgra, GL_EXT_vertex_array, GL_OES_read_format, GL_3DFX_texture_compression_FXT1, GL_APPLE_object_purgeable, GL_APPLE_packed_pixels, GL_APPLE_vertex_array_object, GL_ATI_blend_equation_separate, GL_ATI_envmap_bumpmap, GL_ATI_fragment_shader, GL_ATI_separate_stencil, GL_ATI_texture_env_combine3, GL_ATI_texture_mirror_once, GL_IBM_multimode_draw_arrays, GL_IBM_rasterpos_clip, GL_IBM_texture_mirrored_repeat, GL_INGR_blend_func_separate, GL_MESA_pack_invert, GL_MESA_resize_buffers, GL_MESA_texture_array, GL_MESA_window_pos, GL_MESA_ycbcr_texture, GL_NV_blend_square, GL_NV_conditional_render, GL_NV_depth_clamp, GL_NV_fragment_program, GL_NV_fragment_program_option, GL_NV_light_max_exponent, GL_NV_packed_depth_stencil, GL_NV_point_sprite, GL_NV_texgen_reflection, GL_NV_texture_env_combine4, GL_NV_texture_rectangle, GL_NV_vertex_program1_1, GL_NV_vertex_program, GL_SGIS_generate_mipmap, GL_SGIS_texture_border_clamp, GL_SGIS_texture_edge_clamp, GL_SGIS_texture_lod, GL_SGI_texture_color_table, GL_SUN_multi_draw_arrays 64 GLX Visuals visual x bf lv rg d st colorbuffer sr ax dp st accumbuffer ms cav id dep cl sp sz l ci b ro r g b a F gb bf th cl r g b a ns b eat ---------------------------------------------------------------------------- 0x021 24 tc 0 32 0 r y . 8 8 8 8 . . 0 24 8 0 0 0 0 0 0 None 0x022 24 dc 0 32 0 r y . 8 8 8 8 . . 0 24 8 0 0 0 0 0 0 None 0x0c9 24 tc 0 24 0 r . . 8 8 8 0 . . 0 0 0 0 0 0 0 0 0 None 0x0ca 24 tc 0 24 0 r . . 8 8 8 0 . . 0 0 0 16 16 16 0 0 0 Slow 0x0cb 24 tc 0 24 0 r y . 8 8 8 0 . . 0 0 0 0 0 0 0 0 0 None 0x0cc 24 tc 0 24 0 r y . 8 8 8 0 . . 0 0 0 16 16 16 0 0 0 Slow 0x0cd 24 tc 0 24 0 r . . 8 8 8 0 . . 0 0 8 0 0 0 0 0 0 None 0x0ce 24 tc 0 24 0 r . . 8 8 8 0 . . 0 0 8 16 16 16 0 0 0 Slow 0x0cf 24 tc 0 24 0 r y . 8 8 8 0 . . 0 0 8 0 0 0 0 0 0 None 0x0d0 24 tc 0 24 0 r y . 8 8 8 0 . . 0 0 8 16 16 16 0 0 0 Slow 0x0d1 24 tc 0 24 0 r . . 8 8 8 0 . . 0 24 0 0 0 0 0 0 0 None 0x0d2 24 tc 0 24 0 r . . 8 8 8 0 . . 0 24 0 16 16 16 0 0 0 Slow 0x0d3 24 tc 0 24 0 r y . 8 8 8 0 . . 0 24 0 0 0 0 0 0 0 None 0x0d4 24 tc 0 24 0 r y . 8 8 8 0 . . 0 24 0 16 16 16 0 0 0 Slow 0x0d5 24 tc 0 24 0 r . . 8 8 8 0 . . 0 24 8 0 0 0 0 0 0 None 0x0d6 24 tc 0 24 0 r . . 8 8 8 0 . . 0 24 8 16 16 16 0 0 0 Slow 0x0d7 24 tc 0 24 0 r y . 8 8 8 0 . . 0 24 8 0 0 0 0 0 0 None 0x0d8 24 tc 0 24 0 r y . 8 8 8 0 . . 0 24 8 16 16 16 0 0 0 Slow 0x0d9 24 tc 0 32 0 r . . 8 8 8 8 . . 0 0 0 0 0 0 0 0 0 None 0x0da 24 tc 0 32 0 r . . 8 8 8 8 . . 0 0 0 16 16 16 16 0 0 Slow 0x0db 24 tc 0 32 0 r y . 8 8 8 8 . . 0 0 0 0 0 0 0 0 0 None 0x0dc 24 tc 0 32 0 r y . 8 8 8 8 . . 0 0 0 16 16 16 16 0 0 Slow 0x0dd 24 tc 0 32 0 r . . 8 8 8 8 . . 0 0 8 0 0 0 0 0 0 None 0x0de 24 tc 0 32 0 r . . 8 8 8 8 . . 0 0 8 16 16 16 16 0 0 Slow 0x0df 24 tc 0 32 0 r y . 8 8 8 8 . . 0 0 8 0 0 0 0 0 0 None 0x0e0 24 tc 0 32 0 r y . 8 8 8 8 . . 0 0 8 16 16 16 16 0 0 Slow 0x0e1 24 tc 0 32 0 r . . 8 8 8 8 . . 0 24 0 0 0 0 0 0 0 None 0x0e2 24 tc 0 32 0 r . . 8 8 8 8 . . 0 24 0 16 16 16 16 0 0 Slow 0x0e3 24 tc 0 32 0 r y . 8 8 8 8 . . 0 24 0 16 16 16 16 0 0 Slow 0x0e4 24 tc 0 32 0 r . . 8 8 8 8 . . 0 24 8 0 0 0 0 0 0 None 0x0e5 24 tc 0 32 0 r . . 8 8 8 8 . . 0 24 8 16 16 16 16 0 0 Slow 0x0e6 24 tc 0 32 0 r y . 8 8 8 8 . . 0 24 8 16 16 16 16 0 0 Slow 0x0e7 24 dc 0 24 0 r . . 8 8 8 0 . . 0 0 0 0 0 0 0 0 0 None 0x0e8 24 dc 0 24 0 r . . 8 8 8 0 . . 0 0 0 16 16 16 0 0 0 Slow 0x0e9 24 dc 0 24 0 r y . 8 8 8 0 . . 0 0 0 0 0 0 0 0 0 None 0x0ea 24 dc 0 24 0 r y . 8 8 8 0 . . 0 0 0 16 16 16 0 0 0 Slow 0x0eb 24 dc 0 24 0 r . . 8 8 8 0 . . 0 0 8 0 0 0 0 0 0 None 0x0ec 24 dc 0 24 0 r . . 8 8 8 0 . . 0 0 8 16 16 16 0 0 0 Slow 0x0ed 24 dc 0 24 0 r y . 8 8 8 0 . . 0 0 8 0 0 0 0 0 0 None 0x0ee 24 dc 0 24 0 r y . 8 8 8 0 . . 0 0 8 16 16 16 0 0 0 Slow 0x0ef 24 dc 0 24 0 r . . 8 8 8 0 . . 0 24 0 0 0 0 0 0 0 None 0x0f0 24 dc 0 24 0 r . . 8 8 8 0 . . 0 24 0 16 16 16 0 0 0 Slow 0x0f1 24 dc 0 24 0 r y . 8 8 8 0 . . 0 24 0 0 0 0 0 0 0 None 0x0f2 24 dc 0 24 0 r y . 8 8 8 0 . . 0 24 0 16 16 16 0 0 0 Slow 0x0f3 24 dc 0 24 0 r . . 8 8 8 0 . . 0 24 8 0 0 0 0 0 0 None 0x0f4 24 dc 0 24 0 r . . 8 8 8 0 . . 0 24 8 16 16 16 0 0 0 Slow 0x0f5 24 dc 0 24 0 r y . 8 8 8 0 . . 0 24 8 0 0 0 0 0 0 None 0x0f6 24 dc 0 24 0 r y . 8 8 8 0 . . 0 24 8 16 16 16 0 0 0 Slow 0x0f7 24 dc 0 32 0 r . . 8 8 8 8 . . 0 0 0 0 0 0 0 0 0 None 0x0f8 24 dc 0 32 0 r . . 8 8 8 8 . . 0 0 0 16 16 16 16 0 0 Slow 0x0f9 24 dc 0 32 0 r y . 8 8 8 8 . . 0 0 0 0 0 0 0 0 0 None 0x0fa 24 dc 0 32 0 r y . 8 8 8 8 . . 0 0 0 16 16 16 16 0 0 Slow 0x0fb 24 dc 0 32 0 r . . 8 8 8 8 . . 0 0 8 0 0 0 0 0 0 None 0x0fc 24 dc 0 32 0 r . . 8 8 8 8 . . 0 0 8 16 16 16 16 0 0 Slow 0x0fd 24 dc 0 32 0 r y . 8 8 8 8 . . 0 0 8 0 0 0 0 0 0 None 0x0fe 24 dc 0 32 0 r y . 8 8 8 8 . . 0 0 8 16 16 16 16 0 0 Slow 0x0ff 24 dc 0 32 0 r . . 8 8 8 8 . . 0 24 0 0 0 0 0 0 0 None 0x100 24 dc 0 32 0 r . . 8 8 8 8 . . 0 24 0 16 16 16 16 0 0 Slow 0x101 24 dc 0 32 0 r y . 8 8 8 8 . . 0 24 0 0 0 0 0 0 0 None 0x102 24 dc 0 32 0 r y . 8 8 8 8 . . 0 24 0 16 16 16 16 0 0 Slow 0x103 24 dc 0 32 0 r . . 8 8 8 8 . . 0 24 8 0 0 0 0 0 0 None 0x104 24 dc 0 32 0 r . . 8 8 8 8 . . 0 24 8 16 16 16 16 0 0 Slow 0x105 24 dc 0 32 0 r y . 8 8 8 8 . . 0 24 8 16 16 16 16 0 0 Slow 0x048 32 tc 0 32 0 r y . 8 8 8 8 . . 0 24 0 0 0 0 0 0 0 None 128 GLXFBConfigs: visual x bf lv rg d st colorbuffer sr ax dp st accumbuffer ms cav id dep cl sp sz l ci b ro r g b a F gb bf th cl r g b a ns b eat ---------------------------------------------------------------------------- 0x049 0 tc 0 8 0 r . . 3 3 2 0 . . 0 0 0 0 0 0 0 0 0 None 0x04a 0 tc 0 8 0 r . . 3 3 2 0 . . 0 0 0 16 16 16 0 0 0 Slow 0x04b 0 tc 0 8 0 r y . 3 3 2 0 . . 0 0 0 0 0 0 0 0 0 None 0x04c 0 tc 0 8 0 r y . 3 3 2 0 . . 0 0 0 16 16 16 0 0 0 Slow 0x04d 0 tc 0 8 0 r . . 3 3 2 0 . . 0 0 8 0 0 0 0 0 0 None 0x04e 0 tc 0 8 0 r . . 3 3 2 0 . . 0 0 8 16 16 16 0 0 0 Slow 0x04f 0 tc 0 8 0 r y . 3 3 2 0 . . 0 0 8 0 0 0 0 0 0 None 0x050 0 tc 0 8 0 r y . 3 3 2 0 . . 0 0 8 16 16 16 0 0 0 Slow 0x051 0 tc 0 8 0 r . . 3 3 2 0 . . 0 8 0 0 0 0 0 0 0 None 0x052 0 tc 0 8 0 r . . 3 3 2 0 . . 0 8 0 16 16 16 0 0 0 Slow 0x053 0 tc 0 8 0 r y . 3 3 2 0 . . 0 8 0 0 0 0 0 0 0 None 0x054 0 tc 0 8 0 r y . 3 3 2 0 . . 0 8 0 16 16 16 0 0 0 Slow 0x055 0 tc 0 8 0 r . . 3 3 2 0 . . 0 8 8 0 0 0 0 0 0 None 0x056 0 tc 0 8 0 r . . 3 3 2 0 . . 0 8 8 16 16 16 0 0 0 Slow 0x057 0 tc 0 8 0 r y . 3 3 2 0 . . 0 8 8 0 0 0 0 0 0 None 0x058 0 tc 0 8 0 r y . 3 3 2 0 . . 0 8 8 16 16 16 0 0 0 Slow 0x059 0 tc 0 16 0 r . . 5 6 5 0 . . 0 0 0 0 0 0 0 0 0 None 0x05a 0 tc 0 16 0 r . . 5 6 5 0 . . 0 0 0 16 16 16 0 0 0 Slow 0x05b 0 tc 0 16 0 r y . 5 6 5 0 . . 0 0 0 0 0 0 0 0 0 None 0x05c 0 tc 0 16 0 r y . 5 6 5 0 . . 0 0 0 16 16 16 0 0 0 Slow 0x05d 0 tc 0 16 0 r . . 5 6 5 0 . . 0 0 8 0 0 0 0 0 0 None 0x05e 0 tc 0 16 0 r . . 5 6 5 0 . . 0 0 8 16 16 16 0 0 0 Slow 0x05f 0 tc 0 16 0 r y . 5 6 5 0 . . 0 0 8 0 0 0 0 0 0 None 0x060 0 tc 0 16 0 r y . 5 6 5 0 . . 0 0 8 16 16 16 0 0 0 Slow 0x061 0 tc 0 16 0 r . . 5 6 5 0 . . 0 16 0 0 0 0 0 0 0 None 0x062 0 tc 0 16 0 r . . 5 6 5 0 . . 0 16 0 16 16 16 0 0 0 Slow 0x063 0 tc 0 16 0 r y . 5 6 5 0 . . 0 16 0 0 0 0 0 0 0 None 0x064 0 tc 0 16 0 r y . 5 6 5 0 . . 0 16 0 16 16 16 0 0 0 Slow 0x065 0 tc 0 16 0 r . . 5 6 5 0 . . 0 16 8 0 0 0 0 0 0 None 0x066 0 tc 0 16 0 r . . 5 6 5 0 . . 0 16 8 16 16 16 0 0 0 Slow 0x067 0 tc 0 16 0 r y . 5 6 5 0 . . 0 16 8 0 0 0 0 0 0 None 0x068 0 tc 0 16 0 r y . 5 6 5 0 . . 0 16 8 16 16 16 0 0 0 Slow 0x069 24 tc 0 24 0 r . . 8 8 8 0 . . 0 0 0 0 0 0 0 0 0 None 0x06a 24 tc 0 24 0 r . . 8 8 8 0 . . 0 0 0 16 16 16 0 0 0 Slow 0x06b 24 tc 0 24 0 r y . 8 8 8 0 . . 0 0 0 0 0 0 0 0 0 None 0x06c 24 tc 0 24 0 r y . 8 8 8 0 . . 0 0 0 16 16 16 0 0 0 Slow 0x06d 24 tc 0 24 0 r . . 8 8 8 0 . . 0 0 8 0 0 0 0 0 0 None 0x06e 24 tc 0 24 0 r . . 8 8 8 0 . . 0 0 8 16 16 16 0 0 0 Slow 0x06f 24 tc 0 24 0 r y . 8 8 8 0 . . 0 0 8 0 0 0 0 0 0 None 0x070 24 tc 0 24 0 r y . 8 8 8 0 . . 0 0 8 16 16 16 0 0 0 Slow 0x071 24 tc 0 24 0 r . . 8 8 8 0 . . 0 24 0 0 0 0 0 0 0 None 0x072 24 tc 0 24 0 r . . 8 8 8 0 . . 0 24 0 16 16 16 0 0 0 Slow 0x073 24 tc 0 24 0 r y . 8 8 8 0 . . 0 24 0 0 0 0 0 0 0 None 0x074 24 tc 0 24 0 r y . 8 8 8 0 . . 0 24 0 16 16 16 0 0 0 Slow 0x075 24 tc 0 24 0 r . . 8 8 8 0 . . 0 24 8 0 0 0 0 0 0 None 0x076 24 tc 0 24 0 r . . 8 8 8 0 . . 0 24 8 16 16 16 0 0 0 Slow 0x077 24 tc 0 24 0 r y . 8 8 8 0 . . 0 24 8 0 0 0 0 0 0 None 0x078 24 tc 0 24 0 r y . 8 8 8 0 . . 0 24 8 16 16 16 0 0 0 Slow 0x079 24 tc 0 32 0 r . . 8 8 8 8 . . 0 0 0 0 0 0 0 0 0 None 0x07a 24 tc 0 32 0 r . . 8 8 8 8 . . 0 0 0 16 16 16 16 0 0 Slow 0x07b 24 tc 0 32 0 r y . 8 8 8 8 . . 0 0 0 0 0 0 0 0 0 None 0x07c 24 tc 0 32 0 r y . 8 8 8 8 . . 0 0 0 16 16 16 16 0 0 Slow 0x07d 24 tc 0 32 0 r . . 8 8 8 8 . . 0 0 8 0 0 0 0 0 0 None 0x07e 24 tc 0 32 0 r . . 8 8 8 8 . . 0 0 8 16 16 16 16 0 0 Slow 0x07f 24 tc 0 32 0 r y . 8 8 8 8 . . 0 0 8 0 0 0 0 0 0 None 0x080 24 tc 0 32 0 r y . 8 8 8 8 . . 0 0 8 16 16 16 16 0 0 Slow 0x081 24 tc 0 32 0 r . . 8 8 8 8 . . 0 24 0 0 0 0 0 0 0 None 0x082 24 tc 0 32 0 r . . 8 8 8 8 . . 0 24 0 16 16 16 16 0 0 Slow 0x083 32 tc 0 32 0 r y . 8 8 8 8 . . 0 24 0 0 0 0 0 0 0 None 0x084 24 tc 0 32 0 r y . 8 8 8 8 . . 0 24 0 16 16 16 16 0 0 Slow 0x085 24 tc 0 32 0 r . . 8 8 8 8 . . 0 24 8 0 0 0 0 0 0 None 0x086 24 tc 0 32 0 r . . 8 8 8 8 . . 0 24 8 16 16 16 16 0 0 Slow 0x087 24 tc 0 32 0 r y . 8 8 8 8 . . 0 24 8 0 0 0 0 0 0 None 0x088 24 tc 0 32 0 r y . 8 8 8 8 . . 0 24 8 16 16 16 16 0 0 Slow 0x089 0 dc 0 8 0 r . . 3 3 2 0 . . 0 0 0 0 0 0 0 0 0 None 0x08a 0 dc 0 8 0 r . . 3 3 2 0 . . 0 0 0 16 16 16 0 0 0 Slow 0x08b 0 dc 0 8 0 r y . 3 3 2 0 . . 0 0 0 0 0 0 0 0 0 None 0x08c 0 dc 0 8 0 r y . 3 3 2 0 . . 0 0 0 16 16 16 0 0 0 Slow 0x08d 0 dc 0 8 0 r . . 3 3 2 0 . . 0 0 8 0 0 0 0 0 0 None 0x08e 0 dc 0 8 0 r . . 3 3 2 0 . . 0 0 8 16 16 16 0 0 0 Slow 0x08f 0 dc 0 8 0 r y . 3 3 2 0 . . 0 0 8 0 0 0 0 0 0 None 0x090 0 dc 0 8 0 r y . 3 3 2 0 . . 0 0 8 16 16 16 0 0 0 Slow 0x091 0 dc 0 8 0 r . . 3 3 2 0 . . 0 8 0 0 0 0 0 0 0 None 0x092 0 dc 0 8 0 r . . 3 3 2 0 . . 0 8 0 16 16 16 0 0 0 Slow 0x093 0 dc 0 8 0 r y . 3 3 2 0 . . 0 8 0 0 0 0 0 0 0 None 0x094 0 dc 0 8 0 r y . 3 3 2 0 . . 0 8 0 16 16 16 0 0 0 Slow 0x095 0 dc 0 8 0 r . . 3 3 2 0 . . 0 8 8 0 0 0 0 0 0 None 0x096 0 dc 0 8 0 r . . 3 3 2 0 . . 0 8 8 16 16 16 0 0 0 Slow 0x097 0 dc 0 8 0 r y . 3 3 2 0 . . 0 8 8 0 0 0 0 0 0 None 0x098 0 dc 0 8 0 r y . 3 3 2 0 . . 0 8 8 16 16 16 0 0 0 Slow 0x099 0 dc 0 16 0 r . . 5 6 5 0 . . 0 0 0 0 0 0 0 0 0 None 0x09a 0 dc 0 16 0 r . . 5 6 5 0 . . 0 0 0 16 16 16 0 0 0 Slow 0x09b 0 dc 0 16 0 r y . 5 6 5 0 . . 0 0 0 0 0 0 0 0 0 None 0x09c 0 dc 0 16 0 r y . 5 6 5 0 . . 0 0 0 16 16 16 0 0 0 Slow 0x09d 0 dc 0 16 0 r . . 5 6 5 0 . . 0 0 8 0 0 0 0 0 0 None 0x09e 0 dc 0 16 0 r . . 5 6 5 0 . . 0 0 8 16 16 16 0 0 0 Slow 0x09f 0 dc 0 16 0 r y . 5 6 5 0 . . 0 0 8 0 0 0 0 0 0 None 0x0a0 0 dc 0 16 0 r y . 5 6 5 0 . . 0 0 8 16 16 16 0 0 0 Slow 0x0a1 0 dc 0 16 0 r . . 5 6 5 0 . . 0 16 0 0 0 0 0 0 0 None 0x0a2 0 dc 0 16 0 r . . 5 6 5 0 . . 0 16 0 16 16 16 0 0 0 Slow 0x0a3 0 dc 0 16 0 r y . 5 6 5 0 . . 0 16 0 0 0 0 0 0 0 None 0x0a4 0 dc 0 16 0 r y . 5 6 5 0 . . 0 16 0 16 16 16 0 0 0 Slow 0x0a5 0 dc 0 16 0 r . . 5 6 5 0 . . 0 16 8 0 0 0 0 0 0 None 0x0a6 0 dc 0 16 0 r . . 5 6 5 0 . . 0 16 8 16 16 16 0 0 0 Slow 0x0a7 0 dc 0 16 0 r y . 5 6 5 0 . . 0 16 8 0 0 0 0 0 0 None 0x0a8 0 dc 0 16 0 r y . 5 6 5 0 . . 0 16 8 16 16 16 0 0 0 Slow 0x0a9 24 dc 0 24 0 r . . 8 8 8 0 . . 0 0 0 0 0 0 0 0 0 None 0x0aa 24 dc 0 24 0 r . . 8 8 8 0 . . 0 0 0 16 16 16 0 0 0 Slow 0x0ab 24 dc 0 24 0 r y . 8 8 8 0 . . 0 0 0 0 0 0 0 0 0 None 0x0ac 24 dc 0 24 0 r y . 8 8 8 0 . . 0 0 0 16 16 16 0 0 0 Slow 0x0ad 24 dc 0 24 0 r . . 8 8 8 0 . . 0 0 8 0 0 0 0 0 0 None 0x0ae 24 dc 0 24 0 r . . 8 8 8 0 . . 0 0 8 16 16 16 0 0 0 Slow 0x0af 24 dc 0 24 0 r y . 8 8 8 0 . . 0 0 8 0 0 0 0 0 0 None 0x0b0 24 dc 0 24 0 r y . 8 8 8 0 . . 0 0 8 16 16 16 0 0 0 Slow 0x0b1 24 dc 0 24 0 r . . 8 8 8 0 . . 0 24 0 0 0 0 0 0 0 None 0x0b2 24 dc 0 24 0 r . . 8 8 8 0 . . 0 24 0 16 16 16 0 0 0 Slow 0x0b3 24 dc 0 24 0 r y . 8 8 8 0 . . 0 24 0 0 0 0 0 0 0 None 0x0b4 24 dc 0 24 0 r y . 8 8 8 0 . . 0 24 0 16 16 16 0 0 0 Slow 0x0b5 24 dc 0 24 0 r . . 8 8 8 0 . . 0 24 8 0 0 0 0 0 0 None 0x0b6 24 dc 0 24 0 r . . 8 8 8 0 . . 0 24 8 16 16 16 0 0 0 Slow 0x0b7 24 dc 0 24 0 r y . 8 8 8 0 . . 0 24 8 0 0 0 0 0 0 None 0x0b8 24 dc 0 24 0 r y . 8 8 8 0 . . 0 24 8 16 16 16 0 0 0 Slow 0x0b9 24 dc 0 32 0 r . . 8 8 8 8 . . 0 0 0 0 0 0 0 0 0 None 0x0ba 24 dc 0 32 0 r . . 8 8 8 8 . . 0 0 0 16 16 16 16 0 0 Slow 0x0bb 24 dc 0 32 0 r y . 8 8 8 8 . . 0 0 0 0 0 0 0 0 0 None 0x0bc 24 dc 0 32 0 r y . 8 8 8 8 . . 0 0 0 16 16 16 16 0 0 Slow 0x0bd 24 dc 0 32 0 r . . 8 8 8 8 . . 0 0 8 0 0 0 0 0 0 None 0x0be 24 dc 0 32 0 r . . 8 8 8 8 . . 0 0 8 16 16 16 16 0 0 Slow 0x0bf 24 dc 0 32 0 r y . 8 8 8 8 . . 0 0 8 0 0 0 0 0 0 None 0x0c0 24 dc 0 32 0 r y . 8 8 8 8 . . 0 0 8 16 16 16 16 0 0 Slow 0x0c1 24 dc 0 32 0 r . . 8 8 8 8 . . 0 24 0 0 0 0 0 0 0 None 0x0c2 24 dc 0 32 0 r . . 8 8 8 8 . . 0 24 0 16 16 16 16 0 0 Slow 0x0c3 24 dc 0 32 0 r y . 8 8 8 8 . . 0 24 0 0 0 0 0 0 0 None 0x0c4 24 dc 0 32 0 r y . 8 8 8 8 . . 0 24 0 16 16 16 16 0 0 Slow 0x0c5 24 dc 0 32 0 r . . 8 8 8 8 . . 0 24 8 0 0 0 0 0 0 None 0x0c6 24 dc 0 32 0 r . . 8 8 8 8 . . 0 24 8 16 16 16 16 0 0 Slow 0x0c7 24 dc 0 32 0 r y . 8 8 8 8 . . 0 24 8 0 0 0 0 0 0 None 0x0c8 24 dc 0 32 0 r y . 8 8 8 8 . . 0 24 8 16 16 16 16 0 0 Slow I really don't know how to move on...
(In reply to comment #12) > But maybe tomorrow comes another application which does not check for > CLUTTER_INIT_SUCCESS and we end up in the same situation of a segmentation > fault ? it doesn't matter: if the application is not taking into account the result of initializing Clutter then it's the applications fault. there's nothing Clutter can do: if it can't initialize then the behaviour of *any* Clutter or Cogl call is undefined. > In any case, let's get to the point, why is clutter failing to initialise ? > I am using the nv driver from xorg because the original NVidia driver has never > been working. the nv driver is not accelerated: > It mentions GLX, so perhaps the following logs might help ? > > [ 67.887] (II) GLX: Initialized DRISWRAST GL provider for screen 0 > OpenGL vendor string: Mesa Project > OpenGL renderer string: Software Rasterizer > OpenGL version string: 2.1 Mesa 7.10.3 Clutter requires hardware acceleration, not the software rasterizer. you either want the binary nVidia driver or nouveau. this is not a Cogl bug in any case: Cheese should check the result of the gtk_clutter_init() call and exit with a warning. Re-titling and re-assigning.
I thought the problem was the software rasterizer. Both accelerated drivers do not work with my card unfortunately... I have now properly changed the product from cogl to cheese. Thanks for the explanation and for changing the title. However, I still believe that a more robust clutter/cogl won't harm anyone as it's just a matter of checking for NULL pointers in a few places. The cheese guys could apply the patch that I have quoted in the comment above and that I am now going to attach properly (a warning/error is not necessary as it's already being printed by clutter). Then they can review it, modify it and look at the details...
Created attachment 192465 [details] [review] Patch for cheese 3.0.2 to detect a failure on clutter initialisation Please double-check the correctness of return values in case of gtk_clutter_init() failure.
I think the patch is not effective as source files are generated from vala which is using GtkClutter.init() and perhaps generates the call without the check...
I am now going to create a patch for cheese git that also modifies the vala source.
Created attachment 192511 [details] [review] Patch for cheese from git that detects a failure in clutter_init()
Review of attachment 192511 [details] [review]: ::: cheese-git/libcheese/cheese-widget.c @@ +386,3 @@ GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); + if (gtk_clutter_init (NULL, NULL) != CLUTTER_INIT_SUCCESS) return; This early return would leave the class in a partially-constructed state. As there are currently no good ways to signal errors with GObject construction (see bug 567076 for some discussion), it might be a better idea to just move the gtk_clutter_init() and clutter_gst_init() out of the class initialiser altogether. GTK+ widgets do not try to call gtk_init() in the class initialiser, for example.
Created attachment 195923 [details] [review] improved cheese patch, without cheese-widget changes I improved the patch a bit (placed return statements on a new line, used the Clutter.InitError enum) and attached a version generated with git format-patch.
Comment on attachment 195923 [details] [review] improved cheese patch, without cheese-widget changes I pushed this to master as commit 9290eb4af61f9cadf0e0e8e182dd9b08d3d4697d, thanks. Moving the *_init() functions out of CheeseWidget should probably be discussed in a separate bug, as it cannot be fixed right now (API freeze) and this bug is a side effect of that.
Yes, you've done well. It builds and runs fine apparently.