[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Bug classpath/39359] java.awt.FileDialog and addNotify / java.awt.Popup
From: |
bugs at cipher dot org dot uk |
Subject: |
[Bug classpath/39359] java.awt.FileDialog and addNotify / java.awt.PopupMenu Segmentation Fault |
Date: |
5 Mar 2009 10:46:55 -0000 |
------- Comment #1 from bugs at cipher dot org dot uk 2009-03-05 10:46 -------
-- A bit more analysis on how I think this bug works --
If we inspect the core dumps , gtkpeer_get_widget returns a widget of null
since the peer passed is null
(gdb) down
#1 0xad286a86 in gtkpeer_get_widget (env=0x806baa0, peer=0x0) at gtkpeer.c:186
186 obj = (*env)->GetObjectField(env, peer, widgetFID);
(gdb) down
#0 0x0805af1b in ?? ()
(gdb) up
#1 0xad286a86 in gtkpeer_get_widget (env=0x806baa0, peer=0x0) at gtkpeer.c:186
186 obj = (*env)->GetObjectField(env, peer, widgetFID);
(gdb) list
181 {
182 jobject obj;
183 void *widget;
184
185 /* Fetch the widget field from the peer object. */
186 obj = (*env)->GetObjectField(env, peer, widgetFID);
187
188 /* Fetch actual widget pointer. */
189 #if SIZEOF_VOID_P == 8
190 widget = (void*) (*env)->GetLongField(env, obj, pointerDataFID);
191 #else
192 widget = (void*) (*env)->GetIntField(env, obj, pointerDataFID);
193 #endif
194 return widget;
195 }
196
197
198 /**
199 * Stores the global JNI reference of a peer inside the peer.
200 *
(gdb) print widget
$1 = (GtkWidget *) 0x0
if we go up, it seems that the pointer returned by the function is returned to
parentp (line 103) which is the dereferenced by GTK_WINDOW
(gdb) up
#2 0xad279a1d in Java_gnu_java_awt_peer_gtk_GtkFileDialogPeer_create
(env=0x806baa0, obj=0xafd77850, parent=0x0, mode=0)
at gnu_java_awt_peer_gtk_GtkFileDialogPeer.c:103
103 parentp = gtkpeer_get_widget(env, parent);
(gdb) list
98 gdk_threads_enter ();
99
100 /* Create global reference and save it for future use */
101 gtkpeer_set_global_ref (env, obj);
102
103 parentp = gtkpeer_get_widget(env, parent);
104
105 if (mode == AWT_FILEDIALOG_LOAD)
106 widget = gtk_file_chooser_dialog_new
107 ("Open File",
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=39359