Closed Bug 1274769 Opened 3 years ago Closed 3 years ago

Intermittent crash test_webglcontextcreationerror.html | application crashed [@ mozilla::WebGLContext::MakeContextCurrent]

Categories

(Core :: Canvas: WebGL, defect)

defect
Not set

Tracking

()

RESOLVED FIXED
mozilla49
Tracking Status
firefox49 --- fixed

People

(Reporter: aryx, Assigned: jerry)

References

Details

(Keywords: crash, intermittent-failure)

Crash Data

Attachments

(1 file, 1 obsolete file)

https://treeherder.mozilla.org/logviewer.html#?job_id=28354838&repo=mozilla-inbound

15:53:51     INFO -  1432 INFO TEST-START | dom/canvas/test/webgl-mochitest/test_webglcontextcreationerror.html
15:53:51     INFO -  WebGL(0x7fd6fc242800)::ForceLoseContext
15:53:51     INFO -  WebGL(0x7fd6fd729800)::ForceLoseContext
15:53:51     INFO -  WebGL(0x7fd6fdad9000)::ForceLoseContext
15:53:51     INFO -  WebGL(0x7fd6fdadc800)::ForceLoseContext
15:53:51     INFO -  JavaScript warning: http://mochi.test:8888/tests/dom/canvas/test/webgl-mochitest/test_webglcontextcreationerror.html, line 36: Error: WebGL: Failed to create WebGL context: WebGL is currently disabled.
15:53:51     INFO -  MEMORY STAT | vsize 1318MB | residentFast 279MB | heapAllocated 132MB
15:53:51     INFO -  1433 INFO TEST-OK | dom/canvas/test/webgl-mochitest/test_webglcontextcreationerror.html | took 174ms
15:53:52     INFO -  ExceptionHandler::GenerateDump cloned child 1848
15:53:52     INFO -  ExceptionHandler::SendContinueSignalToChild sent continue signal to child
15:53:52     INFO -  ExceptionHandler::WaitForContinueSignal waiting for continue signal...
15:53:52     INFO -  TEST-INFO | Main app process: exit 11
15:53:52     INFO -  1434 INFO TEST-START | Shutdown
15:53:52     INFO -  1435 INFO Passed:  939
15:53:52     INFO -  1436 INFO Failed:  0
15:53:52     INFO -  1437 INFO Todo:    13
15:53:52     INFO -  1438 INFO Mode:    non-e10s
15:53:52     INFO -  1439 INFO Slowest: 3302ms - /tests/dom/canvas/test/webgl-mochitest/test_backbuffer_channels.html
15:53:52     INFO -  1440 INFO SimpleTest FINISHED
15:53:52     INFO -  1441 INFO TEST-INFO | Ran 1 Loops
15:53:52     INFO -  1442 INFO SimpleTest FINISHED
15:53:52  WARNING -  TEST-UNEXPECTED-FAIL | dom/canvas/test/webgl-mochitest/test_webglcontextcreationerror.html | application terminated with exit code 11
15:53:52     INFO -  runtests.py | Application ran for: 0:00:26.996266
15:53:52     INFO -  zombiecheck | Reading PID log: /tmp/tmpxHDOWopidlog
15:53:52     INFO -  mozcrash Downloading symbols from: https://queue.taskcluster.net/v1/task/f9-hiwKYTJqlHthnlTTU8g/artifacts/public/build/target.crashreporter-symbols.zip
15:54:02     INFO -  mozcrash Copy/paste: /usr/local/bin/linux64-minidump_stackwalk /tmp/tmptwk5Ss.mozrunner/minidumps/6184c879-0a14-25c5-4c690023-5c7c153d.dmp /tmp/tmpdJhbPR
15:54:13     INFO -  mozcrash Saved minidump as /home/worker/workspace/build/blobber_upload_dir/6184c879-0a14-25c5-4c690023-5c7c153d.dmp
15:54:13     INFO -  mozcrash Saved app info as /home/worker/workspace/build/blobber_upload_dir/6184c879-0a14-25c5-4c690023-5c7c153d.extra
15:54:13  WARNING -  PROCESS-CRASH | dom/canvas/test/webgl-mochitest/test_webglcontextcreationerror.html | application crashed [@ mozilla::WebGLContext::MakeContextCurrent]
Assignee: nobody → hshih
The WebGLTimerQuery object is at:
https://hg.mozilla.org/mozilla-central/annotate/16663eb3dcfa759f25b5e27b101bc79270c156f2/dom/canvas/test/webgl-mochitest/mochitest.ini#l82
and this failed test is at:
https://hg.mozilla.org/mozilla-central/annotate/16663eb3dcfa759f25b5e27b101bc79270c156f2/dom/canvas/test/webgl-mochitest/mochitest.ini#l95

