Skip to content
GitLab
Projects Groups Snippets
  • /
  • Help
    • Help
    • Support
    • Community forum
    • Submit feedback
    • Contribute to GitLab
  • Sign in / Register
  • gnome-software gnome-software
  • Project information
    • Project information
    • Activity
    • Labels
    • Members
  • Repository
    • Repository
    • Files
    • Commits
    • Branches
    • Tags
    • Contributors
    • Graph
    • Compare
  • Issues 232
    • Issues 232
    • List
    • Boards
    • Service Desk
    • Milestones
  • Merge requests 11
    • Merge requests 11
  • CI/CD
    • CI/CD
    • Pipelines
    • Jobs
    • Schedules
  • Deployments
    • Deployments
    • Releases
  • Packages and registries
    • Packages and registries
    • Container Registry
  • Analytics
    • Analytics
    • Value stream
    • CI/CD
    • Repository
  • Wiki
    • Wiki
  • Activity
  • Graph
  • Create a new issue
  • Jobs
  • Commits
  • Issue Boards
Collapse sidebar
  • GNOMEGNOME
  • gnome-softwaregnome-software
  • Issues
  • #1658
Closed
Open
Issue created Feb 23, 2022 by Milan Crha@mcrhaMaintainer

ODRS provider does blocking I/O in the main thread

I've been wondering why I see UI freezes when opening application details and I managed to get this backtrace (only pasting the main thread):

