[gnome-system-monitor] Fix segfault on view mode change with process properties open. https://bugzilla.gnome.org/show_bug.c



commit 76545e553c620d9b3437456bb4dbffa355c59816
Author: Robert Roth <robert roth off gmail com>
Date:   Sat May 18 01:55:46 2013 +0300

    Fix segfault on view mode change with process properties open.
    https://bugzilla.gnome.org/show_bug.cgi?id=700552

 src/openfiles.cpp      |    5 +++--
 src/procproperties.cpp |   13 ++++++-------
 2 files changed, 9 insertions(+), 9 deletions(-)
---
diff --git a/src/openfiles.cpp b/src/openfiles.cpp
index f9a6877..74f4f1f 100644
--- a/src/openfiles.cpp
+++ b/src/openfiles.cpp
@@ -174,7 +174,8 @@ update_openfiles_dialog (GtkWidget *tree)
     GHashTable *new_maps;
     guint i;
 
-    info = static_cast<ProcInfo*>(g_object_get_data (G_OBJECT (tree), "selected_info"));
+    pid_t pid = GPOINTER_TO_UINT(static_cast<pid_t*>(g_object_get_data (G_OBJECT (tree), "selected_info")));
+    info = ProcInfo::find(pid);
 
     if (!info)
         return;
@@ -353,7 +354,7 @@ create_single_openfiles_dialog (GtkTreeModel *model, GtkTreePath *path,
 
     tree = create_openfiles_tree (app);
     gtk_container_add (GTK_CONTAINER (scrolled), tree);
-    g_object_set_data (G_OBJECT (tree), "selected_info", info);
+    g_object_set_data (G_OBJECT (tree), "selected_info", GUINT_TO_POINTER (info->pid));
     g_object_set_data (G_OBJECT (tree), "settings", app->settings);
 
     g_signal_connect (G_OBJECT (openfilesdialog), "response",
diff --git a/src/procproperties.cpp b/src/procproperties.cpp
index 2cce374..085d0ff 100644
--- a/src/procproperties.cpp
+++ b/src/procproperties.cpp
@@ -111,8 +111,9 @@ fill_proc_properties (GtkWidget *tree, ProcInfo *info)
 {
     guint i;
     GtkListStore *store;
-
-    get_process_memory_info(info);
+    
+    if (!info)
+        return;
 
 #if defined (__OpenBSD__)
     struct clockinfo cinf;
@@ -167,10 +168,8 @@ update_procproperties_dialog (GtkWidget *tree)
 {
     ProcInfo *info;
 
-    info = static_cast<ProcInfo*>(g_object_get_data (G_OBJECT (tree), "selected_info"));
-
-    if (!info)
-        return;
+    pid_t pid = GPOINTER_TO_UINT(static_cast<pid_t*>(g_object_get_data (G_OBJECT (tree), "selected_info")));
+    info = ProcInfo::find(pid);
 
     fill_proc_properties(tree, info);
 }
@@ -291,7 +290,7 @@ create_single_procproperties_dialog (GtkTreeModel *model, GtkTreePath *path,
 
     tree = create_procproperties_tree (app);
     gtk_container_add (GTK_CONTAINER (scrolled), tree);
-    g_object_set_data (G_OBJECT (tree), "selected_info", info);
+    g_object_set_data (G_OBJECT (tree), "selected_info", GUINT_TO_POINTER (info->pid));
 
     gtk_box_pack_start (GTK_BOX (dialog_vbox), scrolled, TRUE, TRUE, 0);
     gtk_widget_show_all (scrolled);


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]