Skip to content
  • Andrea Azzarone's avatar
    online-accounts: Don't segfault if get_all_providers_cb is called during init · c6776a7b
    Andrea Azzarone authored
    Due to an API bug in GNOME Online Accounts, the asynchronous
    goa_provider_get_all method doesn't accept a GCancellable argument. This makes
    it difficult to cancel an ongoing call when the CcGoaPanel gets destroyed.
    
    This was hacked around by taking a reference on the panel for the duration of
    the call. Instead of cancelling a pending call on destruction, it would keep the
    panel alive until the call was over.
    
    The hack does not consider the case get_all_providers_cb is called while the
    panel is still being initialized. E.g. this happen when create the panel passing
    the paramenters "add <provider>" because the constuct properties are set just
    after cc_goa_panel_init returns and because goa_provider_add_account will result
    in a call to g_main_context_iterate (caused by gtk_dialog_run).
    
    In order to work around this we can call goa_provider_get_all in _constructed()
    after all construct properties have been set.
    
    GNOME/gnome-control-center#401
    c6776a7b