After an evaluation, GNOME has moved from Bugzilla to GitLab. Learn more about GitLab.
No new issues can be reported in GNOME Bugzilla anymore.
To report an issue in a GNOME project, go to GNOME GitLab.
Do not go to GNOME Gitlab for: Bluefish, Doxygen, GnuCash, GStreamer, java-gnome, LDTP, NetworkManager, Tomboy.
Bug 359362 - _write called before _set_window
_write called before _set_window
Status: RESOLVED DUPLICATE of bug 350297
Product: totem
Classification: Core
Component: Browser plugin (obsolete)
unspecified
Other Linux
: Normal critical
: ---
Assigned To: totem-browser-maint
totem-browser-maint
Depends on:
Blocks:
 
 
Reported: 2006-10-03 19:08 UTC by Christian Persch
Modified: 2006-10-05 10:16 UTC
See Also:
GNOME target: ---
GNOME version: ---


Attachments
log (72.63 KB, text/plain)
2006-10-03 19:11 UTC, Christian Persch
  Details
log with full stack traces (58.48 KB, patch)
2006-10-04 11:44 UTC, Christian Persch
none Details | Review

Description Christian Persch 2006-10-03 19:08:25 UTC
Using the browser plugin (w/ gstreamer 0.10) in epiphany on firefox 2.0 backend (edgy), I got an X deadlock (could be NV driver specific), and using epiphany on xulrunner trunk I get loads of scary warnings. The difference could be due to changed plugin instantiation on xr trunk.

Steps:
0) Go to apple.com/trailers
1) Click on the trailer for "a scanner darkly"

(debug output attached)
Comment 1 Christian Persch 2006-10-03 19:11:44 UTC
Created attachment 73965 [details]
log
Comment 2 Bastien Nocera 2006-10-03 21:53:18 UTC
Works fine here, with both GStreamer and xine-lib.

The D-Bus errors look nasty:
** (epiphany:5142): CRITICAL **: dbus_g_proxy_add_signal: assertion `g_datalist_id_get_data (&priv->signal_signatures, q) == NULL' failed

Would you have proper backtraces (ie with line numbers) for those critical messages?
Comment 3 Christian Persch 2006-10-04 11:44:55 UTC
Created attachment 74003 [details] [review]
log with full stack traces

So the deadlock occured again, and I think it's a problem with the nonfree nvidia driver.

And this bug seems to be specific to gecko trunk.

What's happening is that while forking one plugin viewer, we recurse into reflow and forking another plugin, 'thanks' to the evil loop in totem_plugin_fork.
Comment 4 Christian Persch 2006-10-04 12:47:39 UTC
** (epiphany:5027): CRITICAL **: dbus_g_proxy_add_signal: assertion `g_datalist_id_get_data (&priv->signal_signatures, q) == NULL' failed

  • #4 dbus_g_proxy_add_signal
    at dbus-gproxy.c line 2604
  • #5 totem_plugin_fork
    at ../../browser-plugin/totemPlugin.cpp line 338
  • #113 totem_plugin_fork
    at ../../browser-plugin/totemPlugin.cpp line 346

Actually it's forking the SAME plugin again!
Comment 5 Bastien Nocera 2006-10-04 14:15:59 UTC
nsPluginNativeWindowGtk2: NPPVpluginNeedsXEmbed=1
nsPluginNativeWindowGtk2: call SetWindow with xid=0x2a01682
nsPluginNativeWindowGtk2: NPPVpluginNeedsXEmbed=0
nsPluginNativeWindowGtk2: call SetWindow with xid=0x2a01682

Why is it calling SetWindow twice with the same xid? (and then another time after that)

We only fork once if we get a SetWindow call, and it's if the ->window isn't set.
Why is it launching the first one without a --xid?

There's something fishy there. Are you sure something isn't trampling on the stack?
Comment 6 Christian Persch 2006-10-04 19:21:03 UTC
>nsPluginNativeWindowGtk2: NPPVpluginNeedsXEmbed=1
>nsPluginNativeWindowGtk2: call SetWindow with xid=0x2a01682
>nsPluginNativeWindowGtk2: NPPVpluginNeedsXEmbed=0
>nsPluginNativeWindowGtk2: call SetWindow with xid=0x2a01682

Those don't result in totem_plugin_set_window getting called; that's only called later.

It's calling the viewer without --xid because when it's getting forked in Write there hasn't been a SetWindow call yet. The SetWindow call comes only later when reflowing.

It's not trampling on the stack, as far as I can tell. Recursing into reflow and forking again while forking gets the dbus signal handler connected with the same handler/data, maybe dbus-glib doesn't like that?
Comment 7 Bastien Nocera 2006-10-04 21:23:37 UTC
Argh. It was nice in the olden days, we could rely (well, could we?) on the _write call happening after the _set_window for embed with visuals.
Best bet is to write to a FIFO of our own, and wait for a _set_window call when we're not hidden. What do you think?
Comment 8 Bastien Nocera 2006-10-05 10:16:31 UTC
bug 350297 is about starting the player ASAP, which should fix this particular problem. So I'll close this as a dupe.

*** This bug has been marked as a duplicate of 350297 ***