Closed Bug 539138 Opened 15 years ago Closed 15 years ago

Flash OOPP: Gdk-CRITICAL **: gdk_window_get_origin: assertion `GDK_IS_WINDOW (window)' failed [@ libgdk-x11-2.0.so.0.1800.9@0x2bb7b ]

Categories

(External Software Affecting Firefox Graveyard :: Flash (Adobe), defect)

x86_64
Linux
defect
Not set
normal

Tracking

(Not tracked)

RESOLVED WORKSFORME

People

(Reporter: karlt, Assigned: karlt)

References

Details

With any OOP Flash (LNX 10,0,42,34) windowed plugin instance: [PluginModuleParent] NPP_New: got return value 0 [PluginInstanceParent] NPP_GetValue(NPPVpluginNeedsXEmbed) nsPluginNativeWindowGtk2: NPPVpluginNeedsXEmbed=1 nsPluginNativeWindowGtk2: call SetWindow with xid=0x32005f8 [PluginModuleParent] NPP_SetWindow [PluginInstanceChild] NPP_SetWindow(0x32005f8, 8, 8, 648 x 361) [PluginModuleChild] _getvalue Gdk-CRITICAL **: gdk_window_get_origin: assertion `GDK_IS_WINDOW (window)' failed #0 IA__g_log (log_domain=0x7f84a5a19fd3 "Gdk", log_level=G_LOG_LEVEL_CRITICAL, format=0x7f84a481a09d "%s: assertion `%s' failed") at gmessages.c:525 #1 0x00007f84a59e997b in IA__gdk_window_get_origin (window=0x0, x=0x7f849e691320, y=0x7f849e691324) at gdkwindow.c:3979 #2 0x00007f84a59e7e83 in IA__gdk_screen_get_monitor_at_window ( screen=0x2354130, window=0x0) at gdkscreen.c:317 #3 0x00007f84aad9b7a3 in ?? () from /home/karl/.mozilla/plugins/libflashplayer.so #4 0x00007f84aad9eafd in ?? () from /home/karl/.mozilla/plugins/libflashplayer.so #5 0x00007f84aad95448 in ?? () from /home/karl/.mozilla/plugins/libflashplayer.so #6 0x00007f84aad995b9 in ?? () from /home/karl/.mozilla/plugins/libflashplayer.so #7 0x00007f84a994c040 in mozilla::plugins::PluginInstanceChild::AnswerNPP_SetWindow (this=0x2348c00, aWindow=@0x7f849e691570, rv=0x7f849e69163c) at /home/karl/moz/dev/dom/plugins/PluginInstanceChild.cpp:446
Calls from the OOP plugin: gtk_plug_new(52429150) = 0x012cf060 gtk_drawing_area_new() = 0x012d3150 gtk_object_get_type() = 19359600 gtk_widget_get_type() = 17351696 g_type_check_instance_cast(0x012d3150, 17351696) = 0x012d3150 g_type_check_instance_cast(0x012d3150, 19359600) = 0x012d3150 gtk_container_get_type() = 18951664 g_type_check_instance_cast(0x012cf060, 18951664) = 0x012cf060 gtk_container_add(0x012cf060, 0x012d3150) = <void> gtk_widget_add_events(0x012d3150, 2125582) = <void> g_type_check_instance_cast(0x012d3150, 80) = 0x012d3150 g_signal_connect_data(0x012d3150, "event", 0x7f157d271b50, 0x7f1570b68000, 0) = 10 gtk_widget_show(0x012d3150) = <void> gtk_widget_get_screen(0x012d3150) = 0x01280130 gdk_screen_get_monitor_at_window(0x01280130, NULL) = 1 gdk_screen_get_monitor_geometry(0x01280130, 1, 0x7f1570b65370) = <void> gtk_widget_show(0x012cf060 <unfinished ...> _setjmp(0x7f157dd06ea0, 0x12d31c0, 0, 0x12d5010, 0x7f1570b64260) = 0 <... gtk_widget_show resumed> ) = <void> When the GtkPlug is in the same process as the GtkSocket, for some reason (probably because the GtkSocket is the parent container and that is realized), the GtkPlug is created already realized (i.e. it has a window). Parenting the GtkDrawingArea in the GtkPlug container then realizes the GtkDrawingArea, giving it a window. When the GtkPlug is created in a separate process to the GtkSocket, it is not already realized. Parenting the GtkDrawingArea in the GtkPlug container does not realize the GtkDrawingArea because the parent is not realized. Even when showing the GtkDrawingArea, it is not realized because its parent is not realized or shown. At the time of the gdk_screen_get_monitor_at_window() call, the GtkDrawingArea is not realized, but its NULL (non-existant) window is passed to gdk_screen_get_monitor_at_window(), causing the assertion. In default gtk builds gdk_window_get_origin() will detect the NULL window and return early. When this happens, as gdk_screen_get_monitor_at_window() is currently written, it returns the last monitor in the list, and so Flash will sometimes not get the correct geometry. The results will be more serious in systems where GTK is built without checks (as an optimization on embedded devices for example). On such systems gdk_window_get_origin() will crash. If gdk_window_get_origin() doesn't crash it looks like the problems will be limited to Flash having the incorrect monitor geometry as the next thing that happens is that the GtkPlug is shown, which will cause the GdkDrawingArea to be realized.
Blocks: OOPP
> The results will be more serious in systems where GTK is built without checks > (as an optimization on embedded devices for example). On such systems > gdk_window_get_origin() will crash. That might be what is happening here: bp-a2cc6176-152d-4474-b96f-4d8132100423 libflashplayer.so 9BC43748D925AB0C97B43BB3C7019E210 is the latest stable Flash LNX 10,0,45,2. 0 libgdk-x11-2.0.so.0.1800.9 libgdk-x11-2.0.so.0.1800.9@0x2bb7b 1 libgdk-x11-2.0.so.0.1800.9 libgdk-x11-2.0.so.0.1800.9@0x2a7f6 2 libflashplayer.so libflashplayer.so@0x3a35a 3 libflashplayer.so libflashplayer.so@0x3d9ef 4 libflashplayer.so libflashplayer.so@0x33570 5 libflashplayer.so libflashplayer.so@0x37da3 6 libxul.so mozilla::plugins::PluginInstanceChild::AnswerNPP_SetWindow dom/plugins/PluginInstanceChild.cpp:598 objdump -d --no-show-raw-insn --start-address=0x3a356 libflashplayer.so --stop-address=0x3a35b 3a356: call 2d7a0 <gdk_screen_get_monitor_at_window@plt>
Assignee: karlt → nobody
Component: Plug-ins → Flash (Adobe)
Product: Core → Plugins
QA Contact: plugins → adobe-flash
Summary: Flash OOPP: Gdk-CRITICAL **: gdk_window_get_origin: assertion `GDK_IS_WINDOW (window)' failed → Flash OOPP: Gdk-CRITICAL **: gdk_window_get_origin: assertion `GDK_IS_WINDOW (window)' failed [@ libgdk-x11-2.0.so.0.1800.9@0x2bb7b ]
Version: Trunk → 10.x
Assignee: nobody → karlt
Karl, should we just dup this bug against bug 561308? (Or the other way.)
I'll mark this WFM since the check-in in bug 561308. The bugs are similar but involve different parts of code in Flash Player. Bug 561308 was also fixed in flashplayer10_1_rc2_linux_041910 (or probably earlier in one of the betas), so we don't actually /need/ the check-in of bug 561308 with that version of Flash Player. However, without the patch in bug 561308, flashplayer10_1_rc2_linux_041910 still shows this bug with the gdk_window_get_origin assertion as well as a new (<unknown>:2247): Gdk-WARNING **: gdkdrawable-x11.c:878 drawable is not a pixmap or window this one from gdk_x11_drawable_get_xid().
Status: NEW → RESOLVED
Closed: 15 years ago
Depends on: 561308
Resolution: --- → WORKSFORME
Version and milestone values are being reset to defaults as part of product refactoring.
Version: 10.x → unspecified
Product: External Software Affecting Firefox → External Software Affecting Firefox Graveyard
You need to log in before you can comment on or make changes to this bug.