diff options
author | Jakub Zawadzki <darkjames-ws@darkjames.pl> | 2012-06-10 22:03:17 +0000 |
---|---|---|
committer | Jakub Zawadzki <darkjames-ws@darkjames.pl> | 2012-06-10 22:03:17 +0000 |
commit | a2bb94c3b33d53f42534aceb7cc67aab1d1fb1f9 (patch) | |
tree | 2a200d67e60dc81e264abe06f48848008236b1dc /ui/gtk/packet_win.c | |
parent | 339bedb75ce2ca52993d119d151ed2107eb508bd (diff) | |
download | wireshark-a2bb94c3b33d53f42534aceb7cc67aab1d1fb1f9.tar.gz |
Clear GtkTreeStore before freeing edt
When building current data for packet details treeview we store two things.
- Generated string with item label
- Pointer to node field_info structure
After epan_dissect_{free, cleanup} pointer to field_info node is no longer
valid so we should clear GtkTreeStore before freeing.
svn path=/trunk/; revision=43188
Diffstat (limited to 'ui/gtk/packet_win.c')
-rw-r--r-- | ui/gtk/packet_win.c | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/ui/gtk/packet_win.c b/ui/gtk/packet_win.c index dd2921e1ab..fdd0bcaa2d 100644 --- a/ui/gtk/packet_win.c +++ b/ui/gtk/packet_win.c @@ -684,6 +684,7 @@ edit_pkt_tree_row_activated_cb(GtkTreeView *tree_view, GtkTreePath *path, GtkTre /* DataPtr->pseudo_header = data.pseudo_header; */ memcpy(DataPtr->pd, data.pd, DataPtr->frame->cap_len); + proto_tree_draw(NULL, DataPtr->tree_view); epan_dissect_cleanup(&(DataPtr->edt)); epan_dissect_init(&(DataPtr->edt), TRUE, TRUE); epan_dissect_run(&(DataPtr->edt), &DataPtr->pseudo_header, DataPtr->pd, DataPtr->frame, NULL); @@ -806,6 +807,7 @@ edit_pkt_win_key_pressed_cb(GtkWidget *win _U_, GdkEventKey *event, gpointer use /* redissect if changed */ if (data.val != -1) { /* XXX, can be optimized? */ + proto_tree_draw(NULL, DataPtr->tree_view); epan_dissect_cleanup(&(DataPtr->edt)); epan_dissect_init(&(DataPtr->edt), TRUE, TRUE); epan_dissect_run(&(DataPtr->edt), &DataPtr->pseudo_header, DataPtr->pd, DataPtr->frame, NULL); @@ -841,6 +843,7 @@ edit_pkt_destroy_new_window(GObject *object _U_, gpointer user_data) struct PacketWinData *DataPtr = user_data; detail_windows = g_list_remove(detail_windows, DataPtr); + proto_tree_draw(NULL, DataPtr->tree_view); epan_dissect_cleanup(&(DataPtr->edt)); g_free(DataPtr); @@ -990,6 +993,7 @@ destroy_new_window(GObject *object _U_, gpointer user_data) struct PacketWinData *DataPtr = user_data; detail_windows = g_list_remove(detail_windows, DataPtr); + proto_tree_draw(NULL, DataPtr->tree_view); epan_dissect_cleanup(&(DataPtr->edt)); g_free(DataPtr->pd); g_free(DataPtr); |