[OOPP] ###!!! ABORT: wasn't awaiting reply: '!msg.is_reply()', file ipc/glue/SyncChannel.cpp, line 126

RESOLVED FIXED

Status

()

Core
IPC
RESOLVED FIXED
8 years ago
8 years ago

People

(Reporter: cjones, Assigned: cjones)

Tracking

Trunk
x86
Windows XP
Points:
---

Firefox Tracking Flags

(Not tracked)

Details

(Whiteboard: [land m-c])

Attachments

(2 attachments, 1 obsolete attachment)

This occurs very sporadically with OOP flash running youtube.

Parent

  ntdll.dll!_NtWaitForMultipleObjects@20()  + 0x15 bytes	
  ntdll.dll!_NtWaitForMultipleObjects@20()  + 0x15 bytes	
  msvcr90d.dll!_nh_malloc_dbg(unsigned int nSize=3524284, int nhFlag=3524400, int nBlockUse=0, const char * szFileName=0xffffffff, int nLine=0)  Line 296 + 0x1d bytes	C++
  kernel32.dll!_WaitForMultipleObjectsExImplementation@20()  + 0x8e bytes	
  user32.dll!_RealMsgWaitForMultipleObjectsEx@20()  + 0xe2 bytes	
  user32.dll!_MsgWaitForMultipleObjects@20()  + 0x1f bytes	
> xul.dll!mozilla::ipc::SyncChannel::WaitForNotify()  Line 515 + 0x13 bytes	C++
  xul.dll!mozilla::ipc::RPCChannel::Call(IPC::Message * msg=0x06a21ef0, IPC::Message * reply=0x0035c9a8)  Line 116	C++
  xul.dll!mozilla::plugins::PPluginInstanceParent::CallPBrowserStreamConstructor(mozilla::plugins::PBrowserStreamParent * actor=0x06ae42a8, const nsCString & url={...}, const unsigned int & length=113689, const unsigned int & lastmodified=1257972217, mozilla::plugins::PStreamNotifyParent * notifyData=0x072d2fd8, const nsCString & headers={...}, const nsCString & mimeType={...}, const bool & seekable=true, short * rv=0x0035ca84, unsigned short * stype=0x0035cb18)  Line 523 + 0x16 bytes	C++
  xul.dll!mozilla::plugins::PluginInstanceParent::NPP_NewStream(char * type=0x06ae4248, _NPStream * stream=0x06d97be4, unsigned char seekable='', unsigned short * stype=0x0035cb18)  Line 606 + 0xa3 bytes	C++
  xul.dll!mozilla::plugins::PluginModuleParent::NPP_NewStream(_NPP * instance=0x06e87a10, char * type=0x06ae4248, _NPStream * stream=0x06d97be4, unsigned char seekable='', unsigned short * stype=0x0035cb18)  Line 224	C++
  xul.dll!nsNPAPIPluginStreamListener::OnStartBinding(nsIPluginStreamInfo * pluginInfo=0x06f672a0)  Line 366 + 0x62 bytes	C++
  xul.dll!nsPluginStreamListenerPeer::SetUpStreamListener(nsIRequest * request=0x06d98d88, nsIURI * aURL=0x06d97cd8)  Line 1633 + 0x29 bytes	C++
  xul.dll!nsPluginStreamListenerPeer::OnStartRequest(nsIRequest * request=0x06d98d88, nsISupports * aContext=0x00000000)  Line 1254 + 0x18 bytes	C++
  xul.dll!nsHttpChannel::CallOnStartRequest()  Line 839 + 0x47 bytes	C++
  xul.dll!nsHttpChannel::ProcessNormal()  Line 1145 + 0x8 bytes	C++
  xul.dll!nsHttpChannel::ProcessResponse()  Line 1014 + 0x8 bytes	C++
  xul.dll!nsHttpChannel::OnStartRequest(nsIRequest * request=0x06d99cd8, nsISupports * ctxt=0x00000000)  Line 5162 + 0xb bytes	C++
  xul.dll!nsInputStreamPump::OnStateStart()  Line 439 + 0x2c bytes	C++
  xul.dll!nsInputStreamPump::OnInputStreamReady(nsIAsyncInputStream * stream=0x06d999a8)  Line 395 + 0xb bytes	C++
  xul.dll!nsInputStreamReadyEvent::Run()  Line 113	C++
  xul.dll!nsThread::ProcessNextEvent(int mayWait=0, int * result=0x0035d118)  Line 527 + 0x19 bytes	C++
  xul.dll!NS_ProcessNextEvent_P(nsIThread * thread=0x00bc4a48, int mayWait=0)  Line 250 + 0x16 bytes	C++
  xul.dll!mozilla::ipc::MessagePump::Run(base::MessagePump::Delegate * aDelegate=0x0069f2a0)  Line 118 + 0xe bytes	C++
  xul.dll!MessageLoop::RunInternal()  Line 212	C++
  xul.dll!MessageLoop::RunHandler()  Line 195	C++
  xul.dll!MessageLoop::Run()  Line 169	C++
  xul.dll!nsBaseAppShell::Run()  Line 180	C++
  xul.dll!nsAppShell::Run()  Line 252	C++
  xul.dll!nsAppStartup::Run()  Line 182 + 0x1c bytes	C++
  xul.dll!XRE_main(int argc=4, char * * argv=0x0069c9f8, const nsXREAppData * aAppData=0x0069cf80)  Line 3476 + 0x25 bytes	C++
  firefox.exe!NS_internal_main(int argc=4, char * * argv=0x0069c9f8)  Line 158 + 0x12 bytes	C++
  firefox.exe!wmain(int argc=4, wchar_t * * argv=0x00699ec0)  Line 120 + 0xd bytes	C++
  firefox.exe!__tmainCRTStartup()  Line 583 + 0x19 bytes	C
  firefox.exe!wmainCRTStartup()  Line 403	C
  kernel32.dll!@BaseThreadInitThunk@12()  + 0x12 bytes	
  ntdll.dll!___RtlUserThreadStart@8()  + 0x27 bytes	
  ntdll.dll!__RtlUserThreadStart@8()  + 0x1b bytes	