Thread 1 (Thread 0x7f074affea40 (LWP 15026) "gnome-software"):
#0  0x00007f074cc1173f in poll () at /lib64/libc.so.6
#1  0x00007f074dc4322b in g_poll (fds=0x7fff41a47aa0, nfds=2, timeout=10000) at ../glib/gpoll.c:125
#2  0x00007f074de5415b in g_socket_condition_timed_wait (socket=0x1f59d00 [GSocket], condition=G_IO_IN, timeout_us=-1, cancellable=0x5165020 [GCancellable], error=0x2814ff8) at ../gio/gsocket.c:4459
#3  0x00007f074de52cad in block_on_timeout (socket=0x1f59d00 [GSocket], condition=G_IO_IN, timeout_us=-1, start_time=6600047431, cancellable=0x5165020 [GCancellable], error=0x2814ff8) at ../gio/gsocket.c:3197
#4  0x00007f074de52e74 in g_socket_receive_with_timeout (socket=0x1f59d00 [GSocket], buffer=0x5624e86 '\234' <repeats 200 times>..., size=550, timeout_us=-1, cancellable=0x5165020 [GCancellable], error=0x2814ff8) at ../gio/gsocket.c:3245
#5  0x00007f074de52ff2 in g_socket_receive_with_blocking (socket=0x1f59d00 [GSocket], buffer=0x5624e86 '\234' <repeats 200 times>..., size=550, blocking=1, cancellable=0x5165020 [GCancellable], error=0x2814ff8) at ../gio/gsocket.c:3344
#6  0x00007f074de5e05f in g_socket_input_stream_read (stream=0x7f069c62a270 [GSocketInputStream], buffer=0x5624e86, count=550, cancellable=0x5165020 [GCancellable], error=0x2814ff8) at ../gio/gsocketinputstream.c:126
#7  0x00007f074de1e2b1 in g_input_stream_read (stream=0x7f069c62a270 [GSocketInputStream], buffer=0x5624e86, count=550, cancellable=0x5165020 [GCancellable], error=0x2814ff8) at ../gio/ginputstream.c:198
#8  0x00007f074de3f595 in g_pollable_stream_read (stream=0x7f069c62a270 [GSocketInputStream], buffer=0x5624e86, count=550, blocking=1, cancellable=0x5165020 [GCancellable], error=0x2814ff8) at ../gio/gpollableutils.c:204
#9  0x00007f0718782d62 in g_tls_connection_gnutls_pull_func () at /usr/lib64/gio/modules/libgiognutls.so
#10 0x00007f071962fe78 in _gnutls_io_read_buffered () at /lib64/libgnutls.so.30
#11 0x00007f0719626929 in _gnutls_recv_in_buffers () at /lib64/libgnutls.so.30
#12 0x00007f0719628762 in _gnutls_recv_int () at /lib64/libgnutls.so.30
#13 0x00007f0718783dc0 in g_tls_connection_gnutls_read () at /usr/lib64/gio/modules/libgiognutls.so
#14 0x00007f07187867c6 in g_tls_connection_base_read () at /usr/lib64/gio/modules/libgiognutls.so
#15 0x00007f07187874a7 in g_tls_input_stream_read () at /usr/lib64/gio/modules/libgiognutls.so
#16 0x00007f074de1e2b1 in g_input_stream_read (stream=0x7f06d08c6390 [GTlsInputStream], buffer=0x549f800, count=8192, cancellable=0x5165020 [GCancellable], error=0x7fff41a482b0) at ../gio/ginputstream.c:198
#17 0x00007f074de3f595 in g_pollable_stream_read (stream=0x7f06d08c6390 [GTlsInputStream], buffer=0x549f800, count=8192, blocking=1, cancellable=0x5165020 [GCancellable], error=0x7fff41a482b0) at ../gio/gpollableutils.c:204
#18 0x00007f074de1e2b1 in g_input_stream_read (stream=0x7f069c1770f0 [SoupFilterInputStream], buffer=0x549f800, count=8192, cancellable=0x5165020 [GCancellable], error=0x7fff41a482b0) at ../gio/ginputstream.c:198
#19 0x00007f074de3f595 in g_pollable_stream_read (stream=0x7f069c1770f0 [SoupFilterInputStream], buffer=0x549f800, count=8192, blocking=1, cancellable=0x5165020 [GCancellable], error=0x7fff41a482b0) at ../gio/gpollableutils.c:204
#20 0x00007f074cf2d866 in soup_filter_input_stream_read_until () at /lib64/libsoup-2.4.so.1
#21 0x00007f074cf3e27c in io_read () at /lib64/libsoup-2.4.so.1
#22 0x00007f074cf3e9a9 in io_run_until.lto_priv () at /lib64/libsoup-2.4.so.1
#23 0x00007f074cf3f78b in io_run.lto_priv () at /lib64/libsoup-2.4.so.1
#24 0x00007f074cf52e21 in soup_session_process_queue_item.part () at /lib64/libsoup-2.4.so.1
#25 0x00007f074cf53835 in soup_session_real_send_message.lto_priv () at /lib64/libsoup-2.4.so.1
#26 0x00007f074e0b75a8 in gs_odrs_provider_fetch_for_app (self=0x2293c00 [GsOdrsProvider], app=0x7f06d089bac0 [GsApp], cancellable=0x27b4de0 [GCancellable], error=0x7fff41a48708) at ../lib/gs-odrs-provider.c:784
#27 0x00007f074e0b77da in gs_odrs_provider_refine_reviews (self=0x2293c00 [GsOdrsProvider], app=0x7f06d089bac0 [GsApp], cancellable=0x27b4de0 [GCancellable], error=0x7fff41a48708) at ../lib/gs-odrs-provider.c:821
#28 0x00007f074e0b7974 in refine_app (self=0x2293c00 [GsOdrsProvider], app=0x7f06d089bac0 [GsApp], flags=34340912, cancellable=0x27b4de0 [GCancellable], error=0x7fff41a48708) at ../lib/gs-odrs-provider.c:865
#29 0x00007f074e0b8d4e in gs_odrs_provider_refine (self=0x2293c00 [GsOdrsProvider], list=0x56acd80 [GsAppList], flags=34340912, cancellable=0x27b4de0 [GCancellable], error=0x7fff41a489a0) at ../lib/gs-odrs-provider.c:1360
#30 0x00007f074e0c460e in run_refine_filter (self=0x553b0a0 [GsPluginJobRefine], plugin_loader=0x2217b60 [GsPluginLoader], list=0x56acd80 [GsAppList], refine_flags=34340912, cancellable=0x27b4de0 [GCancellable], error=0x7fff41a489a0) at ../lib/gs-plugin-job-refine.c:219
#31 0x00007f074e0c476b in run_refine_internal (self=0x553b0a0 [GsPluginJobRefine], plugin_loader=0x2217b60 [GsPluginLoader], list=0x56acd80 [GsAppList], flags=34340912, cancellable=0x27b4de0 [GCancellable], error=0x7fff41a489a0) at ../lib/gs-plugin-job-refine.c:253
#32 0x00007f074e0c4d6f in run_refine (self=0x553b0a0 [GsPluginJobRefine], plugin_loader=0x2217b60 [GsPluginLoader], list=0x56acd80 [GsAppList], cancellable=0x27b4de0 [GCancellable], error=0x7fff41a489a0) at ../lib/gs-plugin-job-refine.c:380
#33 0x00007f074e0c5053 in gs_plugin_job_refine_run_async (job=0x553b0a0 [GsPluginJobRefine], plugin_loader=0x2217b60 [GsPluginLoader], cancellable=0x27b4de0 [GCancellable], callback=0x7f074e0cf63d <run_job_cb>, user_data=0x2694d70) at ../lib/gs-plugin-job-refine.c:445
#34 0x00007f074e0cfbc3 in gs_plugin_loader_job_process_async (plugin_loader=0x2217b60 [GsPluginLoader], plugin_job=0x553b0a0 [GsPluginJobRefine], cancellable=0x27b4de0 [GCancellable], callback=0x449d96 <gs_details_page_app_refine_cb>, user_data=0x26a41e0) at ../lib/gs-plugin-loader.c:3653
#35 0x000000000044a2c5 in gs_details_page_load_stage2 (self=0x26a41e0 [GsDetailsPage], continue_loading=1) at ../src/gs-details-page.c:1506
#36 0x000000000044a5be in gs_details_page_load_stage1_cb (source=0x2217b60 [GsPluginLoader], res=0x2698320, user_data=0x26a41e0) at ../src/gs-details-page.c:1557
#37 0x00007f074de67625 in g_task_return_now (task=0x2698320 [GTask]) at ../gio/gtask.c:1219
#38 0x00007f074de6778a in g_task_return (task=0x2698320 [GTask], type=G_TASK_RETURN_SUCCESS) at ../gio/gtask.c:1289
#39 0x00007f074de68429 in g_task_return_pointer (task=0x2698320 [GTask], result=0x5688cc0, result_destroy=0x420570 <g_object_unref@plt>) at ../gio/gtask.c:1709
#40 0x00007f074e0cf87a in run_job_cb (source_object=0x412be10 [GsPluginJobRefine], result=0x7f0698015270, user_data=0x0) at ../lib/gs-plugin-loader.c:3596
#41 0x00007f074de67625 in g_task_return_now (task=0x7f0698015270 [GTask]) at ../gio/gtask.c:1219
#42 0x00007f074de6778a in g_task_return (task=0x7f0698015270 [GTask], type=G_TASK_RETURN_SUCCESS) at ../gio/gtask.c:1289
#43 0x00007f074de68850 in g_task_return_boolean (task=0x7f0698015270 [GTask], result=1) at ../gio/gtask.c:1821
#44 0x00007f074e0c515f in gs_plugin_job_refine_run_async (job=0x412be10 [GsPluginJobRefine], plugin_loader=0x2217b60 [GsPluginLoader], cancellable=0x27b4de0 [GCancellable], callback=0x7f074e0cf63d <run_job_cb>, user_data=0x2698320) at ../lib/gs-plugin-job-refine.c:473
#45 0x00007f074e0cfbc3 in gs_plugin_loader_job_process_async (plugin_loader=0x2217b60 [GsPluginLoader], plugin_job=0x412be10 [GsPluginJobRefine], cancellable=0x27b4de0 [GCancellable], callback=0x44a355 <gs_details_page_load_stage1_cb>, user_data=0x26a41e0) at ../lib/gs-plugin-loader.c:3653
#46 0x000000000044ab5c in gs_details_page_load_stage1 (self=0x26a41e0 [GsDetailsPage]) at ../src/gs-details-page.c:1659
#47 0x000000000044afff in gs_details_page_set_app (self=0x26a41e0 [GsDetailsPage], app=0x7f06d089bac0 [GsApp]) at ../src/gs-details-page.c:1775
#48 0x0000000000474055 in gs_shell_change_mode (shell=0x2396e80 [GsShell], mode=GS_SHELL_MODE_DETAILS, data=0x7f06d089bac0, scroll_up=1) at ../src/gs-shell.c:642
#49 0x0000000000477da3 in gs_shell_show_app (shell=0x2396e80 [GsShell], app=0x7f06d089bac0 [GsApp]) at ../src/gs-shell.c:2367
#50 0x000000000045da57 in app_tile_clicked (tile=0x28aa210 [GsSummaryTile], data=0x22a7710) at ../src/gs-overview-page.c:89
#51 0x00007f074dd401a9 in g_cclosure_marshal_VOID__VOIDv (closure=0x28b0550, return_value=0x0, instance=0x28aa210, args=0x7fff41a493e8, marshal_data=0x0, n_params=0, param_types=0x0) at ../gobject/gmarshal.c:165
#52 0x00007f074dd3cbe0 in _g_closure_invoke_va (closure=0x28b0550, return_value=0x0, instance=0x28aa210, args=0x7fff41a493e8, n_params=0, param_types=0x0) at ../gobject/gclosure.c:893
#53 0x00007f074dd5a8ae in g_signal_emit_valist (instance=0x28aa210, signal_id=194, detail=0, var_args=0x7fff41a493e8) at ../gobject/gsignal.c:3406
#54 0x00007f074dd5bb48 in g_signal_emit (instance=0x28aa210, signal_id=194, detail=0) at ../gobject/gsignal.c:3553
#55 0x00007f074d346144 in gtk_button_do_release (button=0x28aa210 [GsSummaryTile], emit_clicked=1) at ../subprojects/gtk/gtk/gtkbutton.c:764
#56 0x00007f074d34507a in click_released_cb (gesture=0x28b32b0 [GtkGestureClick], n_press=1, x=209.55223083496094, y=37.004947662353516, widget=0x28aa210 [GsSummaryTile]) at ../subprojects/gtk/gtk/gtkbutton.c:359
#57 0x00007f074d2e3635 in _gtk_marshal_VOID__INT_DOUBLE_DOUBLEv (closure=0x28b6560, return_value=0x0, instance=0x28b32b0, args=0x7fff41a49928, marshal_data=0x0, n_params=3, param_types=0x23ab170) at subprojects/gtk/gtk/gtkmarshalers.c:5445
#58 0x00007f074dd3cbe0 in _g_closure_invoke_va (closure=0x28b6560, return_value=0x0, instance=0x28b32b0, args=0x7fff41a49928, n_params=3, param_types=0x23ab170) at ../gobject/gclosure.c:893
#59 0x00007f074dd5a8ae in g_signal_emit_valist (instance=0x28b32b0, signal_id=186, detail=0, var_args=0x7fff41a49928) at ../gobject/gsignal.c:3406
#60 0x00007f074dd5bb48 in g_signal_emit (instance=0x28b32b0, signal_id=186, detail=0) at ../gobject/gsignal.c:3553
#61 0x00007f074d40c5be in gtk_gesture_click_end (gesture=0x28b32b0 [GtkGestureClick], sequence=0x0) at ../subprojects/gtk/gtk/gtkgestureclick.c:276
#62 0x00007f074dd41aea in g_cclosure_marshal_VOID__BOXEDv (closure=0x23ada70, return_value=0x0, instance=0x28b32b0, args=0x7fff41a49e98, marshal_data=0x7f074d40c4e2 <gtk_gesture_click_end>, n_params=1, param_types=0x23adaa0) at ../gobject/gmarshal.c:1686
#63 0x00007f074dd3d08d in g_type_class_meta_marshalv (closure=0x23ada70, return_value=0x0, instance=0x28b32b0, args=0x7fff41a49e98, marshal_data=0x120, n_params=1, param_types=0x23adaa0) at ../gobject/gclosure.c:1058
#64 0x00007f074dd3cbe0 in _g_closure_invoke_va (closure=0x23ada70, return_value=0x0, instance=0x28b32b0, args=0x7fff41a49e98, n_params=1, param_types=0x23adaa0) at ../gobject/gclosure.c:893
#65 0x00007f074dd5a8ae in g_signal_emit_valist (instance=0x28b32b0, signal_id=181, detail=0, var_args=0x7fff41a49e98) at ../gobject/gsignal.c:3406
#66 0x00007f074dd5bb48 in g_signal_emit (instance=0x28b32b0, signal_id=181, detail=0) at ../gobject/gsignal.c:3553
#67 0x00007f074d407999 in _gtk_gesture_set_recognized (gesture=0x28b32b0 [GtkGestureClick], recognized=0, sequence=0x0) at ../subprojects/gtk/gtk/gtkgesture.c:345
#68 0x00007f074d407ab0 in _gtk_gesture_check_recognized (gesture=0x28b32b0 [GtkGestureClick], sequence=0x0) at ../subprojects/gtk/gtk/gtkgesture.c:386
#69 0x00007f074d4084e2 in gtk_gesture_handle_event (controller=0x28b32b0 [GtkGestureClick], event=0x53269e0 [GdkButtonEvent], x=209.55223083496094, y=37.004947662353516) at ../subprojects/gtk/gtk/gtkgesture.c:709
#70 0x00007f074d40e603 in gtk_gesture_single_handle_event (controller=0x28b32b0 [GtkGestureClick], event=0x53269e0 [GdkButtonEvent], x=209.55223083496094, y=37.004947662353516) at ../subprojects/gtk/gtk/gtkgesturesingle.c:231
#71 0x00007f074d40c7e3 in gtk_gesture_click_handle_event (controller=0x28b32b0 [GtkGestureClick], event=0x53269e0 [GdkButtonEvent], x=209.55223083496094, y=37.004947662353516) at ../subprojects/gtk/gtk/gtkgestureclick.c:324
#72 0x00007f074d3c70b6 in gtk_event_controller_handle_event (controller=0x28b32b0 [GtkGestureClick], event=0x53269e0 [GdkButtonEvent], target=0x2899ec0 [GtkLabel], x=209.55223083496094, y=37.004947662353516) at ../subprojects/gtk/gtk/gtkeventcontroller.c:369
#73 0x00007f074d5f890c in gtk_widget_run_controllers (widget=0x28aa210 [GsSummaryTile], event=0x53269e0 [GdkButtonEvent], target=0x2899ec0 [GtkLabel], x=209.55223083496094, y=37.004947662353516, phase=GTK_PHASE_CAPTURE) at ../subprojects/gtk/gtk/gtkwidget.c:4563
#74 0x00007f074d5f8e62 in _gtk_widget_captured_event (widget=0x28aa210 [GsSummaryTile], event=0x53269e0 [GdkButtonEvent], target=0x2899ec0 [GtkLabel]) at ../subprojects/gtk/gtk/gtkwidget.c:4726
#75 0x00007f074d47510b in gtk_propagate_event_internal (widget=0x28aa210 [GsSummaryTile], event=0x53269e0 [GdkButtonEvent], topmost=0x0) at ../subprojects/gtk/gtk/gtkmain.c:1911
#76 0x00007f074d475356 in gtk_propagate_event (widget=0x2899ec0 [GtkLabel], event=0x53269e0 [GdkButtonEvent]) at ../subprojects/gtk/gtk/gtkmain.c:1993
#77 0x00007f074d474b1b in gtk_main_do_event (event=0x53269e0 [GdkButtonEvent]) at ../subprojects/gtk/gtk/gtkmain.c:1685
#78 0x00007f074d616c12 in surface_event (surface=0x29391b0 [GdkX11Toplevel], event=0x53269e0 [GdkButtonEvent], widget=0x2396e80 [GsShell]) at ../subprojects/gtk/gtk/gtkwindow.c:4750
#79 0x00007f074d759a4a in _gdk_marshal_BOOLEAN__POINTER (closure=0x3bf8c60, return_value=0x7fff41a4a6a0, n_param_values=2, param_values=0x7fff41a4a790, invocation_hint=0x7fff41a4a6d0, marshal_data=0x0) at subprojects/gtk/gdk/gdkmarshalers.c:258
#80 0x00007f074d7961f2 in gdk_surface_event_marshaller (closure=0x3bf8c60, return_value=0x7fff41a4a6a0, n_param_values=2, param_values=0x7fff41a4a790, invocation_hint=0x7fff41a4a6d0, marshal_data=0x0) at ../subprojects/gtk/gdk/gdksurface.c:435
#84 0x00007f074dd5bb48 in <emit signal ??? on instance 0x29391b0 [GdkX11Toplevel]> (instance=0x29391b0, signal_id=58, detail=0) at ../gobject/gsignal.c:3553
    #81 0x00007f074dd3c8ec in g_closure_invoke (closure=0x3bf8c60, return_value=0x7fff41a4a6a0, n_param_values=2, param_values=0x7fff41a4a790, invocation_hint=0x7fff41a4a6d0) at ../gobject/gclosure.c:830
    #82 0x00007f074dd5c316 in signal_emit_unlocked_R (node=0x1fe1960, detail=0, instance=0x29391b0, emission_return=0x7fff41a4a870, instance_and_params=0x7fff41a4a790) at ../gobject/gsignal.c:3742
    #83 0x00007f074dd5b649 in g_signal_emit_valist (instance=0x29391b0, signal_id=58, detail=0, var_args=0x7fff41a4aa58) at ../gobject/gsignal.c:3507
