It looks like two nested calls to urf-device-ofono.c:set_soft() provokes this. The second call to set_soft() is made before the callback for the first call has been invoked. Apparently this provokes that the callback for the second one is invoked after the call to the object's dispose().
I think that the fact that we are using the same GCancellable object in both calls makes that the call to g_object_unref() for the DBus proxy in dispose() does not cancel the second callback, so it gets called in the end, but the modem object has already been destroyed.
It looks like two nested calls to urf-device- ofono.c: set_soft( ) provokes this. The second call to set_soft() is made before the callback for the first call has been invoked. Apparently this provokes that the callback for the second one is invoked after the call to the object's dispose().
I think that the fact that we are using the same GCancellable object in both calls makes that the call to g_object_unref() for the DBus proxy in dispose() does not cancel the second callback, so it gets called in the end, but the modem object has already been destroyed.