This call stack seems like that gecko try to clean up the WebGLTimerQuery in cc, but the context is gone.

Q:
How can we make sure the WebGLContext is still valid? There are a lot of direct accesses for the WebGLContextBoundObject::mContext, and there is no checking for the WebGLContext status.
https://hg.mozilla.org/mozilla-central/annotate/16663eb3dcfa759f25b5e27b101bc79270c156f2/dom/canvas/WebGLObjectModel.h#l272

Is is safer to use |RefPtr<WebGLContext> mContext| or |WeakPtr<WebGLContext> mContext|(with WeakPtr, we will have a lot of checking) instead?


The crash call stack:
------
0  libxul.so!mozilla::WebGLContext::MakeContextCurrent [GLContext.h:740a2bf1fa9e : 3205 + 0x0]
   rbx = 0x00007fd711451a10   r12 = 0x00007fd705fc3000
   r13 = 0x00007fd739b42000   r14 = 0x00007fd705fc3af8
   r15 = 0x0000000000000074   rip = 0x00007fd740f10816
   rsp = 0x00007ffd985b4650   rbp = 0x00007ffd985b4650
   Found by: given as instruction pointer in context
1  libxul.so!mozilla::WebGLTimerQuery::Delete [WebGLTimerQuery.cpp:740a2bf1fa9e : 48 + 0x8]
   rbx = 0x00007fd711451a10   r12 = 0x00007fd705fc3000
   r13 = 0x00007fd739b42000   r14 = 0x00007fd705fc3af8
   r15 = 0x0000000000000074   rip = 0x00007fd740f45ac2
   rsp = 0x00007ffd985b4660   rbp = 0x00007ffd985b4670
   Found by: call frame info
2  libxul.so!mozilla::WebGLTimerQuery::cycleCollection::DeleteCycleCollectable [WebGLObjectModel.h:740a2bf1fa9e : 142 + 0x7]
   rbx = 0x00007fd711451a10   r12 = 0x00007fd705fc3000
   r13 = 0x00007fd739b42000   r14 = 0x00007fd705fc3af8
   r15 = 0x0000000000000074   rip = 0x00007fd740f45b04
   rsp = 0x00007ffd985b4680   rbp = 0x00007ffd985b4690
   Found by: call frame info
3  libxul.so!nsCycleCollector::FreeSnowWhite [nsCycleCollector.cpp:740a2bf1fa9e : 2687 + 0x2]
   rbx = 0x00007ffd985b46e8   r12 = 0x00007fd705fc3000
   r13 = 0x00007fd739b42000   r14 = 0x00007fd705fc3af8
   r15 = 0x0000000000000074   rip = 0x00007fd741f003c1
   rsp = 0x00007ffd985b46a0   rbp = 0x00007ffd985b4750
   Found by: call frame info
4  libxul.so!AsyncFreeSnowWhite::Run [XPCJSRuntime.cpp:740a2bf1fa9e : 155 + 0x4]
   rbx = 0x00007fd734505e80   r12 = 0x000006832c04998e
   r13 = 0x0000000000000000   r14 = 0x00007fd74b44ab70
   r15 = 0x00007fd7344af468   rip = 0x00007fd741fb7d02
   rsp = 0x00007ffd985b4760   rbp = 0x00007ffd985b4780
   Found by: call frame info
5  libxul.so!nsThread::ProcessNextEvent [nsThread.cpp:740a2bf1fa9e : 1073 + 0x1]
   rbx = 0x00007fd74b44ab88   r12 = 0x00007ffd985b4830
   r13 = 0x0000000000000000   r14 = 0x00007fd74b44ab70
   r15 = 0x00007fd7344af468   rip = 0x00007fd741f1d7a2
   rsp = 0x00007ffd985b4790   rbp = 0x00007ffd985b4810
   Found by: call frame info
6  libxul.so!NS_ProcessNextEvent [nsThreadUtils.cpp:740a2bf1fa9e : 290 + 0xd]
   rbx = 0x00007fd74b44ab70   r12 = 0x00007fd704bf1360
   r13 = 0x0000000000000000   r14 = 0x00007fd743130ee0
   r15 = 0x00007ffd985b48a0   rip = 0x00007fd741f307cc
   rsp = 0x00007ffd985b4820   rbp = 0x00007ffd985b4850
   Found by: call frame info
7  libxul.so!mozilla::dom::quota::QuotaManager::ShutdownObserver::Observe [ActorsParent.cpp:740a2bf1fa9e : 2340 + 0xc]
   rbx = 0x00007fd74b44ab70   r12 = 0x00007fd704bf1360
   r13 = 0x0000000000000000   r14 = 0x00007fd743130ee0
   r15 = 0x00007ffd985b48a0   rip = 0x00007fd742a17988
   rsp = 0x00007ffd985b4860   rbp = 0x00007ffd985b4880
   Found by: call frame info
