Combined patch from master branch
From: Jack Ren <jack.ren@intel.com>
Date: Tue, 1 Mar 2011 21:10:42 +0800
Subject: [PATCH 1/2] sync with korg/master commit dd19f5b91a1032e60871febb143850fd81000c5a
following patches are applied in one time:
commit dd19f5b91a1032e60871febb143850fd81000c5a
Merge: 2b3d7e8 a62c84f
Author: Romain Guy <romainguy@android.com>
Date: Thu Feb 24 11:24:47 2011 -0800
Merge "Fix for a crash when GC weak references."
commit 2b3d7e8eccd7cbf64b2ac41c05073a9191d0d3b3
Merge: ef4b061 b4719ed
Author: Raphael Moll <ralf@android.com>
Date: Tue Feb 22 14:55:59 2011 -0800
Merge "Open dexdump files in binary mode."
commit b4719eda048c4dc4a4b6e5280c7a2b8299051078
Author: Raphael Moll <ralf@android.com>
Date: Wed Feb 16 13:39:27 2011 -0800
Open dexdump files in binary mode.
Requires change Ia5c0a59e from system/core
(which defines O_BINARY globally.)
commit a62c84f62a27a08d6bef6da0b96913d616dd659f
Author: Mattias Petersson <mattias.petersson@sonyericsson.com>
Date: Tue Dec 21 09:28:04 2010 +0100
Fix for a crash when GC weak references.
When a weak reference had been cleared there was a small risk that
the VM crashed when the cleared reference was garbage collected.
This is an example of code that can cause the problem:
Integer referent = new Integer(10);
wref = new WeakReference<Integer>(referent);
wref.clear(); //set the referent to null
When a garbage collection starts, all objects are scanned, looking
for objects that can be collected. During this phase, a list of
weak references is created. A check is performed to ensure that
only references with a non-null referent are added to this list.
In most cases, for the example above, the referent will be null
at this point, and it will never be added to the list. But if
the timing is extremely bad it looks like it is possible for the
reference to end up on the list before the referent has been set
to null, and the referent is set to null a little while later.
This means that we now have a reference on the list with a null
referent.
A bit later in the garbage collection flow, the list of weak
s is traversed in order to clear the references that
can be collected. Here we got the crash because the code asserted
that the referent of the references in the list should be
non-null. And in some rare cases it actually was null. The fix
is simply to remove the assert.
commit ef4b0613d6952770aefac07d503955eb7b962d2b
Merge: 464104b e9503ef
Author: Andy McFadden <fadden@android.com>
Date: Mon Nov 8 19:38:19 2010 -0800
am e9503ef8: am 886130bc: (-s ours) Two patches.
* commit 'e9503ef8c460f4818062ecc80a9e0b4f8c6745b8':
Two patches.
Change-Id: I04c1c9204af8197a4352358d805af40f1312d2ea
Signed-off-by: Bruce Beare <bruce.j.beare@intel.com>
15 files changed