gmain: allow g_source_get_context() on destroyed sources
authorDan Winship <danw@gnome.org>
Mon, 30 Jul 2012 12:06:57 +0000 (08:06 -0400)
committerDan Winship <danw@gnome.org>
Mon, 30 Jul 2012 16:48:10 +0000 (12:48 -0400)
commit26056558be4656ee6e891a4fae5d4198de7519cf
tree21711128925109f280cf539710b66456cb6f561e
parent6881e743ee37eff154326ef5e0510651c0a14ac4
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
glib/gmain.c
glib/tests/mainloop.c