platform_system_core/include/utils
Hans Boehm 23c857ebd6 Make RefBase more robust and debuggable
This prevents two different kinds of client errors from causing
undetected memory corruption, and helps with the detection of others:

1. We no longer deallocate objects when the weak count goes to zero
and there have been no strong references.  This otherwise causes
us to return a garbage object from a constructor if the constructor
allocates and deallocates a weak pointer to this. And we do know
that clients allocate such weak pointers in constructors and their
lifetime is hard to trace.

2. We abort if a RefBase object is explicitly destroyed while
the weak count is nonzero.  Otherwise a subsequent decrement
would cause a write to potentially reallocated memory.

3. We check counter values returned by atomic decrements for
plausibility, and fail immediately if they are not plausible.

We unconditionally log any cases in which 1 changes behavior
from before. We abort in cases in which 2 changes behavior, since
those reflect clear bugs.
In case 1, a log message now indicates a possible leak. We have
not seen such a message in practice.

The third point introduces a small amount of overhead into the
reference count decrement path. But this should be negligible
compared to the actual decrement cost.

Add a test for promote/attemptIncStrong that tries to check for
both (1) above and concurrent operation of attemptIncStrong.

Add some additional warnings and explanations to the RefBase
documentation.

Bug: 30503444
Bug: 30292291
Bug: 30292538

Change-Id: Ida92b9a2e247f543a948a75d221fbc0038dea66c
2016-08-13 11:17:51 -07:00
..
AndroidThreads.h Use __ANDROID__ instead of HAVE_ANDROID_OS. 2015-07-30 09:33:43 -07:00
Atomic.h auto import from //depot/cupcake/@135843 2013-07-30 13:56:49 -07:00
BitSet.h BitSet32 64b compatibility fix 2014-04-11 22:41:46 -07:00
BlobCache.h Adding a build id check to blob cache. 2015-05-18 13:14:32 -07:00
ByteOrder.h Use _WIN32 rather than HAVE_WINSOCK. 2015-07-29 17:45:24 -07:00
CallStack.h Rewrite libbacktrace to be all C++. 2014-01-16 16:12:29 -08:00
Compat.h utils: add pwrite64 to Compat.h for Mac 2015-09-28 16:52:38 +01:00
Condition.h Fix google-explicit-constructor warnings in utils. 2016-08-02 12:20:06 -07:00
Debug.h libutils clean-up 2013-07-30 13:57:01 -07:00
Endian.h Fix Mac build. 2014-11-22 07:25:02 -08:00
Errors.h libutils: Add UNEXPECTED_NULL status_t 2015-11-10 11:12:43 -08:00
FileMap.h Implement C++11 move semantics for android::FileMap 2015-10-01 12:47:49 -07:00
Flattenable.h minor tweaks to FlattenableUtils 2013-08-01 12:47:58 -07:00
Functor.h include: cleanup for -Wsystem-header 2014-05-23 15:09:57 -07:00
JenkinsHash.h libutils: cleanups for -fsanitize=integer 2015-08-24 15:52:22 +00:00
KeyedVector.h improve Vector<> safety checks 2013-07-30 13:56:59 -07:00
LinearTransform.h Add a linear transform library to libutils 2013-07-30 13:56:57 -07:00
List.h Fix sim build. 2013-07-30 13:56:51 -07:00
Log.h utils: Allow non android namespaces to use ALOGD_IF_SLOW 2013-07-30 13:57:00 -07:00
Looper.h Use eventfd instead of pipe in Looper. 2015-03-27 09:15:43 -07:00
LruCache.h LruCache: avoid copying keys in lookup 2016-07-20 18:38:44 +00:00
Mutex.h Fix google-explicit-constructor warnings in utils. 2016-08-02 12:20:06 -07:00
NativeHandle.h Clarify ownership for NativeHandle::mHandle 2014-03-24 11:40:36 +09:00
Printer.h utils: Add ProcessCallStack to collect stack traces for all threads in a process 2013-10-25 19:24:56 -07:00
ProcessCallStack.h Move CallStack to libbacktrace. 2014-01-09 15:09:13 -08:00
PropertyMap.h Add initial support for cursor-based pointing devices. 2013-07-30 13:56:55 -07:00
RWLock.h Fix google-explicit-constructor warnings in utils. 2016-08-02 12:20:06 -07:00
RefBase.h Make RefBase more robust and debuggable 2016-08-13 11:17:51 -07:00
Singleton.h Use full qualified name in macros. 2014-12-11 11:19:57 -08:00
SortedVector.h get rid of mirrorItemAt() which isn't used anywhere 2013-07-30 13:57:00 -07:00
StopWatch.h Native input dispatch rewrite work in progress. 2013-07-30 13:56:53 -07:00
String8.h libutils: add String8 and String16 std_string utility methods 2016-02-18 17:04:23 -08:00
String16.h libutils: add String8 and String16 std_string utility methods 2016-02-18 17:04:23 -08:00
StrongPointer.h Fix google-explicit-constructor warnings in utils. 2016-08-02 12:20:06 -07:00
SystemClock.h libutils clean-up 2013-07-30 13:57:01 -07:00
Thread.h Fix google-explicit-constructor warnings in utils. 2016-08-02 12:20:06 -07:00
ThreadDefs.h Fix windows 64-bit builds 2016-02-05 16:10:10 -08:00
Timers.h Mark time conversion functions as constexpr 2015-04-20 15:06:01 +01:00
Tokenizer.h Support tokenizing arbitrary content. 2013-07-30 13:56:59 -07:00
Trace.h Use __ANDROID__ instead of HAVE_ANDROID_OS. 2015-07-30 09:33:43 -07:00
TypeHelpers.h Fix google-explicit-constructor warnings in utils. 2016-08-02 12:20:06 -07:00
Unicode.h Remove incompatible Unicode compatibility types. 2014-11-20 11:54:39 -08:00
Vector.h Add Vector::resize() 2013-07-30 13:57:01 -07:00
VectorImpl.h Fix google-explicit-constructor warnings in utils. 2016-08-02 12:20:06 -07:00
misc.h libutils clean-up 2013-07-30 13:57:01 -07:00
threads.h split utils/threads.h into multiple headers 2013-07-30 13:56:59 -07:00