Re: plugin-container crashes, where is XUL DWARF .dSYM?

Benjamin Smedberg <[email protected]> Wed, 12 Feb 2014 12:05:35 -0500
Newsgroups gmane.comp.mozilla.devel.plugins
Message-ID <[email protected]>
On 2/12/2014 7:18 AM, H wrote:
> My plugin seems to be crashing and I don't find any trace in my code trace.  The following seems to be the stack trace generated on Mac OS X.  This happens in a random fashion, I can't get the exact scenario.  Where do I find the DWARF .dSYM files for the XUL library?
We don't publish these for mac. We do have breakpad .sym files which can 
be used with other breakpad tools like minidump-stackwalk to produce a 
stacktrace from a crash minidump, but that doesn't sound like it will 
precisely solve the problem you have here.

The best thing to do here if you want to get good symbols from XUL is 
just build Firefox yourself. It's not super hard.

>
> Or can somebody comment on why this has caused the crash?
>
> Thread 0 Crashed:: Dispatch queue: com.apple.main-thread
> 0   com.apple.CoreFoundation      	0x00007fff88418647 CFRelease + 39
> 1   com.apple.CoreFoundation      	0x00007fff884278c8 __CFBasicHashDrain + 408
> 2   com.apple.CoreFoundation      	0x00007fff884187c8 CFRelease + 424
> 3   com.apple.CoreFoundation      	0x00007fff88470720 CFRunLoopSourceInvalidate + 160
> 4   com.apple.CFNetwork           	0x00007fff92589ad4 MultiplexerSource::unschedule(CoreSchedulingSet const*, MultiplexerClient*) + 152
> 5   com.apple.CFNetwork           	0x00007fff925899ee RunLoopMultiplexer::unschedule(CoreSchedulingSet const*, MultiplexerClient*) + 68
> 6   com.apple.CFNetwork           	0x00007fff9258993d RunloopBlockContext::~RunloopBlockContext() + 69
> 7   com.apple.CFNetwork           	0x00007fff925898cf RunloopBlockContext::~RunloopBlockContext() + 15
> 8   com.apple.CFNetwork           	0x00007fff9256f3a7 RunloopBlockContext::perform() + 319
> 9   com.apple.CFNetwork           	0x00007fff9256f183 MultiplexerSource::perform() + 269
> 10  com.apple.CFNetwork           	0x00007fff9256efb2 MultiplexerSource::_perform(void*) + 72
> 11  com.apple.CoreFoundation      	0x00007fff8847e8f1 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 17
> 12  com.apple.CoreFoundation      	0x00007fff88470062 __CFRunLoopDoSources0 + 242
> 13  com.apple.CoreFoundation      	0x00007fff8846f7ef __CFRunLoopRun + 831
> 14  com.apple.CoreFoundation      	0x00007fff8846f275 CFRunLoopRunSpecific + 309
> 15  com.apple.HIToolbox           	0x00007fff8aa60f0d RunCurrentEventLoopInMode + 226
> 16  com.apple.HIToolbox           	0x00007fff8aa60cb7 ReceiveNextEventCommon + 479
> 17  com.apple.HIToolbox           	0x00007fff8aa60abc _BlockUntilNextEventMatchingListInModeWithFilter + 65
> 18  com.apple.AppKit              	0x00007fff90b5d28e _DPSNextEvent + 1434
> 19  com.apple.AppKit              	0x00007fff90b5c8db -[NSApplication nextEventMatchingMask:untilDate:inMode:dequeue:] + 122
> 20  com.apple.AppKit              	0x00007fff90b509cc -[NSApplication run] + 553
> 21  XUL                           	0x000000010145d03f 0x100007000 + 21323839
> 22  XUL                           	0x000000010145cb26 0x100007000 + 21322534
> 23  XUL                           	0x000000010144f52d 0x100007000 + 21267757
> 24  XUL                           	0x0000000100015dad XRE_InitChildProcess + 1357
> 25  org.mozilla.plugincontainer   	0x0000000100000f1a 0x100000000 + 3866
> 26  org.mozilla.plugincontainer   	0x0000000100000ee4 start + 52

The stack here actually looks pretty accurate. The apple networking 
stack is calling into CoreFoundation which is crashing. The 
plugin-container code is just spinning a normal event loop and probably 
isn't involved in the crash at all.  I do have a couple notes:

* In general plugins should avoid doing their own networking. It is much 
better to use the NPAPI geturl functions to do your networking because 
they honor the user proxy settings, cookies, etc.

* CFRelease crashes are probably just an extra release on the object. I 
don't know exactly what kind of object it is, but you should audit your 
code for mismatched calls to CFRelease/CFRetain in case you have an 
extra release.

--BDS