Child

  KernelBase.dll!_DebugBreak@0()  + 0x2 bytes	
> xul.dll!RealBreak()  Line 421	C++
  xul.dll!NS_DebugBreak_P(unsigned int aSeverity=3, const char * aStr=0x5dc79a90, const char * aExpr=0x5dc79a80, const char * aFile=0x5dc79a44, int aLine=126)  Line 326	C++
  xul.dll!mozilla::ipc::SyncChannel::OnDispatchMessage(const IPC::Message & msg={...})  Line 126 + 0x27 bytes	C++
  xul.dll!mozilla::ipc::RPCChannel::Call(IPC::Message * msg=0x0400a6f8, IPC::Message * reply=0x02f3cbdc)  Line 137	C++
  xul.dll!mozilla::plugins::PPluginScriptableObjectChild::CallInvoke(const int & aId=7250100, const nsTArray<mozilla::plugins::Variant> & aArgs={...}, mozilla::plugins::Variant * aResult=0x02f3cc68, bool * aSuccess=0x02f3cc7f)  Line 305 + 0x16 bytes	C++
  xul.dll!mozilla::plugins::PluginScriptableObjectChild::ScriptableInvoke(NPObject * aObject=0x0405aa38, void * aName=0x006ea0b4, const _NPVariant * aArgs=0x00000000, unsigned int aArgCount=0, _NPVariant * aResult=0x02f3ccdc)  Line 168	C++
  xul.dll!mozilla::plugins::child::_invoke(_NPP * aNPP=0x03fdffd8, NPObject * aNPObj=0x0405aa38, void * aMethod=0x006ea0b4, const _NPVariant * aArgs=0x00000000, unsigned int aArgCount=0, _NPVariant * aResult=0x02f3ccdc)  Line 1059 + 0x1e bytes	C++
  NPSWF32.dll!unuse_netscape_plugin_Plugin()  + 0x7851 bytes	
  [Frames below may be incorrect and/or missing, no symbols loaded for NPSWF32.dll]	
  NPSWF32.dll!unuse_netscape_plugin_Plugin()  + 0x7939 bytes	
  NPSWF32.dll!DllUnregisterServer()  + 0x15c8 bytes	
  049d0023()	
  xul.dll!mozilla::plugins::BrowserStreamChild::BrowserStreamChild(mozilla::plugins::PluginInstanceChild * instance=0x03fdffb0, const nsCString & url={...}, const unsigned int & length=113689, const unsigned int & lastmodified=1257972217, const mozilla::plugins::PStreamNotifyChild * notifyData=0x0403a810, const nsCString & headers={...}, const nsCString & mimeType={...}, const bool & seekable=true, short * rv=0x02f3d198, unsigned short * stype=0x02f3d1a4)  Line 74 + 0x37 bytes	C++
  xul.dll!mozilla::plugins::PluginInstanceChild::AllocPBrowserStream(const nsCString & url={...}, const unsigned int & length=113689, const unsigned int & lastmodified=1257972217, mozilla::plugins::PStreamNotifyChild * notifyData=0x0403a810, const nsCString & headers={...}, const nsCString & mimeType={...}, const bool & seekable=true, short * rv=0x02f3d198, unsigned short * stype=0x02f3d1a4)  Line 962 + 0x4a bytes	C++
  xul.dll!mozilla::plugins::PPluginInstanceChild::OnCallReceived(const IPC::Message & msg={...}, IPC::Message * & reply=0x00000000)  Line 1076 + 0x52 bytes	C++
  xul.dll!mozilla::plugins::PPluginModuleChild::OnCallReceived(const IPC::Message & msg={...}, IPC::Message * & reply=0x00000000)  Line 375 + 0x15 bytes	C++
  xul.dll!mozilla::ipc::RPCChannel::DispatchIncall(const IPC::Message & call={...})  Line 347 + 0x1b bytes	C++
  xul.dll!mozilla::ipc::RPCChannel::Incall(const IPC::Message & call={...}, unsigned int stackDepth=0)  Line 333	C++
  xul.dll!mozilla::ipc::RPCChannel::OnMaybeDequeueOne()  Line 267 + 0xe bytes	C++
  xul.dll!DispatchToMethod<mozilla::ipc::RPCChannel,void (__thiscall mozilla::ipc::RPCChannel::*)(void)>(mozilla::ipc::RPCChannel * obj=0x0081ee78, void (void)* method=0x5d5c9570, const Tuple0 & arg={...})  Line 384	C++
  xul.dll!RunnableMethod<mozilla::ipc::RPCChannel,void (__thiscall mozilla::ipc::RPCChannel::*)(void),Tuple0>::Run()  Line 307 + 0x1e bytes	C++
  xul.dll!MessageLoop::RunTask(Task * task=0x040411d8)  Line 327	C++
  xul.dll!MessageLoop::DeferOrRunPendingTask(const MessageLoop::PendingTask & pending_task={...})  Line 337	C++
  xul.dll!MessageLoop::DoWork()  Line 434 + 0xc bytes	C++
  xul.dll!mozilla::ipc::DoWorkRunnable::Run()  Line 77	C++
  xul.dll!nsThread::ProcessNextEvent(int mayWait=0, int * result=0x02f3d588)  Line 527 + 0x19 bytes	C++
  xul.dll!NS_ProcessNextEvent_P(nsIThread * thread=0x020857e0, int mayWait=0)  Line 250 + 0x16 bytes	C++
  xul.dll!mozilla::ipc::MessagePump::Run(base::MessagePump::Delegate * aDelegate=0x02f3f698)  Line 118 + 0xe bytes	C++
  xul.dll!mozilla::ipc::MessagePumpForChildProcess::Run(base::MessagePump::Delegate * aDelegate=0x02f3f698)  Line 233	C++
  xul.dll!MessageLoop::RunInternal()  Line 212	C++
  xul.dll!MessageLoop::RunHandler()  Line 188	C++
  xul.dll!MessageLoop::Run()  Line 169	C++
  xul.dll!nsBaseAppShell::Run()  Line 180	C++
  xul.dll!nsAppShell::Run()  Line 252	C++
  xul.dll!XRE_RunAppShell()  Line 459 + 0x19 bytes	C++
  xul.dll!mozilla::ipc::MessagePumpForChildProcess::Run(base::MessagePump::Delegate * aDelegate=0x02f3f698)  Line 218 + 0x5 bytes	C++
  xul.dll!MessageLoop::RunInternal()  Line 212	C++
  xul.dll!MessageLoop::RunHandler()  Line 188	C++
  xul.dll!MessageLoop::Run()  Line 169	C++
  xul.dll!base::Thread::ThreadMain()  Line 168	C++
  xul.dll!`anonymous namespace'::ThreadFunc(void * closure=0x0081edb0)  Line 27	C++
  kernel32.dll!@BaseThreadInitThunk@12()  + 0x12 bytes	
  ntdll.dll!___RtlUserThreadStart@8()  + 0x27 bytes	
  ntdll.dll!__RtlUserThreadStart@8()  + 0x1b bytes
stdout log

[PluginInstanceParent] mozilla::plugins::BrowserStreamParent::WriteReady
[PluginInstanceParent] mozilla::plugins::BrowserStreamParent::Write
[PluginInstanceChild] mozilla::plugins::BrowserStreamChild::AnswerNPP_Write
[PluginInstanceParent] mozilla::plugins::BrowserStreamParent::WriteReady
[PluginInstanceParent] mozilla::plugins::BrowserStreamParent::Write
[PluginInstanceChild] mozilla::plugins::BrowserStreamChild::AnswerNPP_Write
[PluginInstanceParent] mozilla::plugins::BrowserStreamParent::WriteReady
[PluginInstanceParent] mozilla::plugins::BrowserStreamParent::Write
[PluginInstanceChild] mozilla::plugins::BrowserStreamChild::AnswerNPP_Write
[PluginInstanceParent] mozilla::plugins::BrowserStreamParent::WriteReady
[PluginInstanceParent] mozilla::plugins::BrowserStreamParent::Write
[PluginInstanceChild] mozilla::plugins::BrowserStreamChild::AnswerNPP_Write
[PluginModuleParent] mozilla::plugins::PluginInstanceParent::NPP_NewStream
BrowserStreamParent::BrowserStreamParent<06E79678>
[PluginModuleChild] mozilla::plugins::child::_getvalue
[PluginInstanceChild] NPN_GetValue(NPNVWindowNPObject)
[PluginModuleChild] mozilla::plugins::child::_createobject
[PluginModuleChild] mozilla::plugins::child::_retainobject: object 0405AA38, ref
cnt 1
[PluginModuleChild] mozilla::plugins::child::_getstringidentifier
[PluginModuleChild] mozilla::plugins::child::_getproperty
[PluginModuleChild] mozilla::plugins::child::_createobject
[PluginModuleChild] mozilla::plugins::child::_retainobject: object 0405A9F8, ref
cnt 1
[PluginModuleChild] mozilla::plugins::child::_getstringidentifier
[PluginModuleChild] mozilla::plugins::child::_invoke
[PluginModuleChild] mozilla::plugins::child::_releasevariantvalue
[PluginModuleChild] mozilla::plugins::child::_releaseobject: object 0405AA38, re
fcnt 0
[PluginModuleChild] mozilla::plugins::child::_releasevariantvalue
[PluginModuleChild] mozilla::plugins::child::_releaseobject: object 0405A9F8, re
fcnt 0
WARNIN[G:P Prloceussg 50i4 snenMdinog mdessuagel 13e2 tPo ahwnrd 7e250n58 tdur]i
ng  PemekMoesszagei: lfillea c::/Ho:mep/srlc/muozgillia/enlecstro:lys:is/Pwidlge
tu/srgc/wiinndowIs/nnsAspptSheall.ncppc, leineP 28a0
reWnARNtING:: P:roNcesPs 5P04 _senDdiengs metssarge o32 ytoS hwtnd r725e058a dum
ri
g PeekMessage: file c:/Home/src/mozilla/electrolysis/widget/src/windows/nsAppShe
ll.cpp, line 280
[PluginModuleChild] mozilla::plugins::child::_useragent
WARBNIrNGo: wProsceses r504 Ssentdinrg meessaagem 13P2 tao hrwnde 72n505t8 d:uri
:ng ~PeeBkMerssoagew: fsilee c:r/HSomte/rsrce/moazilmla/Pelaecrtreolynsist/wi<dg
e0t/6srcE/wi7ndo9ws/6nsA7ppS8hel>l.c
p, [linPe 2l80
gWARiNINnG: MProocesds 5u04 lsenedinPg maessragee 32n tot hw]nd  725m058o duzrin
ig lPeelkMeass:ag:e:p fille uc:/gHomie/nsrsc/:moz:iPllal/eluectgroliysins/wIidgn
et/ssrtc/waindnowcs/nesApPpSahelrl.cepp,n litne: 28:0
NPP_URLNotify
WARNING: Process 504 sending message 132 to hwnd 725058 during PeekMessage: file
 c:/Home/src/mozilla/electrolysis/widget/src/windows/nsAppShell.cpp, line 280
WARNING: Process 504 sending message 32 to hwnd 725058 during PeekMessage: file
c:/Home/src/mozilla/electrolysis/widget/src/windows/nsAppShell.cpp, line 280
WARNING: Process 504 sending message 132 to hwnd 725058 during PeekMessage: file
 c:/Home/src/mozilla/electrolysis/widget/src/windows/nsAppShell.cpp, line 280
WARNING: Process 504 sending message 32 to hwnd 725058 during PeekMessage: file
c:/Home/src/mozilla/electrolysis/widget/src/windows/nsAppShell.cpp, line 280
WARNING: Process 504 sending message 132 to hwnd 725058 during PeekMessage: file
 [c:P/Hlomue/gsric/nmoMziollda/uellecetrPolaysrise/wnidtge]t/ srcm/wiondzowsi/nl
sAlppaSh:el:l.pcplp,u lginie n28s0
:PWAlRNuINGg: iPrnocIesns s50t4 asenndcineg Pmeassargee 3n2 tto :hw:ndN 7P25P05_
8 dNureingw PSeetkMresesaagem:
ilBe rc:o/Hwomse/esrrc/Smotzirllea/aelmecPtraolyrsies/wnidtget:/s:rcB/wrinodowws
s/nesArppSShtelrl.ecpap,m liPnea 2r80e
nt<06AE42A8>
[PluginModuleChild] mozilla::plugins::child::_getvalue
[PluginInstanceChild] NPN_GetValue(NPNVWindowNPObject)
[PluginModuleChild] mozilla::plugins::child::_createobject
[PluginModuleChild] mozilla::plugins::child::_retainobject: object 0405A9F8, ref
cnt 1
[PluginModuleChild] mozilla::plugins::child::_getstringidentifier
[PluginModuleChild] mozilla::plugins::child::_getproperty
[PluginModuleChild] mozilla::plugins::child::_createobject
[PluginModuleChild] mozilla::plugins::child::_retainobject: object 0405AA38, ref
cnt 1
[PluginModuleChild] mozilla::plugins::child::_getstringidentifier
[PluginModuleChild] mozilla::plugins::child::_invoke
###!!! ABORT: wasn't awaiting reply: '!msg.is_reply()', file c:/Home/src/mozilla
/electrolysis/ipc/glue/SyncChannel.cpp, line 126
What's happening is that the plugin calls GetStringIdentifiers() (a sync message), and somehow wakes up from that call and calls Invoke().  While waiting for the reply to Invoke(), the *Channel code dequeues a reply to GetStringIdentifiers(), and this triggers the assertion failure.  Also at this time, there is a reply to Invoke() in the pending messages queue, which means that receiving this reply is probably what wakes up the Invoke() wait.
Created attachment 422595 [details] [diff] [review]
Test for theoretical bug

This testcase produces the same kind of error as the one this bug covers.  HOWEVER, it is a "theoretical bug" in the sense that it could only happen if the parent were sending async messages back to the child from within sync message handlers.  AFAIK that doesn't happen now.

I still suspect that "something" is unblocking the Windows wait loop, but I don't know what that might be.  The fix for this theoretical bug will protect against phantom wakeups.
Assignee: nobody → jones.chris.g
Created attachment 422602 [details] [diff] [review]
Test for theoretical bug (new files added)
Attachment #422595 - Attachment is obsolete: true
Created attachment 422603 [details] [diff] [review]
Guard against async messages unblocking sync message waits
Attachment #422603 - Flags: review?(bent.mozilla)
Comment on attachment 422603 [details] [diff] [review]
Guard against async messages unblocking sync message waits

r=me with readability fix we discussed in irc.
Attachment #422603 - Flags: review?(bent.mozilla) → review+
Pushed http://hg.mozilla.org/projects/electrolysis/rev/38659e873fd1
Pushed http://hg.mozilla.org/projects/electrolysis/rev/2e3e142612b1
Whiteboard: [land m-c]

Comment 8

8 years ago
http://hg.mozilla.org/mozilla-central/rev/908c2e08e364
http://hg.mozilla.org/mozilla-central/rev/f942158f0945
Status: NEW → RESOLVED
Last Resolved: 8 years ago
Resolution: --- → FIXED
I'm not sure if these changes fixed the in-the-wild bug.  Please reopen yada yada.

Updated

8 years ago
Blocks: 536666
You need to log in before you can comment on or make changes to this bug.