Can you attach the Instruments trace leading up to the crash, and/or a reduced 
copy of the app that can reproduce the crash, to bugzilla?

Thanks,
Geoff

> On Dec 11, 2014, at 7:34 PM, Ian Ragsdale <ian.ragsd...@gmail.com> wrote:
> 
> Actually, looking again, I was running the profile on the device, not the 
> simulator as I had meant to.
> 
> One other thing I meant to mention is that I keep three instances of the 
> UIWebView loaded, and I trigger it by paging between them quickly, so perhaps 
> it's an issue with multiple instances? There is always one on screen, and 
> paging from one to the next allocates a new one while an old one is 
> discarded. They all appear to share the same WebThread & JavaScript threads, 
> so I could see that being problematic.
> 
> - Ian
> 
> On Dec 11, 2014, at 9:25 PM, Ian Ragsdale <ian.ragsd...@gmail.com> wrote:
>> 
>> Hi Geoff, thanks for the quick response!
>> 
>> I don't believe I'm making any use of SPI, aside from whatever underlying 
>> use there is in UIWebView - I'm pretty sure that's not exposed to normal iOS 
>> apps (at least not that I'm aware of).
>> 
>> As predicted, setting JSC_slowPathAllocsBetweenGCs does appear to make it 
>> easier to trigger the crash. I did that and then did an Instruments sample 
>> using the iOS simulator, and got the crash to happen pretty quickly. 
>> However, I'm not really sure what to look for, since I'm a newbie to WebKit 
>> internals. Any suggestions for what to look for in the call tree?
>> 
>> Thanks again,
>> Ian
>> 
>>> On Dec 11, 2014, at 8:11 PM, Geoffrey Garen <gga...@apple.com> wrote:
>>> 
>>> Hi Ian.
>>> 
>>>> From looking at the source, it tries to drop all locks from the current 
>>>> javascript VM before calling the delegate, and when it does that it 
>>>> asserts if the VM is busy garbage collecting.
>>> 
>>> That’s right.
>>> 
>>>> I'm guessing there needs to be some sort of guard there to make sure the 
>>>> VM isn't doing GC before dropping the locks?
>>> 
>>> In JavaScriptCore, garbage collection is an atomic operation that must run 
>>> to completion before the next allocation.
>>> 
>>> The reason this is an assertion — and can’t be a guard — is that, if we 
>>> called out to a delegate in the middle of garbage collection, we would 
>>> definitely corrupt the heap. So, there’s nothing you can guard against: the 
>>> game is already lost.
>>> 
>>> The bug here happened earlier: Somehow, the collector was left thinking 
>>> that it was in the busy state, even though — as we can see from the 
>>> backtrace — it wasn’t actually doing anything.
>>> 
>>>> I'm pretty positive I'm not calling into the UIWebView from any thread 
>>>> other than the main thread, and I don't think I have any control over the 
>>>> WebThread or the GC threads, so I'm not sure if there's anything I can do, 
>>>> but I do have a fairly reliable repro, so if there's something it makes 
>>>> sense for me to test, I can do so.
>>> 
>>> Does you app make any use of WebKit SPI? If it does, the SPI might not be 
>>> thread-safe even if called from the main thread, and so you might be 
>>> corrupting the heap.
>>> 
>>> One technique that might make this bug more reproducible is to set the 
>>> environment variable JSC_slowPathAllocsBetweenGCs to a low number (as low 
>>> as possible without making your app unusable) — that will trigger 
>>> collection more frequently.
>>> 
>>> Another thing you can try is to record an Instruments time profile of the 
>>> app as you go through the steps to make the app crash. That will give us an 
>>> overview of what the app was doing leading up to the crash, whether it used 
>>> UIWebView from a secondary thread or invoked SPI, and so on.
>>> 
>>> Geoff
>> 
> 

_______________________________________________
webkit-dev mailing list
webkit-dev@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-dev

Reply via email to