test_bug846906.xul causes leaks for Linux ASAN with runByDir enabled

RESOLVED FIXED in Firefox 44

Status

()

defect
RESOLVED FIXED
4 years ago
4 years ago

People

(Reporter: kaustabh93, Assigned: froydnj)

Tracking

(Blocks 1 bug)

43 Branch
mozilla44
Points:
---
Dependency tree / graph

Firefox Tracking Flags

(firefox44 fixed)

Details

Attachments

(2 attachments)

Here's a link to try : https://treeherder.mozilla.org/#/jobs?repo=try&revision=6b682b40d35c

09:18:19     INFO -  1251 INFO TEST-START | docshell/test/chrome/test_bug846906.xul
09:18:20     INFO -  MEMORY STAT vsizeMaxContiguous not supported in this build configuration.
09:18:20     INFO -  MEMORY STAT heapAllocated not supported in this build configuration.
09:18:20     INFO -  MEMORY STAT | vsize 20972764MB | residentFast 460MB
09:18:20     INFO -  1252 INFO TEST-OK | docshell/test/chrome/test_bug846906.xul | took 1356ms
09:18:20     INFO -  ###!!! [Parent][OnMaybeDequeueOne] Error: Channel closing: too late to send/recv, messages will be lost
09:18:21     INFO -  ###!!! [Parent][OnMaybeDequeueOne] Error: Channel closing: too late to send/recv, messages will be lost
09:18:21     INFO -  ###!!! [Parent][OnMaybeDequeueOne] Error: Channel closing: too late to send/recv, messages will be lost
09:18:21     INFO -  ###!!! [Parent][OnMaybeDequeueOne] Error: Channel closing: too late to send/recv, messages will be lost
09:18:21     INFO -  ###!!! [Parent][OnMaybeDequeueOne] Error: Channel closing: too late to send/recv, messages will be lost
09:18:24     INFO -  =================================================================
09:18:24     INFO -  ==3039==ERROR: LeakSanitizer: detected memory leaks
09:18:24     INFO -  Direct leak of 32 byte(s) in 1 object(s) allocated from:
09:18:24     INFO -      #0 0x472231 in malloc /builds/slave/moz-toolchain/src/llvm/projects/compiler-rt/lib/asan/asan_malloc_linux.cc:74
09:18:24     INFO -      #1 0x48b79d in moz_xmalloc /builds/slave/try-l64-asan-00000000000000000/build/src/memory/mozalloc/mozalloc.cpp:83
09:18:24     INFO -      #2 0x7f9d9b5b1348 in operator new /builds/slave/try-l64-asan-00000000000000000/build/src/obj-firefox/view/../dist/include/mozilla/mozalloc.h:186
09:18:24     INFO -      #3 0x7f9d9b5b1348 in nsView::DestroyWidget() /builds/slave/try-l64-asan-00000000000000000/build/src/view/nsView.cpp:136
09:18:24     INFO -      #4 0x7f9d9b5b0e01 in nsView::~nsView() /builds/slave/try-l64-asan-00000000000000000/build/src/view/nsView.cpp:99
09:18:24     INFO -      #5 0x7f9d9b5b108d in nsView::Destroy() /builds/slave/try-l64-asan-00000000000000000/build/src/view/nsView.cpp:163
09:18:24     INFO -  Indirect leak of 560 byte(s) in 1 object(s) allocated from:
09:18:24     INFO -      #0 0x472231 in malloc /builds/slave/moz-toolchain/src/llvm/projects/compiler-rt/lib/asan/asan_malloc_linux.cc:74
09:18:24     INFO -      #1 0x48b79d in moz_xmalloc /builds/slave/try-l64-asan-00000000000000000/build/src/memory/mozalloc/mozalloc.cpp:83
09:18:24     INFO -      #2 0x7f9d9b5f9f44 in operator new /builds/slave/try-l64-asan-00000000000000000/build/src/obj-firefox/widget/../dist/include/mozilla/mozalloc.h:186
09:18:24     INFO -      #3 0x7f9d9b5f9f44 in CreatePuppetWidget /builds/slave/try-l64-asan-00000000000000000/build/src/widget/PuppetWidget.cpp:46
09:18:24     INFO -      #4 0x7f9d9b5f9f44 in mozilla::widget::PuppetWidget::CreateChild(mozilla::gfx::IntRectTyped<mozilla::gfx::UnknownUnits> const&, nsWidgetInitData*, bool) /builds/slave/try-l64-asan-00000000000000000/build/src/widget/PuppetWidget.cpp:153
09:18:24     INFO -      #5 0x7f9d9b5b42aa in nsView::CreateWidgetForParent(nsIWidget*, nsWidgetInitData*, bool, bool) /builds/slave/try-l64-asan-00000000000000000/build/src/view/nsView.cpp:609
09:18:24     INFO -      #6 0x7f9d9be4e5d7 in nsDocumentViewer::MakeWindow(nsSize const&, nsView*) /builds/slave/try-l64-asan-00000000000000000/build/src/layout/base/nsDocumentViewer.cpp:2427
09:18:24     INFO -  Indirect leak of 384 byte(s) in 1 object(s) allocated from:
09:18:24     INFO -      #0 0x472231 in malloc /builds/slave/moz-toolchain/src/llvm/projects/compiler-rt/lib/asan/asan_malloc_linux.cc:74
09:18:24     INFO -      #1 0x48b79d in moz_xmalloc /builds/slave/try-l64-asan-00000000000000000/build/src/memory/mozalloc/mozalloc.cpp:83
09:18:24     INFO -      #2 0x7f9d9b5fe6d6 in operator new /builds/slave/try-l64-asan-00000000000000000/build/src/obj-firefox/widget/../dist/include/mozilla/mozalloc.h:186
09:18:24     INFO -      #3 0x7f9d9b5fe6d6 in mozilla::widget::PuppetWidget::GetLayerManager(mozilla::layers::PLayerTransactionChild*, mozilla::layers::LayersBackend, nsIWidget::LayerManagerPersistence, bool*) /builds/slave/try-l64-asan-00000000000000000/build/src/widget/PuppetWidget.cpp:557
09:18:24     INFO -      #4 0x7f9d9b5f98eb in mozilla::widget::PuppetWidget::Create(nsIWidget*, void*, mozilla::gfx::IntRectTyped<mozilla::gfx::UnknownUnits> const&, nsWidgetInitData*) /builds/slave/try-l64-asan-00000000000000000/build/src/widget/PuppetWidget.cpp:121
09:18:24     INFO -      #5 0x7f9d9b5f9fd9 in mozilla::widget::PuppetWidget::CreateChild(mozilla::gfx::IntRectTyped<mozilla::gfx::UnknownUnits> const&, nsWidgetInitData*, bool) /builds/slave/try-l64-asan-00000000000000000/build/src/widget/PuppetWidget.cpp:155
09:18:24     INFO -  Indirect leak of 184 byte(s) in 1 object(s) allocated from:
09:18:24     INFO -      #0 0x472231 in malloc /builds/slave/moz-toolchain/src/llvm/projects/compiler-rt/lib/asan/asan_malloc_linux.cc:74
09:18:24     INFO -      #1 0x48b79d in moz_xmalloc /builds/slave/try-l64-asan-00000000000000000/build/src/memory/mozalloc/mozalloc.cpp:83
09:18:24     INFO -      #2 0x7f9d97a392cf in LayerManager /builds/slave/try-l64-asan-00000000000000000/build/src/obj-firefox/gfx/layers/../../dist/include/mozilla/mozalloc.h:186
09:18:24     INFO -      #3 0x7f9d97a392cf in mozilla::layers::ClientLayerManager::ClientLayerManager(nsIWidget*) /builds/slave/try-l64-asan-00000000000000000/build/src/gfx/layers/client/ClientLayerManager.cpp:105
09:18:24     INFO -      #4 0x7f9d9b5fe6e4 in mozilla::widget::PuppetWidget::GetLayerManager(mozilla::layers::PLayerTransactionChild*, mozilla::layers::LayersBackend, nsIWidget::LayerManagerPersistence, bool*) /builds/slave/try-l64-asan-00000000000000000/build/src/widget/PuppetWidget.cpp:557
09:18:24     INFO -      #5 0x7f9d9b5f98eb in mozilla::widget::PuppetWidget::Create(nsIWidget*, void*, mozilla::gfx::IntRectTyped<mozilla::gfx::UnknownUnits> const&, nsWidgetInitData*) /builds/slave/try-l64-asan-00000000000000000/build/src/widget/PuppetWidget.cpp:121
09:18:24     INFO -  Indirect leak of 128 byte(s) in 1 object(s) allocated from:
09:18:24     INFO -      #0 0x472231 in malloc /builds/slave/moz-toolchain/src/llvm/projects/compiler-rt/lib/asan/asan_malloc_linux.cc:74
09:18:24     INFO -      #1 0x48b79d in moz_xmalloc /builds/slave/try-l64-asan-00000000000000000/build/src/memory/mozalloc/mozalloc.cpp:83
09:18:24     INFO -      #2 0x7f9d97b4bbd2 in operator new /builds/slave/try-l64-asan-00000000000000000/build/src/obj-firefox/gfx/layers/../../dist/include/mozilla/mozalloc.h:186
09:18:24     INFO -      #3 0x7f9d97b4bbd2 in mozilla::layers::ShadowLayerForwarder::ShadowLayerForwarder() /builds/slave/try-l64-asan-00000000000000000/build/src/gfx/layers/ipc/ShadowLayers.cpp:172
09:18:24     INFO -      #4 0x7f9d97a392da in mozilla::layers::ClientLayerManager::ClientLayerManager(nsIWidget*) /builds/slave/try-l64-asan-00000000000000000/build/src/gfx/layers/client/ClientLayerManager.cpp:105
09:18:24     INFO -      #5 0x7f9d9b5fe6e4 in mozilla::widget::PuppetWidget::GetLayerManager(mozilla::layers::PLayerTransactionChild*, mozilla::layers::LayersBackend, nsIWidget::LayerManagerPersistence, bool*) /builds/slave/try-l64-asan-00000000000000000/build/src/widget/PuppetWidget.cpp:557
09:18:24     INFO -  Indirect leak of 32 byte(s) in 1 object(s) allocated from:
09:18:24     INFO -      #0 0x472231 in malloc /builds/slave/moz-toolchain/src/llvm/projects/compiler-rt/lib/asan/asan_malloc_linux.cc:74
09:18:24     INFO -      #1 0x48b79d in moz_xmalloc /builds/slave/try-l64-asan-00000000000000000/build/src/memory/mozalloc/mozalloc.cpp:83
09:18:24     INFO -      #2 0x7f9d97a39435 in operator new /builds/slave/try-l64-asan-00000000000000000/build/src/obj-firefox/gfx/layers/../../dist/include/mozilla/mozalloc.h:186
09:18:24     INFO -      #3 0x7f9d97a39435 in mozilla::layers::ClientLayerManager::ClientLayerManager(nsIWidget*) /builds/slave/try-l64-asan-00000000000000000/build/src/gfx/layers/client/ClientLayerManager.cpp:107
09:18:24     INFO -      #4 0x7f9d9b5fe6e4 in mozilla::widget::PuppetWidget::GetLayerManager(mozilla::layers::PLayerTransactionChild*, mozilla::layers::LayersBackend, nsIWidget::LayerManagerPersistence, bool*) /builds/slave/try-l64-asan-00000000000000000/build/src/widget/PuppetWidget.cpp:557
09:18:24     INFO -      #5 0x7f9d9b5f98eb in mozilla::widget::PuppetWidget::Create(nsIWidget*, void*, mozilla::gfx::IntRectTyped<mozilla::gfx::UnknownUnits> const&, nsWidgetInitData*) /builds/slave/try-l64-asan-00000000000000000/build/src/widget/PuppetWidget.cpp:121
09:18:24     INFO -  Indirect leak of 32 byte(s) in 1 object(s) allocated from:
09:18:24     INFO -      #0 0x472231 in malloc /builds/slave/moz-toolchain/src/llvm/projects/compiler-rt/lib/asan/asan_malloc_linux.cc:74
09:18:24     INFO -      #1 0x48b79d in moz_xmalloc /builds/slave/try-l64-asan-00000000000000000/build/src/memory/mozalloc/mozalloc.cpp:83
09:18:24     INFO -      #2 0x7f9d9b5f9a4b in operator new /builds/slave/try-l64-asan-00000000000000000/build/src/obj-firefox/widget/../dist/include/mozilla/mozalloc.h:186
09:18:24     INFO -      #3 0x7f9d9b5f9a4b in mozilla::widget::PuppetWidget::Create(nsIWidget*, void*, mozilla::gfx::IntRectTyped<mozilla::gfx::UnknownUnits> const&, nsWidgetInitData*) /builds/slave/try-l64-asan-00000000000000000/build/src/widget/PuppetWidget.cpp:128
09:18:24     INFO -      #4 0x7f9d9b5f9fd9 in mozilla::widget::PuppetWidget::CreateChild(mozilla::gfx::IntRectTyped<mozilla::gfx::UnknownUnits> const&, nsWidgetInitData*, bool) /builds/slave/try-l64-asan-00000000000000000/build/src/widget/PuppetWidget.cpp:155
09:18:24     INFO -      #5 0x7f9d9b5b42aa in nsView::CreateWidgetForParent(nsIWidget*, nsWidgetInitData*, bool, bool) /builds/slave/try-l64-asan-00000000000000000/build/src/view/nsView.cpp:609
09:18:24     INFO -  Indirect leak of 12 byte(s) in 1 object(s) allocated from:
09:18:24     INFO -      #0 0x472231 in malloc /builds/slave/moz-toolchain/src/llvm/projects/compiler-rt/lib/asan/asan_malloc_linux.cc:74
09:18:24     INFO -      #1 0x48b79d in moz_xmalloc /builds/slave/try-l64-asan-00000000000000000/build/src/memory/mozalloc/mozalloc.cpp:83
09:18:24     INFO -      #2 0x7f9d95bdee23 in Malloc /builds/slave/try-l64-asan-00000000000000000/build/src/obj-firefox/startupcache/../dist/include/nsTArray.h:184
09:18:24     INFO -      #3 0x7f9d95bdee23 in nsTArrayInfallibleAllocator::ResultTypeProxy nsTArray_base<nsTArrayInfallibleAllocator, nsTArray_CopyWithMemutils>::EnsureCapacity<nsTArrayInfallibleAllocator>(unsigned long, unsigned long) /builds/slave/try-l64-asan-00000000000000000/build/src/obj-firefox/startupcache/../dist/include/nsTArray-inl.h:136
09:18:24     INFO -      #4 0x7f9d9b5f7515 in SetCapacity<nsTArrayInfallibleAllocator> /builds/slave/try-l64-asan-00000000000000000/build/src/obj-firefox/widget/../dist/include/nsTArray.h:1726
09:18:24     INFO -      #5 0x7f9d9b5f7515 in mozilla::widget::PuppetWidget::PuppetWidget(mozilla::dom::TabChild*) /builds/slave/try-l64-asan-00000000000000000/build/src/widget/PuppetWidget.cpp:87
09:18:24     INFO -      #6 0x7f9d9b5f9f52 in CreatePuppetWidget /builds/slave/try-l64-asan-00000000000000000/build/src/widget/PuppetWidget.cpp:46
09:18:24     INFO -      #7 0x7f9d9b5f9f52 in mozilla::widget::PuppetWidget::CreateChild(mozilla::gfx::IntRectTyped<mozilla::gfx::UnknownUnits> const&, nsWidgetInitData*, bool) /builds/slave/try-l64-asan-00000000000000000/build/src/widget/PuppetWidget.cpp:153
09:18:24     INFO -  Indirect leak of 12 byte(s) in 1 object(s) allocated from:
09:18:24     INFO -      #0 0x472231 in malloc /builds/slave/moz-toolchain/src/llvm/projects/compiler-rt/lib/asan/asan_malloc_linux.cc:74
09:18:24     INFO -      #1 0x48b79d in moz_xmalloc /builds/slave/try-l64-asan-00000000000000000/build/src/memory/mozalloc/mozalloc.cpp:83
09:18:24     INFO -      #2 0x7f9d95bdee23 in Malloc /builds/slave/try-l64-asan-00000000000000000/build/src/obj-firefox/startupcache/../dist/include/nsTArray.h:184
09:18:24     INFO -      #3 0x7f9d95bdee23 in nsTArrayInfallibleAllocator::ResultTypeProxy nsTArray_base<nsTArrayInfallibleAllocator, nsTArray_CopyWithMemutils>::EnsureCapacity<nsTArrayInfallibleAllocator>(unsigned long, unsigned long) /builds/slave/try-l64-asan-00000000000000000/build/src/obj-firefox/startupcache/../dist/include/nsTArray-inl.h:136
09:18:24     INFO -      #4 0x7f9d9b5f7527 in SetCapacity<nsTArrayInfallibleAllocator> /builds/slave/try-l64-asan-00000000000000000/build/src/obj-firefox/widget/../dist/include/nsTArray.h:1726
09:18:24     INFO -      #5 0x7f9d9b5f7527 in mozilla::widget::PuppetWidget::PuppetWidget(mozilla::dom::TabChild*) /builds/slave/try-l64-asan-00000000000000000/build/src/widget/PuppetWidget.cpp:88
09:18:24     INFO -      #6 0x7f9d9b5f9f52 in CreatePuppetWidget /builds/slave/try-l64-asan-00000000000000000/build/src/widget/PuppetWidget.cpp:46
09:18:24     INFO -      #7 0x7f9d9b5f9f52 in mozilla::widget::PuppetWidget::CreateChild(mozilla::gfx::IntRectTyped<mozilla::gfx::UnknownUnits> const&, nsWidgetInitData*, bool) /builds/slave/try-l64-asan-00000000000000000/build/src/widget/PuppetWidget.cpp:153
09:18:24     INFO -  Indirect leak of 12 byte(s) in 1 object(s) allocated from:
09:18:24     INFO -      #0 0x472231 in malloc /builds/slave/moz-toolchain/src/llvm/projects/compiler-rt/lib/asan/asan_malloc_linux.cc:74
09:18:24     INFO -      #1 0x48b79d in moz_xmalloc /builds/slave/try-l64-asan-00000000000000000/build/src/memory/mozalloc/mozalloc.cpp:83
09:18:24     INFO -      #2 0x7f9d95bdee23 in Malloc /builds/slave/try-l64-asan-00000000000000000/build/src/obj-firefox/startupcache/../dist/include/nsTArray.h:184
09:18:24     INFO -      #3 0x7f9d95bdee23 in nsTArrayInfallibleAllocator::ResultTypeProxy nsTArray_base<nsTArrayInfallibleAllocator, nsTArray_CopyWithMemutils>::EnsureCapacity<nsTArrayInfallibleAllocator>(unsigned long, unsigned long) /builds/slave/try-l64-asan-00000000000000000/build/src/obj-firefox/startupcache/../dist/include/nsTArray-inl.h:136
09:18:24     INFO -      #4 0x7f9d9b5f9f52 in CreatePuppetWidget /builds/slave/try-l64-asan-00000000000000000/build/src/widget/PuppetWidget.cpp:46
09:18:24     INFO -      #5 0x7f9d9b5f9f52 in mozilla::widget::PuppetWidget::CreateChild(mozilla::gfx::IntRectTyped<mozilla::gfx::UnknownUnits> const&, nsWidgetInitData*, bool) /builds/slave/try-l64-asan-00000000000000000/build/src/widget/PuppetWidget.cpp:153
09:18:24     INFO -      #6 0x7f9d9b5b42aa in nsView::CreateWidgetForParent(nsIWidget*, nsWidgetInitData*, bool, bool) /builds/slave/try-l64-asan-00000000000000000/build/src/view/nsView.cpp:609
09:18:24     INFO -  -----------------------------------------------------
09:18:24     INFO -  Suppressions used:
09:18:24     INFO -    count      bytes template
09:18:24     INFO -       40        986 libc.so
09:18:24     INFO -      826      26400 nsComponentManagerImpl
09:18:24     INFO -       50       6800 mozJSComponentLoader::LoadModule
09:18:24     INFO -        1        384 pixman_implementation_lookup_composite
09:18:24     INFO -      360      15936 libfontconfig.so
09:18:24     INFO -        1         32 libdl.so
09:18:24     INFO -       30       6524 libglib-2.0.so
09:18:24     INFO -        2         56 libresolv.so
09:18:24     INFO -  -----------------------------------------------------
09:18:24     INFO -  SUMMARY: AddressSanitizer: 1388 byte(s) leaked in 10 allocation(s).
09:18:25     INFO -  TEST-INFO | Main app process: exit 0
09:18:25  WARNING -  TEST-UNEXPECTED-FAIL | LeakSanitizer | leak at Malloc, nsTArray_base, CreatePuppetWidget, mozilla::widget::PuppetWidget::CreateChild
09:18:25  WARNING -  TEST-UNEXPECTED-FAIL | LeakSanitizer | leak at nsView::DestroyWidget, nsView::~nsView, nsView::Destroy
09:18:25  WARNING -  TEST-UNEXPECTED-FAIL | LeakSanitizer | leak at mozilla::layers::ClientLayerManager::ClientLayerManager, mozilla::widget::PuppetWidget::GetLayerManager, mozilla::widget::PuppetWidget::Create
09:18:25  WARNING -  TEST-UNEXPECTED-FAIL | LeakSanitizer | leak at mozilla::widget::PuppetWidget::GetLayerManager, mozilla::widget::PuppetWidget::Create, mozilla::widget::PuppetWidget::CreateChild
09:18:25  WARNING -  TEST-UNEXPECTED-FAIL | LeakSanitizer | leak at CreatePuppetWidget, mozilla::widget::PuppetWidget::CreateChild, nsView::CreateWidgetForParent, nsDocumentViewer::MakeWindow
09:18:25  WARNING -  TEST-UNEXPECTED-FAIL | LeakSanitizer | leak at mozilla::layers::ShadowLayerForwarder::ShadowLayerForwarder, mozilla::layers::ClientLayerManager::ClientLayerManager, mozilla::widget::PuppetWidget::GetLayerManager
09:18:25  WARNING -  TEST-UNEXPECTED-FAIL | LeakSanitizer | leak at mozilla::widget::PuppetWidget::Create, mozilla::widget::PuppetWidget::CreateChild, nsView::CreateWidgetForParent
09:18:25  WARNING -  TEST-UNEXPECTED-FAIL | LeakSanitizer | leak at Malloc, nsTArray_base, SetCapacity, mozilla::widget::PuppetWidget::PuppetWidget
09:18:25  WARNING -  TEST-UNEXPECTED-FAIL | LeakSanitizer | leak at LayerManager, mozilla::layers::ClientLayerManager::ClientLayerManager, mozilla::widget::PuppetWidget::GetLayerManager, mozilla::widget::PuppetWidget::Create
Blocks: 1110982
Blocks: LSan
It looks like a DestroyWidgetRunnable is leaking. (The rest of the stuff is indirect, so maybe it is all owned by the runnable.)
Component: Document Navigation → Layout
My guess would be that this dispatch is happening late in shutdown so that NS_GetMainThread fails and we leak the runnable:

