mirror of
https://gitlab.freedesktop.org/NetworkManager/NetworkManager.git
synced 2025-12-24 23:00:07 +01:00
shared: add nm_clear_g_source_inst()
glib really likes the numeric source IDs. That is, g_idle_add(), g_timeout_add(), etc. return those IDs, that can then be destroyed with g_remove_source() (or nm_clear_g_source()). I think these numeric IDs are really not great. - API like g_idle_add() and g_remove_source() only works with the g_main_context_get_default() instance. That means, you cannot use this API for any other contexts. If you'd insist on using numeric IDs, you'd need to call g_main_context_find_source_by_id() on the right context first (but you'd also have to track the context alongside the ID). - g_remove_source() requires first a call to g_main_context_find_source_by_id(). This involves taking a mutex and doing an extra hash lookup. Instead, it often seems preferable to use the GSource instance directly. It works with any context, it can be referenced and unreferenced, and it can be destroyed, and avoids the overhead of g_main_context_find_source_by_id(). The only downside really is that keeping a GSource pointer takes one pointer size, while the guint source ID is usually only 4 bytes. Anyway, I think we should deal more with GSource instances directly. Hence, add this convenience macro, that works like nm_clear_g_source().
This commit is contained in:
parent
c40ff42ae6
commit
2ef5014f98
1 changed files with 2 additions and 0 deletions
|
|
@ -925,6 +925,8 @@ nm_g_source_destroy_and_unref (GSource *source)
|
|||
g_source_unref (source);
|
||||
}
|
||||
|
||||
#define nm_clear_g_source_inst(ptr) (nm_clear_pointer ((ptr), nm_g_source_destroy_and_unref))
|
||||
|
||||
NM_AUTO_DEFINE_FCN0 (GSource *, _nm_auto_destroy_and_unref_gsource, nm_g_source_destroy_and_unref);
|
||||
#define nm_auto_destroy_and_unref_gsource nm_auto(_nm_auto_destroy_and_unref_gsource)
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue