ShellWindowTracker: fix a reference counting bug

When retrieving a ShellApp from the GHashTable of child processes,
we need to take an extra reference, that the GHashTable of windows
to apps will own.
Also add some documentation to avoid repeating this bug in the future.

https://bugzilla.gnome.org/show_bug.cgi?id=642699
This commit is contained in:
Giovanni Campagna 2011-02-19 16:19:31 +01:00
parent 1cf4cb3de5
commit 5683bb9b8e

View File

@ -382,10 +382,21 @@ get_app_from_window_group (ShellWindowTracker *monitor,
return result;
}
/**
* get_app_from_window_pid:
* @monitor: a #ShellWindowTracker
* @window: a #MetaWindow
*
* Check if the pid associated with @window corresponds to an
* application we launched.
*
* Return value: (transfer full): A newly-referenced #ShellApp, or %NULL
*/
static ShellApp *
get_app_from_window_pid (ShellWindowTracker *tracker,
MetaWindow *window)
{
ShellApp *result;
int pid;
if (meta_window_is_remote (window))
@ -396,7 +407,11 @@ get_app_from_window_pid (ShellWindowTracker *tracker,
if (pid == -1)
return NULL;
return g_hash_table_lookup (tracker->launched_pid_to_app, GINT_TO_POINTER (pid));
result = g_hash_table_lookup (tracker->launched_pid_to_app, GINT_TO_POINTER (pid));
if (result != NULL)
g_object_ref (result);
return result;
}
/**
@ -405,6 +420,8 @@ get_app_from_window_pid (ShellWindowTracker *tracker,
* Determines the application associated with a window, using
* all available information such as the window's MetaGroup,
* and what we know about other windows.
*
* Returns: (transfer full): a #ShellApp, or NULL if none is found
*/
static ShellApp *
get_app_for_window (ShellWindowTracker *monitor,