http://mxr.mozilla.org/mozilla-central/source/xpcom/glue/nsThreadUtils.cpp#170

With run-by-dirs, whatever this is could end up running closer to shutdown than it would have otherwise. The ASan run is non-debug so it won't have the warning, but I'll try to reproduce locally and then confirm that theory, or at least get a better allocation stack.
I can reproduce locally in a clean build with
  ./mach mochitest -f chrome docshell/test/chrome/

I'll attach a fuller stack, but it looks like my theory was correct: we're triggering the runnable in a shutdown CC, so the dispatch fails and we leak.

With this horrible patch we avoid the leak:

-      NS_DispatchToMainThread(widgetDestroyer);
+      nsIRunnable* foo = widgetDestroyer.get();
+      if (NS_FAILED(NS_DispatchToMainThread(widgetDestroyer))) {
+        NS_RELEASE(foo);
+      }

Nathan, is there some right way to deal with this?
Flags: needinfo?(nfroyd)
(In reply to Andrew McCreight [:mccr8] from comment #4)
> I can reproduce locally in a clean build with
>   ./mach mochitest -f chrome docshell/test/chrome/
> 
> I'll attach a fuller stack, but it looks like my theory was correct: we're
> triggering the runnable in a shutdown CC, so the dispatch fails and we leak.
> 
> With this horrible patch we avoid the leak:
> 
> -      NS_DispatchToMainThread(widgetDestroyer);
> +      nsIRunnable* foo = widgetDestroyer.get();
> +      if (NS_FAILED(NS_DispatchToMainThread(widgetDestroyer))) {
> +        NS_RELEASE(foo);
> +      }
> 
> Nathan, is there some right way to deal with this?

Bleh.  I suggested something in bug 1186745 comment 16 so that we don't leak if we're dispatching from the same thread.  I don't know if that's really safe in general to do from the main thread...seems like it should be.
Flags: needinfo?(nfroyd)
The alternative is to check for the existence of the main thread prior to the dispatch, which seems like a silly thing to do, but one that we've employed elsewhere.  The technique from bug 1186745 would be more elegant, though...
Is this something you have time to fix, Nathan? Thanks.
Flags: needinfo?(nfroyd)
(In reply to Andrew McCreight [:mccr8] from comment #9)
> Is this something you have time to fix, Nathan? Thanks.

Sure.
Assignee: nobody → nfroyd
Flags: needinfo?(nfroyd)
Setting ni? since I care more about that than the assignee.
Flags: needinfo?(nfroyd)
You should really post in all of these bugs that you filed for failures that you have disabled the tests (along with with platforms you disabled them) because it is not at all clear from anybody just following the individual bugs.
Component: Layout → Document Navigation
Flags: needinfo?(kaustabh93)
Whiteboard: [disabled in debug and ASan]
I can't reproduce the issue using the given commands, but I can produce a small
patch that probably addresses things.  Andrew, can you take a look and see if
this fixes things on your machine?
Attachment #8672700 - Flags: review?(continuation)
Comment on attachment 8672700 [details] [diff] [review]
fix run-by-dir leak in test_bug846906.xul

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

I was able to reproduce this issue in a debug build using the steps from comment 4, and this patch fixes it for me. Thanks!

::: docshell/test/chrome/chrome.ini
@@ +79,5 @@
>  [test_bug662200.xul]
>  [test_bug690056.xul]
>  [test_bug789773.xul]
>  [test_bug846906.xul]
> +skip-if = debug # Bug 1207161

Please remove the skip-if entirely. The debug issue just a different manifestation of the same leak.

::: view/nsView.cpp
@@ +135,5 @@
>  
>        nsCOMPtr<nsIRunnable> widgetDestroyer =
>          new DestroyWidgetRunnable(mWindow);
>  
> +      // Don't leak if we're happening to arrive here after the main thread

nit: "if we're happening to arrive" should be "if we happen to arrive"?
Attachment #8672700 - Flags: review?(continuation) → review+
https://hg.mozilla.org/mozilla-central/rev/6d12c3f9067c
Status: NEW → RESOLVED
Closed: 4 years ago
Resolution: --- → FIXED
Target Milestone: --- → mozilla44
Flags: needinfo?(nfroyd)
(In reply to Andrew McCreight [:mccr8] from comment #12)
> You should really post in all of these bugs that you filed for failures that
> you have disabled the tests (along with with platforms you disabled them)
> because it is not at all clear from anybody just following the individual
> bugs.

Thanks for pointing this out. I'll make the required comments.
Flags: needinfo?(kaustabh93)
This test has been disabled for ASAN and all debug platforms to get run-by-dir enabled. This can be tested on the try server and once fixed can be turned back on.
(In reply to Kaustabh Datta Choudhury from comment #18)
> This test has been disabled for ASAN and all debug platforms to get
> run-by-dir enabled. This can be tested on the try server and once fixed can
> be turned back on.

It is nice to have a whiteboard comment so that people can see at a glance the current status without reading all of the comments.

Also, this particular test has been reenabled, thanks to Nathan.
Whiteboard: [disabled in debug and ASan]
You need to log in before you can comment on or make changes to this bug.