gmain: allow g_source_get_context() on destroyed sources
g_source_get_context() was checking that the source wasn't destroyed (since a source doesn't hold a ref on its context, and so source->context might point to garbage in that case). However, it's useful to be allowed to call g_source_get_context() on a source that is destroyed-but-currently-running. So instead, let g_source_get_context() return the context whenever it's non-NULL, and clear the source->context of any sources that are still in a context's sources list when the context is freed. Since sources are only removed from the list when the source is freed (not when it is destroyed), this means that now whenever a source has a non-NULL context pointer, then that pointer is valid. This also means that g_source_get_time() will now return-if-fail rather than crashing if it is called on a source whose context has been destroyed. Add tests to glib/tests/mainloop to verify that g_source_get_context() and g_source_get_time() work on destroyed sources. https://bugzilla.gnome.org/show_bug.cgi?id=661767
parent
6881e743