Thanks for the information. Now that your `IOAccelContext2::setContextError()` stacks have narrowed my search for this bug's cause, I'm starting to wonder if it isn't an Apple bug at all, but is caused by the (temporary) exhaustion of some kind of system resource. That would explain why Firefox, at least, needs to be running for a while before you first see the crashes. It'd also explain the "out of memory" error code. I'll dig into this over the next few days. Among other things, I'll need to figure out how Chrome (and presumably Safari) manage not to exhaust this resource. As best I can tell, the "out of memory" failure that causes this bug happens in one or more `prepare()` methods in the `IOAcceleratorFamily2` kernel extension (`IOAccelResource2::prepare()` and/or `IOAccelMemory::prepare()`. But these methods are called *a lot*, and the output of simple probes would be unbearably noisy. I need to figure out how to make dtrace only show output when these methods fail. If I can manage that I'll give you another dtrace probe to run.
Bug 1576767 Comment 132 Edit History
Note: The actual edited comment in the bug view page will always show the original commenter’s name and original timestamp.
Thanks for the information. Now that your `IOAccelContext2::setContextError()` stacks have narrowed my search for this bug's cause, I'm starting to suspect it isn't an Apple bug at all, but is caused by the (temporary) exhaustion of some kind of system resource. That would explain why Firefox, at least, needs to be running for a while before you first see the crashes. It'd also explain the "out of memory" error code. I'll dig into this over the next few days. Among other things, I'll need to figure out how Chrome (and presumably Safari) manage not to exhaust this resource. As best I can tell, the "out of memory" failure that causes this bug happens in one or more `prepare()` methods in the `IOAcceleratorFamily2` kernel extension (`IOAccelResource2::prepare()` and/or `IOAccelMemory::prepare()`. But these methods are called *a lot*, and the output of simple probes would be unbearably noisy. I need to figure out how to make dtrace only show output when these methods fail. If I can manage that I'll give you another dtrace probe to run.