summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormonsta <[email protected]>2016-03-01 17:14:45 +0300
committermonsta <[email protected]>2016-03-01 17:14:45 +0300
commit6316d1e7d9ecf742810c2cc90e518cc1e8bd7c9b (patch)
tree79e4ac971a234bbddfeb6dd524332bb72313747b
parent254a91f8e544685e7de8b110f4981561e2a77a74 (diff)
downloadmate-system-monitor-6316d1e7d9ecf742810c2cc90e518cc1e8bd7c9b.tar.bz2
mate-system-monitor-6316d1e7d9ecf742810c2cc90e518cc1e8bd7c9b.tar.xz
fix segfault on view mode change with process properties open
from https://git.gnome.org/browse/gnome-system-monitor/commit/?id=76545e553c620d9b3437456bb4dbffa355c59816
-rw-r--r--src/openfiles.cpp5
-rw-r--r--src/procproperties.cpp11
2 files changed, 9 insertions, 7 deletions
diff --git a/src/openfiles.cpp b/src/openfiles.cpp
index 76f2138..10f164c 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;
@@ -357,7 +358,7 @@ create_single_openfiles_dialog (GtkTreeModel *model, GtkTreePath *path,
tree = create_openfiles_tree (procdata);
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", procdata->settings);
gtk_box_pack_start (GTK_BOX (dialog_vbox), scrolled, TRUE, TRUE, 0);
diff --git a/src/procproperties.cpp b/src/procproperties.cpp
index 216f299..5effc9a 100644
--- a/src/procproperties.cpp
+++ b/src/procproperties.cpp
@@ -107,6 +107,9 @@ fill_proc_properties (GtkWidget *tree, ProcInfo *info)
guint i;
GtkListStore *store;
+ if (!info)
+ return;
+
get_process_memory_info(info);
proc_arg proc_props[] = {
@@ -151,10 +154,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);
}
@@ -273,7 +274,7 @@ create_single_procproperties_dialog (GtkTreeModel *model, GtkTreePath *path,
tree = create_procproperties_tree (procdata);
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);