I have found the problem!
when the main thread may wait on future events such as when it is notifying
another thread to shutdown, the code in nsBaseAppShell::OnProcessNextEvent
enters the glib loop assuming that native events will occur frequently allowing
it exit eventually when the thread event q receive a new event. In some cases,
(mine) no native events ever occur (it could be because no keyboard or mouse is
connected).
while (!NS_HasPendingEvents(thr) && !mProcessedGeckoEvents) {
// If we have been asked to exit from Run, then we should not wait for
// events to process. Note that an inner nested event loop causes
// 'mayWait' to become false too, through 'mBlockedWait'.
if (mExiting)
mayWait = false;
mLastNativeEventTime = PR_IntervalNow();
if (!DoProcessNextNativeEvent(mayWait, recursionDepth) || !mayWait)
break;
}
An easy way to fix it would be to do that:
DoProcessNextNativeEvent(false, recursionDepth);
if(!mayWait)
break;
The best way IMO, would be to specify a small to value (ie 20ms) but it doesn't
seems to be trivial to do with glib. (you have to add some kind of g_source to
the default g_context) and this is beyond my field of expertise....
-----Original Message-----
From:
dev-platform-bounces+olivier.pis.langlois=transport.alstom....@lists.mozilla.org
[mailto:dev-platform-bounces+olivier.pis.langlois=transport.alstom....@lists.mozilla.org]
On Behalf Of LANGLOIS Olivier PIS -EXT
Sent: Wednesday, October 24, 2012 8:59 PM
To: Karl Tomlinson; [email protected]
Subject: RE: deadlock while flash plugin calls posturlnotify
Karl,
Here is the call stack:
There must be a pollwrapper flipping the MayWait flag to infinite to. Hence on
my VM, there is always some event but since on my real hardware I have no input
devices, this makes events rarer...
Let me clear that last point before opening a new bug. I'll check if the guilty
is not my old wxWidget library...
#0 0xb7fa8410 in __kernel_vsyscall ()
#1 0xb7218fbc in poll () from /lib/libc.so.6
#2 0xb7406f6d in g_poll () from /usr/lib/libglib-2.0.so.0
#3 0xb7ab0917 in wxapp_poll_func () from
/opt/400T/ramdisk/lib/libwx_gtk2_core-2.8.so.0
#4 0xb587cf0a in ?? () from /usr/lib/firefox-16.0.1/libxul.so 0x011E3F0A
(PollWrapper(_GPollFD*, unsigned int, int))
#5 0xb73fdc68 in ?? () from /usr/lib/libglib-2.0.so.0
#6 0xb73fdebe in g_main_context_iteration () from /usr/lib/libglib-2.0.so.0
#7 0xb587cc97 in ?? () from /usr/lib/firefox-16.0.1/libxul.so 0x011E3C97
(nsAppShell::ProcessNextNativeEvent)
#8 0xb5895360 in ?? () from /usr/lib/firefox-16.0.1/libxul.so 0x011FC360
(nsBaseAppShell::DoProcessNextNativeEvent)
#9 0xb589547a in ?? () from /usr/lib/firefox-16.0.1/libxul.so 0x011FC47A
(nsBaseAppShell::OnProcessNextEvent)
#10 0xb5b4bdf0 in ?? () from /usr/lib/firefox-16.0.1/libxul.so 0x014B2DF0
(nsThread::ProcessNextEvent)
#11 0xb5afdae8 in ?? () from /usr/lib/firefox-16.0.1/libxul.so
(NS_ProcessNextEvent_P)
#12 0xb5b4b752 in ?? () from /usr/lib/firefox-16.0.1/libxul.so 0x014B2752
(nsThread::Shutdown)
#13 0xb5b4d648 in ?? () from /usr/lib/firefox-16.0.1/libxul.so 0x014B4648
(nsRunnableMethodImpl<unsigned int (nsIThread::*)(), true>::Run)
#14 0xb5b4bf72 in ?? () from /usr/lib/firefox-16.0.1/libxul.so 0x014B2F72
(nsThread::ProcessNextEvent)
#15 0xb5afdbe0 in ?? () from /usr/lib/firefox-16.0.1/libxul.so 0x01464BE0
(NS_ProcessPendingEvents_P)
#16 0xb5894c13 in ?? () from /usr/lib/firefox-16.0.1/libxul.so 0x011FBC13
(nsBaseAppShell::NativeEventCallback)
#17 0xb587cfff in ?? () from /usr/lib/firefox-16.0.1/libxul.so 0x011E3FFF
(nsAppShell::EventProcessorCallback)
#18 0xb742ddd4 in ?? () from /usr/lib/libglib-2.0.so.0
#19 0xb73fba29 in g_main_context_dispatch () from /usr/lib/libglib-2.0.so.0
#20 0xb73fdcc1 in ?? () from /usr/lib/libglib-2.0.so.0
#21 0xb73fde4d in g_main_loop_run () from /usr/lib/libglib-2.0.so.0
#22 0xb6ebb7bd in gtk_main () from /usr/lib/libgtk-x11-2.0.so.0
#23 0xb7acab05 in wxEventLoop::Run () from
/opt/400T/ramdisk/lib/libwx_gtk2_core-2.8.so.0
#24 0xb7b4ff6e in wxAppBase::MainLoop () from
/opt/400T/ramdisk/lib/libwx_gtk2_core-2.8.so.0
#25 0xb7b4fb41 in wxAppBase::OnRun () from
/opt/400T/ramdisk/lib/libwx_gtk2_core-2.8.so.0
#26 0x0808e161 in LayoutEngineClass::OnRun ()
#27 0xb7dc032a in wxEntry () from /opt/400T/ramdisk/lib/libwx_base-2.8.so.0
#28 0x0808e973 in main ()
-----Original Message-----
From:
dev-platform-bounces+olivier.pis.langlois=transport.alstom....@lists.mozilla.org
[mailto:dev-platform-bounces+olivier.pis.langlois=transport.alstom....@lists.mozilla.org]
On Behalf Of LANGLOIS Olivier PIS -EXT
Sent: Wednesday, October 24, 2012 7:18 PM
To: Karl Tomlinson; [email protected]
Subject: RE: deadlock while flash plugin calls posturlnotify
LANGLOIS Olivier writes:
> xulrunner: 16.0.1
Is this a regression?
i.e. Do you know whether it worked differently in previous versions?
Kindof but I'm coming from very far in the past. I'm trying to upgrade from
xulrunner-1.9.0.10. There was even no plugin-container in our previous version!
This process may just be waiting for the parent process to reply.
If you can get a stack trace (with symbols) of the parent process, then it may
be worth filing a bug.
Sure, I am working on that. I'm inches away to fully understand what is going
on. It seems that the main thread is deadlocking when some i/o thread pool is
shutting down. Look by yourself:
-1230996640[8175698]: nsStandardURL::GetFile [this=85f3af8
spec=file:///opt/400T/ramdisk/media/blank.html
resulting_path=/opt/400T/ramdisk/media/blank.html]
-1230996640[8175698]: nsComponentManager:
CreateInstanceByContractID(@mozilla.org/network/file-input-stream;1) succeeded
-1230996640[8175698]: nsComponentManager:
CreateInstanceByContractID(@mozilla.org/thread-pool;1) succeeded
-1230996640[8175698]: nsObserverService::AddObserver(8391040:
xpcom-shutdown-threads)
-1230996640[8175698]: nsComponentManager:
CreateInstance({0885d4f8-f7b8-4cda-902e-94ba38bc256e}) succeeded
-1230996640[8175698]: THRD-P(86913f8) dispatch [8691760 0]
-1230996640[8175698]: THRD-P(86913f8) put [0 0 4]
-1230996640[8175698]: EVENTQ(869140c): notify
-1230996640[8175698]: THRD-P(86913f8) put [spawn=1]
-1355306096[868f1f8]: EVENTQ(868d5c8): wait begin
-1230996640[8175698]: EVENTQ(868d5c8): notify
-1355306096[868f1f8]: EVENTQ(868d5c8): wait end
-1355306096[868f1f8]: THRD(868d590) ProcessNextEvent [1 0]
-1355306096[868f1f8]: EVENTQ(868d5c8): wait begin
-1230996640[8175698]: THRD-P(86913f8) put [868d590 kill=0]
-1230996640[8175698]: THRD(868d590) Dispatch [86913fc 0]
-1230996640[8175698]: EVENTQ(868d5c8): notify
-1355306096[868f1f8]: EVENTQ(868d5c8): wait end
-1355306096[868f1f8]: THRD(868d590) running [86913fc]
-1355306096[868f1f8]: THRD-P(86913f8) enter
-1355306096[868f1f8]: THRD-P(86913f8) running [8691760]
-1230996640[8175698]: III AsyncWait [this=86915e4]
-1230996640[8175698]: nsInputStreamPump::Suspend [this=8691360]
-1355306096[868f1f8]: THRD-P(86913f8) shutdown async [868d590]
-1355306096[868f1f8]: THRD(817df40) Dispatch [86b6680 0]
-1355306096[868f1f8]: EVENTQ(817df78): notify
-1355306096[868f1f8]: THRD-P(86913f8) leave
-1355306096[868f1f8]: THRD(868d590) ProcessNextEvent [1 0]
-1355306096[868f1f8]: EVENTQ(868d5c8): wait begin
-1230996640[8175698]: THRD(817df40) ProcessNextEvent [0 0]
-1230996640[8175698]: THRD(817df40) running [86b6680]
-1230996640[8175698]: THRD(868d590) shutdown
-1230996640[8175698]: EVENTQ(868d5c8): notify
-1230996640[8175698]: THRD(817df40) ProcessNextEvent [1 1]
-1355306096[868f1f8]: EVENTQ(868d5c8): wait end
-1355306096[868f1f8]: THRD(868d590) running [83edff0]
-1355306096[868f1f8]: THRD(817df40) Dispatch [83edf08 0]
-1355306096[868f1f8]: EVENTQ(817df78): notify
-1259202544[8052998]: NPError mozilla::plugins::child::_posturlnotify(NPP_t*,
const char*, const char*, uint32_t, const char*, NPBool, void*)
[time:1387967764026950][7180][PPluginInstanceChild] Sending
Msg_PStreamNotifyConstructor([TODO])
-1267217520[80a7398]:
/root/mozilla-release/ipc/chromium/src/chrome/common/ipc_channel_posix.cc:689:
sending message @80ce6b8 on channel @8061f98 with type 2293822 (0 in queue)
-1267217520[80a7398]:
/root/mozilla-release/ipc/chromium/src/chrome/common/ipc_channel_posix.cc:677:
sent message @80ce6b8 on channel @8061f98 with type 2293822
-1269396592[8568f78]:
/root/mozilla-release/ipc/chromium/src/chrome/common/ipc_channel_posix.cc:557:
received message on channel @83e4238 with type 2293822
-1269396592[8568f78]: THRD(817df40) Dispatch [817bf20 0]
-1269396592[8568f78]: EVENTQ(817df78): notify
nothing else happens from there...
_______________________________________________
dev-platform mailing list
[email protected]
https://lists.mozilla.org/listinfo/dev-platform
________________________________
CONFIDENTIALITY : This e-mail and any attachments are confidential and may be
privileged. If you are not a named recipient, please notify the sender
immediately and do not disclose the contents to another person, use it for any
purpose or store or copy the information in any medium.
_______________________________________________
dev-platform mailing list
[email protected]
https://lists.mozilla.org/listinfo/dev-platform
________________________________
CONFIDENTIALITY : This e-mail and any attachments are confidential and may be
privileged. If you are not a named recipient, please notify the sender
immediately and do not disclose the contents to another person, use it for any
purpose or store or copy the information in any medium.
_______________________________________________
dev-platform mailing list
[email protected]
https://lists.mozilla.org/listinfo/dev-platform
________________________________
CONFIDENTIALITY : This e-mail and any attachments are confidential and may be
privileged. If you are not a named recipient, please notify the sender
immediately and do not disclose the contents to another person, use it for any
purpose or store or copy the information in any medium.
_______________________________________________
dev-platform mailing list
[email protected]
https://lists.mozilla.org/listinfo/dev-platform