#85 0x00007f074d79b1e4 in gdk_surface_handle_event (event=0x53269e0 [GdkButtonEvent]) at ../subprojects/gtk/gdk/gdksurface.c:2961
#86 0x00007f074d77724d in _gdk_event_emit (event=0x53269e0 [GdkButtonEvent]) at ../subprojects/gtk/gdk/gdkevents.c:490
#87 0x00007f074d7fd662 in gdk_event_source_dispatch (source=0x1fc2440, callback=0x0, user_data=0x0) at ../subprojects/gtk/gdk/x11/gdkeventsource.c:425
#88 0x00007f074dc2dcd6 in g_main_dispatch (context=0x1f5b4d0) at ../glib/gmain.c:3394
#89 0x00007f074dc2ef26 in g_main_context_dispatch (context=0x1f5b4d0) at ../glib/gmain.c:4112
#90 0x00007f074dc2f11e in g_main_context_iterate (context=0x1f5b4d0, block=1, dispatch=1, self=0x1ef4560) at ../glib/gmain.c:4188
#91 0x00007f074dc2f258 in g_main_context_iteration (context=0x1f5b4d0, may_block=1) at ../glib/gmain.c:4253
#92 0x00007f074dea6448 in g_application_run (application=0x1f00100 [GsApplication], argc=1, argv=0x7fff41a4af38) at ../gio/gapplication.c:2569
#93 0x000000000045ba16 in main (argc=1, argv=0x7fff41a4af38) at ../src/gs-main.c:49

Problem no. 1: gs_odrs_provider_fetch_for_app is called int he main thread
Problem no. 2: gs_plugin_job_refine_run_async is not async at all - see it being called twice in the backtrace

Assignee
Assign to
Time tracking