[PATCH] fix: list partially corrupted folder

Jonas Kümmerlin rgcjonas at gmail.com
Mon Aug 31 23:08:18 CEST 2015


Am Sonntag, den 30.08.2015, 18:44 +0200 schrieb Jean-Tiare Le Bigot:
>    if (err != NULL)
>      {
>        g_propagate_error (error, err);
> -      return FALSE;
> +      g_clear_error(&err);
Do NOT ever do anything with err after you propagated it with
g_propagate_error(); g_propagate_error() invalidates the source. The only thing
you may (and have to if you plan to use the variable after that) do is simply
set err = NULL. (Hint: The docs explicitly spell this out. Read them.)
Everything else will very likely lead to memory corruption sooner or later.

> +          /* silently ignore broken file entries */
> +          if (g_error_matches (err, G_IO_ERROR, G_IO_ERROR_FAILED))
> +            {
> +              g_propagate_error (error, err);
> +              g_clear_error (&err);
same

The GError warnings could be caused by not initializing error pointers (grep for
"GError +\*[[:alnum:]]+;"), or by reusing an error variable without clearing it
before. You MUST avoid passing an already initialized GError* as out parameter
into a function; propagating errors in a loop violates this.

You can learn more about error reporting in GLib here: 
https://developer.gnome.org/glib/stable/glib-Error-Reporting.html

Read it carefully; the detailed semantics are important.


More information about the Xfce4-dev mailing list