plug-ins: revert the multi-threading code.

The whole multi-threading changes in the help plug-in seem to badly
break on macOS. See discussion in reopened #12898.
We decided to get rid of it for now and see later if we need to
reimplement this (after understanding what is going on).

Revert "plug-ins: fix #13049 Calling help on unknown help-id causes..."

This reverts commit 7d153bcc6d.

Revert "plug-ins/help: fix thread unnecessarily waiting when locale_parse failed"

This reverts commit fd0ccfa16c.

Revert "plug-ins/help: fix crash when locale is NULL"

This reverts commit 4075add5b4.

Revert "plug-ins: fix failing to access help from within GIMP"

This reverts commit 38f0527ebc.

Revert "plug-ins: add some better error handling when the docs XML request/parsing fails."

This reverts commit 543bb374a8.

Revert "plug-ins: try to load the gimp-help.xml file in a thread."

This reverts commit f2d47e910b.
This commit is contained in:
Jehan 2025-03-16 19:24:34 +01:00
parent 34e35f3fd5
commit 8c077d50d1
3 changed files with 25 additions and 101 deletions

View File

@ -42,22 +42,8 @@
#endif
typedef struct
{
gboolean *success;
gboolean *done;
GimpHelpLocale *locale;
const gchar *uri;
const gchar *domain;
GimpHelpProgress *progress;
GCancellable *cancellable;
GError **error;
} HelpThreadData;
/* local function prototypes */
static gboolean parse_thread_func (HelpThreadData *data);
static gboolean domain_locale_parse (GimpHelpDomain *domain,
GimpHelpLocale *locale,
GimpHelpProgress *progress,
@ -118,11 +104,9 @@ gimp_help_domain_lookup_locale (GimpHelpDomain *domain,
return locale;
locale = gimp_help_locale_new (locale_id);
g_hash_table_insert (domain->help_locales, g_strdup (locale_id), locale);
if (! domain_locale_parse (domain, locale, progress, NULL))
g_clear_pointer (&locale, gimp_help_locale_free);
else
g_hash_table_insert (domain->help_locales, g_strdup (locale_id), locale);
domain_locale_parse (domain, locale, progress, NULL);
return locale;
}
@ -146,24 +130,25 @@ gimp_help_domain_map (GimpHelpDomain *domain,
if (fatal_error)
*fatal_error = FALSE;
/* Look for a reference matching the help_id */
/* first pass: look for a reference matching the help_id */
for (list = help_locales; list && !ref; list = list->next)
{
locale = gimp_help_domain_lookup_locale (domain,
(const gchar *) list->data,
progress);
if (locale)
{
ref = gimp_help_locale_map (locale, help_id);
/* It doesn't make sense to keep looking since all available locales
* have the same pages available. If the first locale present
* doesn't have it, the others won't have it either. */
if (! ref)
ref = locale->help_missing;
}
ref = gimp_help_locale_map (locale, help_id);
}
if (ret_locale && locale)
/* second pass: look for a fallback */
for (list = help_locales; list && !ref; list = list->next)
{
locale = gimp_help_domain_lookup_locale (domain,
(const gchar *) list->data,
progress);
ref = locale->help_missing;
}
if (ret_locale)
*ret_locale = locale;
if (ref)
@ -185,7 +170,7 @@ gimp_help_domain_map (GimpHelpDomain *domain,
locale = gimp_help_domain_lookup_locale (domain,
GIMP_HELP_DEFAULT_LOCALE, NULL);
if (locale && ! domain_locale_parse (domain, locale, NULL, &error))
if (! domain_locale_parse (domain, locale, NULL, &error))
{
switch (error->code)
{
@ -243,34 +228,14 @@ gimp_help_domain_map (GimpHelpDomain *domain,
/* private functions */
G_LOCK_DEFINE (done);
static gboolean
parse_thread_func (HelpThreadData *data)
{
*data->success = gimp_help_locale_parse (data->locale, data->uri, data->domain,
data->progress, data->cancellable, data->error);
G_LOCK (done);
*data->done = TRUE;
G_UNLOCK (done);
return *data->success;
}
static gboolean
domain_locale_parse (GimpHelpDomain *domain,
GimpHelpLocale *locale,
GimpHelpProgress *progress,
GError **error)
{
GCancellable *cancellable;
gchar *uri;
GThread *thread;
GTimer *timer;
gboolean success = FALSE;
gboolean done = FALSE;
HelpThreadData data;
gchar *uri;
gboolean success;
g_return_val_if_fail (domain != NULL, FALSE);
g_return_val_if_fail (locale != NULL, FALSE);
@ -279,41 +244,10 @@ domain_locale_parse (GimpHelpDomain *domain,
uri = g_strdup_printf ("%s/%s/gimp-help.xml",
domain->help_uri, locale->locale_id);
timer = g_timer_new ();
cancellable = g_cancellable_new ();
data.done = &done;
data.success = &success;
data.locale = locale;
data.uri = uri;
data.domain = domain->help_domain;
data.progress = progress;
data.cancellable = cancellable;
data.error = error;
thread = g_thread_new (NULL, (GThreadFunc) parse_thread_func, &data);
while (TRUE)
{
gboolean exit;
G_LOCK (done);
exit = *data.done;
G_UNLOCK (done);
if (! exit && g_timer_elapsed (timer, NULL) > 10.0)
{
g_cancellable_cancel (cancellable);
exit = TRUE;
}
if (exit)
break;
}
g_thread_join (thread);
success = gimp_help_locale_parse (locale, uri, domain->help_domain,
progress, error);
g_free (uri);
g_timer_destroy (timer);
g_object_unref (cancellable);
return success;
}

View File

@ -169,11 +169,11 @@ gimp_help_locale_parse (GimpHelpLocale *locale,
const gchar *uri,
const gchar *help_domain,
GimpHelpProgress *progress,
GCancellable *cancellable,
GError **error)
{
GMarkupParseContext *context;
GFile *file = NULL;
GCancellable *cancellable = NULL;
LocaleParser parser = { NULL, };
#ifdef PLATFORM_OSX
NSURL *fileURL;
@ -213,15 +213,12 @@ gimp_help_locale_parse (GimpHelpLocale *locale,
{
gchar *name = g_file_get_parse_name (file);
cancellable = g_cancellable_new ();
_gimp_help_progress_start (progress, cancellable,
_("Loading index from '%s'"), name);
g_clear_object (&cancellable);
g_free (name);
if (g_cancellable_is_cancelled (cancellable))
{
_gimp_help_progress_finish (progress);
return FALSE;
}
}
#ifdef PLATFORM_OSX
@ -241,8 +238,6 @@ gimp_help_locale_parse (GimpHelpLocale *locale,
locale_set_error (error,
_("Could not load data from '%s': %s"), file);
g_object_unref (file);
if (progress)
_gimp_help_progress_finish (progress);
return FALSE;
}
@ -254,13 +249,12 @@ gimp_help_locale_parse (GimpHelpLocale *locale,
GFileInfo *info = g_file_query_info (file,
G_FILE_ATTRIBUTE_STANDARD_SIZE, 0,
cancellable, error);
if (! info || g_cancellable_is_cancelled (cancellable))
if (! info)
{
locale_set_error (error,
_("Could not open '%s' for reading: %s"), file);
g_object_unref (file);
_gimp_help_progress_finish (progress);
return FALSE;
}
@ -271,15 +265,12 @@ gimp_help_locale_parse (GimpHelpLocale *locale,
stream = g_file_read (file, cancellable, error);
if (! stream || g_cancellable_is_cancelled (cancellable))
if (! stream)
{
locale_set_error (error,
_("Could not open '%s' for reading: %s"), file);
g_object_unref (file);
if (progress)
_gimp_help_progress_finish (progress);
return FALSE;
}
#endif /* ! PLATFORM_OSX */
@ -316,7 +307,7 @@ gimp_help_locale_parse (GimpHelpLocale *locale,
g_string_free (parser.value, TRUE);
g_free (parser.id_attr_name);
if (! success || g_cancellable_is_cancelled (cancellable))
if (! success)
locale_set_error (error, _("Parse error in '%s':\n%s"), file);
g_object_unref (file);

View File

@ -45,7 +45,6 @@ gboolean gimp_help_locale_parse (GimpHelpLocale *locale,
const gchar *uri,
const gchar *help_domain,
GimpHelpProgress *progress,
GCancellable *cancellable,
GError **error);