Last Comment Bug 711675 - Zombie compartment with any add-on implementing nsIContentPolicy (Adblock Plus, NoScript, GreaseMonkey) on WebM videos
: Zombie compartment with any add-on implementing nsIContentPolicy (Adblock Plu...
Status: RESOLVED FIXED
[MemShrink:P2]
:
Product: Core
Classification: Components
Component: Audio/Video (show other bugs)
: 11 Branch
: x86_64 Windows 7
: -- normal with 1 vote (vote)
: mozilla12
Assigned To: Jared Wein [:jaws] (please needinfo? me)
:
:
Mentors:
http://video.webmfiles.org/elephants-...
Depends on: 708431
Blocks: abp LeakyAddons ZombieCompartments
  Show dependency treegraph
 
Reported: 2011-12-16 18:45 PST by Loic
Modified: 2012-01-30 08:53 PST (History)
11 users (show)
See Also:
Crash Signature:
(edit)
QA Whiteboard:
Iteration: ---
Points: ---
Has Regression Range: ---
Has STR: ---


Attachments
about_memory_verbose_ABP2.0.1.txt (10.53 KB, text/plain)
2011-12-16 18:45 PST, Loic
no flags Details
Minimal content policy extension for testing (1.40 KB, application/x-xpinstall)
2011-12-18 22:28 PST, Wladimir Palant
no flags Details

Description Loic 2011-12-16 18:45:35 PST
Created attachment 582461 [details]
about_memory_verbose_ABP2.0.1.txt

User Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:11.0a1) Gecko/20111216 Firefox/11.0a1
Build ID: 20111216031140

Steps to reproduce:

1) Update to the latest Nightly and create a new profile
2) Install add-on Adblock Plus 2.0.1 (no blocklist subscription is necessary)
3) Open http://video.webmfiles.org/elephants-dream.webm (WebM video)
4) Open about:memory?verbose in another tab 
5) Close http://video.webmfiles.org/elephants-dream.webm
6) Return to about:memory?verbose and hit the "Minimize memory usage" few times


Actual results:

After hitting several times "Minimize memory usage" and waiting for 15-20 min, compartment(http://video.webmfiles.org/elephants-dream.webm) stays alive as zombie compartment.


Expected results:

compartment(http://video.webmfiles.org/elephants-dream.webm) should go away.
If Nightly is started in safe mode, this compartment is closed normally.

******************

Main Process

Explicit Allocations
64,893,719 B (100.0%) -- explicit
├──41,253,422 B (63.57%) -- js
│  ├──17,936,384 B (27.64%) -- gc-heap-decommitted
│  ├──17,162,062 B (26.45%) -- compartment([System Principal], 0x8577000)
│  │  ├───9,940,992 B (15.32%) -- gc-heap
│  │  │   ├──3,965,664 B (06.11%) -- objects
│  │  │   │  ├──2,939,504 B (04.53%) -- non-function
│  │  │   │  └──1,026,160 B (01.58%) -- function
│  │  │   ├──2,141,376 B (03.30%) -- arena
│  │  │   │  ├──2,093,928 B (03.23%) -- unused
│  │  │   │  ├─────38,832 B (00.06%) -- headers
│  │  │   │  └──────8,616 B (00.01%) -- padding
│  │  │   ├──1,975,176 B (03.04%) -- shapes
│  │  │   │  ├────937,224 B (01.44%) -- tree
│  │  │   │  ├────670,080 B (01.03%) -- dict
│  │  │   │  └────367,872 B (00.57%) -- base
│  │  │   ├────937,296 B (01.44%) -- strings
│  │  │   ├────876,248 B (01.35%) -- scripts
│  │  │   ├─────45,024 B (00.07%) -- type-objects
│  │  │   └────────208 B (00.00%) -- xml
│  │  ├───1,891,296 B (02.91%) -- object-slots
│  │  ├───1,528,208 B (02.35%) -- script-data
│  │  ├───1,521,030 B (02.34%) -- string-chars
│  │  ├───1,163,752 B (01.79%) -- shapes-extra
│  │  │   ├────416,608 B (00.64%) -- tree-tables
│  │  │   ├────393,224 B (00.61%) -- compartment-tables
│  │  │   ├────236,768 B (00.36%) -- dict-tables
│  │  │   └────117,152 B (00.18%) -- tree-shape-kids
│  │  ├─────524,288 B (00.81%) -- analysis-temporary
│  │  ├─────458,752 B (00.71%) -- mjit-code
│  │  ├─────100,496 B (00.15%) -- mjit-data
│  │  └──────33,248 B (00.05%) -- type-inference
│  │         └──33,248 B (00.05%) -- script-main
│  ├───2,715,332 B (04.18%) -- compartment(atoms)
│  │   ├──1,724,064 B (02.66%) -- string-chars
│  │   ├────991,232 B (01.53%) -- gc-heap
│  │   │    ├──870,784 B (01.34%) -- strings
│  │   │    └──120,448 B (00.19%) -- arena
│  │   │       ├──114,848 B (00.18%) -- unused
│  │   │       ├────3,872 B (00.01%) -- headers
│  │   │       └────1,728 B (00.00%) -- padding
│  │   └─────────36 B (00.00%) -- shapes-extra
│  │             └──36 B (00.00%) -- compartment-tables
│  ├───2,064,640 B (03.18%) -- runtime
│  │   ├──1,048,576 B (01.62%) -- atoms-table
│  │   ├────835,584 B (01.29%) -- threads
│  │   │    ├──262,144 B (00.40%) -- regexp-code
│  │   │    ├──262,144 B (00.40%) -- stack-committed
│  │   │    ├──180,224 B (00.28%) -- normal
│  │   │    └──131,072 B (00.20%) -- temporary
│  │   ├────151,552 B (00.23%) -- runtime-object
│  │   └─────28,928 B (00.04%) -- contexts
│  ├─────511,564 B (00.79%) -- xpconnect
│  ├─────458,752 B (00.71%) -- gc-heap-chunk-admin
│  ├─────368,352 B (00.57%) -- gc-heap-chunk-dirty-unused
│  ├──────31,344 B (00.05%) -- compartment(moz-nullprincipal:{172f1a4e-91db-4374-bcd6-e5cf077cc5da})
│  │      ├──28,672 B (00.04%) -- gc-heap
│  │      │  ├──25,056 B (00.04%) -- arena
│  │      │  │  ├──24,848 B (00.04%) -- unused
│  │      │  │  ├─────112 B (00.00%) -- headers
│  │      │  │  └──────96 B (00.00%) -- padding
│  │      │  ├───1,848 B (00.00%) -- shapes
│  │      │  │   ├────984 B (00.00%) -- tree
│  │      │  │   ├────480 B (00.00%) -- base
│  │      │  │   └────384 B (00.00%) -- dict
│  │      │  ├───1,504 B (00.00%) -- objects
│  │      │  │   ├──1,248 B (00.00%) -- function
│  │      │  │   └────256 B (00.00%) -- non-function
│  │      │  ├─────136 B (00.00%) -- scripts
│  │      │  └─────128 B (00.00%) -- type-objects
│  │      ├───1,536 B (00.00%) -- object-slots
│  │      ├───1,128 B (00.00%) -- shapes-extra
│  │      │   ├────904 B (00.00%) -- compartment-tables
│  │      │   ├────160 B (00.00%) -- dict-tables
│  │      │   └─────64 B (00.00%) -- tree-shape-kids
│  │      └───────8 B (00.00%) -- script-data
│  ├───────4,992 B (00.01%) -- compartment(http://video.webmfiles.org/elephants-dream.webm)
│  │       ├──4,096 B (00.01%) -- gc-heap
│  │       │  ├──4,072 B (00.01%) -- arena
│  │       │  │  ├──4,056 B (00.01%) -- unused
│  │       │  │  └─────16 B (00.00%) -- headers
│  │       │  └─────24 B (00.00%) -- shapes
│  │       │        └──24 B (00.00%) -- dict
│  │       └────896 B (00.00%) -- shapes-extra
│  │            ├──736 B (00.00%) -- compartment-tables
│  │            └──160 B (00.00%) -- dict-tables
│  └───────────0 B (00.00%) -- gc-heap-chunk-clean-unused
├──13,860,922 B (21.36%) -- heap-unclassified
├───5,733,192 B (08.83%) -- storage
│   ├──5,327,640 B (08.21%) -- sqlite
│   │  ├──1,747,496 B (02.69%) -- places.sqlite
│   │  │  ├──1,516,776 B (02.34%) -- cache-used [3]
│   │  │  ├────194,448 B (00.30%) -- stmt-used [3]
│   │  │  └─────36,272 B (00.06%) -- schema-used [3]
│   │  ├──1,208,232 B (01.86%) -- other
│   │  ├────612,560 B (00.94%) -- extensions.sqlite
│   │  │    ├──428,640 B (00.66%) -- cache-used
│   │  │    ├──176,080 B (00.27%) -- stmt-used
│   │  │    └────7,840 B (00.01%) -- schema-used
│   │  ├────329,968 B (00.51%) -- webappsstore.sqlite
│   │  │    ├──264,384 B (00.41%) -- cache-used
│   │  │    ├───61,424 B (00.09%) -- stmt-used
│   │  │    └────4,160 B (00.01%) -- schema-used
│   │  ├────262,560 B (00.40%) -- chromeappsstore.sqlite
│   │  │    ├──198,576 B (00.31%) -- cache-used
│   │  │    ├───59,824 B (00.09%) -- stmt-used
│   │  │    └────4,160 B (00.01%) -- schema-used
│   │  ├────260,232 B (00.40%) -- addons.sqlite
│   │  │    ├──231,216 B (00.36%) -- cache-used
│   │  │    ├───22,784 B (00.04%) -- stmt-used
│   │  │    └────6,232 B (00.01%) -- schema-used
│   │  ├────178,664 B (00.28%) -- cookies.sqlite
│   │  │    ├──165,408 B (00.25%) -- cache-used
│   │  │    ├───11,360 B (00.02%) -- stmt-used
│   │  │    └────1,896 B (00.00%) -- schema-used
│   │  ├────161,864 B (00.25%) -- urlclassifier3.sqlite
│   │  │    ├───92,416 B (00.14%) -- stmt-used
│   │  │    ├───66,696 B (00.10%) -- cache-used
│   │  │    └────2,752 B (00.00%) -- schema-used
│   │  ├────144,024 B (00.22%) -- content-prefs.sqlite
│   │  │    ├──132,504 B (00.20%) -- cache-used
│   │  │    ├────9,008 B (00.01%) -- stmt-used
│   │  │    └────2,512 B (00.00%) -- schema-used
│   │  ├────108,264 B (00.17%) -- downloads.sqlite
│   │  │    ├───99,600 B (00.15%) -- cache-used
│   │  │    ├────6,832 B (00.01%) -- stmt-used
│   │  │    └────1,832 B (00.00%) -- schema-used
│   │  ├────106,784 B (00.16%) -- permissions.sqlite
│   │  │    ├───99,600 B (00.15%) -- cache-used
│   │  │    ├────5,888 B (00.01%) -- stmt-used
│   │  │    └────1,296 B (00.00%) -- schema-used
│   │  ├────104,360 B (00.16%) -- signons.sqlite
│   │  │    ├───99,600 B (00.15%) -- cache-used
│   │  │    ├────2,952 B (00.00%) -- schema-used
│   │  │    └────1,808 B (00.00%) -- stmt-used
│   │  └────102,632 B (00.16%) -- search.sqlite
│   │       ├───99,600 B (00.15%) -- cache-used
│   │       ├────1,792 B (00.00%) -- stmt-used
│   │       └────1,240 B (00.00%) -- schema-used
│   └────405,552 B (00.62%) -- prefixset
│        └──405,552 B (00.62%) -- all
├───1,290,132 B (01.99%) -- layout
│   ├────669,936 B (01.03%) -- shell(chrome://browser/content/browser.xul)
│   │    ├──446,256 B (00.69%) -- arenas
│   │    ├──223,456 B (00.34%) -- styledata
│   │    └──────224 B (00.00%) -- textruns
│   ├────528,420 B (00.81%) -- shell(about:memory?verbose)
│   │    ├──274,016 B (00.42%) -- arenas [2]
│   │    ├──131,684 B (00.20%) -- textruns [2]
│   │    └──122,720 B (00.19%) -- styledata [2]
│   └─────91,776 B (00.14%) -- shell(resource://gre-resources/hiddenWindow.html)
│         ├──61,264 B (00.09%) -- styledata
│         └──30,512 B (00.05%) -- arenas
├─────942,104 B (01.45%) -- xpti-working-set
├─────891,397 B (01.37%) -- startup-cache
├─────696,288 B (01.07%) -- images
│     ├──684,008 B (01.05%) -- chrome
│     │  ├──684,008 B (01.05%) -- used
│     │  │  ├──684,008 B (01.05%) -- uncompressed-heap
│     │  │  ├────────0 B (00.00%) -- raw
│     │  │  └────────0 B (00.00%) -- uncompressed-nonheap
│     │  └────────0 B (00.00%) -- unused
│     │           ├──0 B (00.00%) -- raw
│     │           ├──0 B (00.00%) -- uncompressed-heap
│     │           └──0 B (00.00%) -- uncompressed-nonheap
│     └───12,280 B (00.02%) -- content
│         ├──12,280 B (00.02%) -- used
│         │  ├───8,736 B (00.01%) -- uncompressed-heap
│         │  ├───3,544 B (00.01%) -- raw
│         │  └───────0 B (00.00%) -- uncompressed-nonheap
│         └───────0 B (00.00%) -- unused
│                 ├──0 B (00.00%) -- raw
│                 ├──0 B (00.00%) -- uncompressed-heap
│                 └──0 B (00.00%) -- uncompressed-nonheap
├─────171,662 B (00.26%) -- dom
│     └──171,662 B (00.26%) -- window-objects
│        └──171,662 B (00.26%) -- active
│           ├──161,457 B (00.25%) -- top=1 (inner=2)
│           │  ├──156,924 B (00.24%) -- inner-window(id=2, uri=chrome://browser/content/browser.xul)
│           │  ├────1,511 B (00.00%) -- inner-window(id=10, uri=about:blank)
│           │  ├────1,511 B (00.00%) -- inner-window(id=12, uri=about:blank)
│           │  └────1,511 B (00.00%) -- inner-window(id=11, uri=about:blank)
│           ├────6,047 B (00.01%) -- top=39 (inner=77)
│           │    ├──5,647 B (00.01%) -- inner-window(id=77, uri=about:memory?verbose)
│           │    └────400 B (00.00%) -- inner-window(id=76, uri=[system])
│           ├────2,400 B (00.00%) -- outer-windows [6]
│           └────1,758 B (00.00%) -- top=3 (inner=4)
│                └──1,758 B (00.00%) -- inner-window(id=4, uri=resource://gre-resources/hiddenWindow.html)
├──────39,000 B (00.06%) -- cycle-collector
├──────15,056 B (00.02%) -- gfx
│      └──15,056 B (00.02%) -- textrun-word-cache
├─────────544 B (00.00%) -- history-links-hashtable
└───────────0 B (00.00%) -- spell-check

Other Measurements
    480,484 B -- gfx-d2d-surfacecache
 13,346,228 B -- gfx-d2d-surfacevram
    724,244 B -- gfx-surface-image
          0 B -- gfx-surface-win32
 33,290,802 B -- heap-allocated
 39,141,376 B -- heap-committed
       14.93% -- heap-committed-fragmentation
  2,883,584 B -- heap-dirty
 30,671,372 B -- heap-unallocated
            2 -- js-compartments-system
            2 -- js-compartments-user
 29,360,128 B -- js-gc-heap
  2,237,680 B -- js-gc-heap-arena-unused
          0 B -- js-gc-heap-chunk-clean-unused
    368,352 B -- js-gc-heap-chunk-dirty-unused
 17,936,384 B -- js-gc-heap-decommitted
       69.96% -- js-gc-heap-unused-fraction
    524,288 B -- js-total-analysis-temporary
    559,248 B -- js-total-mjit
  5,860,000 B -- js-total-objects
  2,404,600 B -- js-total-scripts
  3,025,644 B -- js-total-shapes
  5,053,174 B -- js-total-strings
     78,400 B -- js-total-type-inference
150,274,048 B -- private
213,417,984 B -- resident
490,668,032 B -- vsize
Comment 1 Nicholas Nethercote [:njn] 2011-12-16 18:59:46 PST
That's a tiny compartment.  All it has is 920 bytes worth of shapes and then some internal fragmentation.  Very odd.

│  ├───────4,992 B (00.01%) -- compartment(http://video.webmfiles.org/elephants-dream.webm)
│  │       ├──4,096 B (00.01%) -- gc-heap
│  │       │  ├──4,072 B (00.01%) -- arena
│  │       │  │  ├──4,056 B (00.01%) -- unused
│  │       │  │  └─────16 B (00.00%) -- headers
│  │       │  └─────24 B (00.00%) -- shapes
│  │       │        └──24 B (00.00%) -- dict
│  │       └────896 B (00.00%) -- shapes-extra
│  │            ├──736 B (00.00%) -- compartment-tables
│  │            └──160 B (00.00%) -- dict-tables
Comment 2 Loic 2011-12-17 08:27:46 PST
I tested with another WebM video (http://people.opera.com/shwetankd/webm/sunflower.webm), same result with the same memory values for this tiny zombie compartment!

│  ├───────4,992 B (00.01%) -- compartment(http://people.opera.com/shwetankd/webm/sunflower.webm)
│  │       ├──4,096 B (00.01%) -- gc-heap
│  │       │  ├──4,072 B (00.01%) -- arena
│  │       │  │  ├──4,056 B (00.01%) -- unused
│  │       │  │  └─────16 B (00.00%) -- headers
│  │       │  └─────24 B (00.00%) -- shapes
│  │       │        └──24 B (00.00%) -- dict
│  │       └────896 B (00.00%) -- shapes-extra
│  │            ├──736 B (00.00%) -- compartment-tables
│  │            └──160 B (00.00%) -- dict-tables
Comment 3 Wladimir Palant 2011-12-18 22:25:11 PST
Confirming. However, this isn't really an Adblock Plus issue - the same leak can be observed with a minimal nsIContentPolicy implementation. This is probably related to bug 708431.
Comment 4 Wladimir Palant 2011-12-18 22:28:47 PST
Created attachment 582750 [details]
Minimal content policy extension for testing

This extension implements nsIContentPolicy but doesn't do anything beyond that - only logs the calls. The issue can be reproduced with this extension as well.
Comment 5 Loic 2012-01-09 18:04:59 PST
A patch has been released in FF12 about Bug 708431, it fixes an issue with nsIContentPolicy too.

So I tested the latest nightly (Mozilla/5.0 (Windows NT 6.1; WOW64; rv:12.0a1) Gecko/20120109 Firefox/12.0a1) only with add-on ABP and it appears the current bug is fixed too, no more zombie compartment. So I guess comment #3 was true.

Anyway both Bug 708431 & Bug 711675 are still present in FF11 (Aurora).

In addition, I would like to add the zombie compartment can be observed with various video/audio formats, not only WebM:
[*].oga: http://upload.wikimedia.org/wikipedia/en/a/a9/Gordonwilson_bbc_interview_1987.oga
[*].ogg: http://www.html5rocks.com/en/tutorials/audio/quick/test.ogg
[*].ogv: http://www.html5rocks.com/en/tutorials/video/basics/Chrome_ImF.ogv
[*].webm: http://video.webmfiles.org/elephants-dream.webm

(restart the browser to test each format one after the other)
Comment 6 Nicholas Nethercote [:njn] 2012-01-09 19:19:19 PST
Thanks for confirming, Loic!

Note You need to log in before you can comment on or make changes to this bug.