Analysis so far:
- bamf does not provide the g_io_module_query hook; therefore gio-querymodules does not add it to giomodule.cache.
- g_io_modules_scan_all_in_directory(), which is called from _g_io_modules_ensure_loaded() against both the multiarch and pre-multiarch directories, falls back to scanning the directory and loading any additional modules with this code:
/* Try to load and init types */
if (g_type_module_use (G_TYPE_MODULE (module))) g_type_module_unuse (G_TYPE_MODULE (module)); /* Unload */
else
{ /* Failure to load */ g_printerr ("Failed to load module: %s\n", path); g_object_unref (module); g_free (path); continue;
}
- the other gio interface that probes directories, g_io_modules_load_all_in_directory(), takes a directory name so something calling this could fail to know about the multiarch directories; but so far I don't see where this code would be called from to cause this problem (it's not called in bamf itself).
- manually adding libgiobamf.so to giomodule.cache is reported to correct the problem.
- moving libgiobamf.so back to /usr/lib/gio/modules is *also* reported to correct the problem.
So I don't think we have a good understanding of why this doesn't work as-is. For the time being, the simplest solution is to adjust bamf to move the library back to /usr/lib/gio/modules as a workaround.
Analysis so far: scan_all_ in_directory( ), which is called from _g_io_modules_ ensure_ loaded( ) against both the multiarch and pre-multiarch directories, falls back to scanning the directory and loading any additional modules with this code:
- bamf does not provide the g_io_module_query hook; therefore gio-querymodules does not add it to giomodule.cache.
- g_io_modules_
/* Try to load and init types */
g_type_ module_ unuse (G_TYPE_MODULE (module)); /* Unload */
g_printerr ("Failed to load module: %s\n", path);
g_object_ unref (module);
g_free (path);
continue;
if (g_type_module_use (G_TYPE_MODULE (module)))
else
{ /* Failure to load */
}
- the other gio interface that probes directories, g_io_modules_ load_all_ in_directory( ), takes a directory name so something calling this could fail to know about the multiarch directories; but so far I don't see where this code would be called from to cause this problem (it's not called in bamf itself). gio/modules is *also* reported to correct the problem.
- manually adding libgiobamf.so to giomodule.cache is reported to correct the problem.
- moving libgiobamf.so back to /usr/lib/
So I don't think we have a good understanding of why this doesn't work as-is. For the time being, the simplest solution is to adjust bamf to move the library back to /usr/lib/ gio/modules as a workaround.