bug-classpath
[Top][All Lists]
Advanced

[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





reply via email to

[Prev in Thread] Current Thread [Next in Thread]