I commented on the MP, but I'll copy that here too:
"I'm not sure this is going to fix it. From looking at the crash reports, the issue just looks like a classic use-after-free rather than an issue with gobject type casts. In unity_webapps_available_application_get_application_domain, it's most likely the dereferencing of |app| which triggers it ( ((UnityWebappsAvailableApplicationClass *)(((GTypeInstance *)app)->g_class))->get_application_domain(app) )"
I commented on the MP, but I'll copy that here too:
"I'm not sure this is going to fix it. From looking at the crash reports, the issue just looks like a classic use-after-free rather than an issue with gobject type casts. In unity_webapps_ available_ application_ get_application _domain, it's most likely the dereferencing of |app| which triggers it ( ((UnityWebappsA vailableApplica tionClass *)(((GTypeInstance *)app)- >g_class) )->get_ application_ domain( app) )"
In fact, it looks like the bug is here:
http:// bazaar. launchpad. net/~webapps/ libunity- webapps/ trunk/view/ head:/src/ libunity- webapps- repository/ unity-webapps- application- repository. c#L347
unity_ webapps_ local_url_ index_load_ applications (index); local_url_ index_get_ application_ by_name (index, name); hash_table_ replace (data-> repository- >priv-> applications_ by_name, g_strdup (name), app); <---
app = unity_webapps_
g_
}
... |app| is stored without a reference, so next time a webapp is installed, this app is destroyed when it is replaced here:
http:// bazaar. launchpad. net/~webapps/ libunity- webapps/ trunk/view/ head:/src/ libunity- webapps- repository/ unity-webapps- application- collector. c#L217
app_name = unity_webapps_ application_ manifest_ get_package_ name (manifest); calAvailableApp lication *) unity_webapps_ local_available _application_ new (manifest); table_replace (collector- >priv-> found_applicati ons, g_strdup (app_name),
app = (UnityWebappsLo
g_hash_
g_object_ref (app));
out: object_ unref (G_OBJECT (manifest)); object_ unref (G_OBJECT (app));
if (manifest != NULL)
{
g_
}
if (app != NULL)
{
g_
}
return ret;