Need to review all GObject::dispose()
Dispose can be called multiple times and also while the object is still in use, even in concurrent use from other threads (see g_object_run_dispose()
which can be called at any time, especially by bindings that want to break reference cycles).
In addition:
When dispose ends, the object should not hold any reference to any other member object. The object is also expected to be able to answer client method invocations (with possibly an error code but no memory violation) until finalize is executed.
So we need to make sure that all our dispose() implementations are thread-safe and don't get rid of anything that would cause other API to explode badly afterwards.