8  libxul.so!nsObserverService::NotifyObservers [nsObserverList.cpp:740a2bf1fa9e : 112 + 0xb]
   rbx = 0x00007fd742ced524   r12 = 0x00007fd739b795d0
   r13 = 0x0000000000000000   r14 = 0x00007fd743130ee0
   r15 = 0x00007ffd985b48a0   rip = 0x00007fd741f07a57
   rsp = 0x00007ffd985b4890   rbp = 0x00007ffd985b48e0
   Found by: call frame info
9  libxul.so!nsXREDirProvider::DoShutdown [nsXREDirProvider.cpp:740a2bf1fa9e : 1001 + 0x18]
   rbx = 0x00007fd739b795b0   r12 = 0x00007ffd985b4a30
   r13 = 0x0000000000000000   r14 = 0x0000000000000000
   r15 = 0x00007ffd985b4980   rip = 0x00007fd74189de63
   rsp = 0x00007ffd985b48f0   rbp = 0x00007ffd985b4920
   Found by: call frame info
15:54:13     INFO -  10  libxul.so!ScopedXPCOMStartup::~ScopedXPCOMStartup [nsAppRunner.cpp:740a2bf1fa9e : 1467 + 0xb]
   rbx = 0x00007fd73c7462f8   r12 = 0x00007fd743f279d0
   r13 = 0x0000000000000000   r14 = 0x0000000000000000
   r15 = 0x00007ffd985b4980   rip = 0x00007fd741894b9b
   rsp = 0x00007ffd985b4930   rbp = 0x00007ffd985b4950
   Found by: call frame info
15:54:13     INFO -  11  libxul.so!mozilla::DefaultDelete<ScopedXPCOMStartup>::operator() [UniquePtr.h:740a2bf1fa9e : 528 + 0x6]
   rbx = 0x00007fd73c7462f8   r12 = 0x00007fd743f279d0
   r13 = 0x0000000000000000   r14 = 0x0000000000000000
   r15 = 0x00007ffd985b4980   rip = 0x00007fd741894be7
   rsp = 0x00007ffd985b4960   rbp = 0x00007ffd985b4970
   Found by: call frame info
15:54:13     INFO -  12  libxul.so!XREMain::XRE_main [UniquePtr.h:740a2bf1fa9e : 343 + 0x4]
   rbx = 0x00007ffd985b49f0   r12 = 0x00007fd743f279d0
   r13 = 0x0000000000000000   r14 = 0x0000000000000000
   r15 = 0x00007ffd985b4980   rip = 0x00007fd74189942e
   rsp = 0x00007ffd985b4980   rbp = 0x00007ffd985b49e0
   Found by: call frame info
Status: NEW → ASSIGNED
Flags: needinfo?(jmuizelaar)
Flags: needinfo?(jgilbert)
Flags: needinfo?(dglastonbury)
I will do the similar things as WebGLcontext does for WebGLQuery.
https://dxr.mozilla.org/mozilla-central/source/dom/canvas/WebGLContext.h#1398
Flags: needinfo?(jmuizelaar)
Flags: needinfo?(jgilbert)
Flags: needinfo?(dglastonbury)
Call DeleteOnce() for that WebGLTimerQuery object inside WebGLExtensionDisjointTimerQuery. It could prevent the Delete() call after the GLContext gone.
Attachment #8755390 - Flags: review?(jmuizelaar)
Duplicate of this bug: 1273083
Attachment #8755390 - Flags: review?(jmuizelaar) → review?(jgilbert)
Comment on attachment 8755390 [details] [diff] [review]
handle the WebGLTimerQuery deletion status for GLContext cleanup. v1

Review of attachment 8755390 [details] [diff] [review]:
-----------------------------------------------------------------

::: dom/canvas/WebGLExtensionBase.cpp
@@ +21,5 @@
>  WebGLExtensionBase::MarkLost()
>  {
>      mIsLost = true;
> +
> +    DeleteOnce();

Neuter() or OnMarkLost().

::: dom/canvas/WebGLExtensionDisjointTimerQuery.cpp
@@ +252,5 @@
> +void
> +WebGLExtensionDisjointTimerQuery::DeleteOnce()
> +{
> +  if (mActiveQuery) {
> +    mActiveQuery->DeleteOnce();

mActiveQuery = nullptr;
Attachment #8755390 - Flags: review?(jgilbert) → review-
Attachment #8755390 - Attachment is obsolete: true
Attachment #8756157 - Flags: review?(jgilbert) → review+
https://hg.mozilla.org/mozilla-central/rev/c945909fea77
Status: ASSIGNED → RESOLVED
Closed: 3 years ago
Resolution: --- → FIXED
Target Milestone: --- → mozilla49
You need to log in before you can comment on or make changes to this bug.