platform_system_core/include/utils
Hans Boehm e263e6c633 Fix memory order and race bugs in Refbase.h & RefBase.cpp
Convert to use std::atomic directly.

Consistently use relaxed ordering for increments, release ordering
for decrements, and an added acquire fence when the count goes to
zero.

Fix what looks like another race in attemptIncStrong:
It seems entirely possible that the final adjustment for
INITIAL_STRONG_VALUE would see e.g. INITIAL_STRONG_VALUE + 1,
since we could be running in the middle of another initial
increment.

Attempt to somewhat document what this actually does, and
what's expected from the client. Hide the documentation in
the .cpp file for now.

Remove a confusing redundant test in decWeak. OBJECT_LIFETIME_STRONG
and OBJECT_LIFETIME_WEAK are the only options, in spite of some
of the original comments.

It's conceivable that either of these issues has resulted in
actual crashes, though I would guess the probability is small.
It's hard enough to reason about this code without the bugs.

Bug: 28705989
Change-Id: I4107a56c3fc0fdb7ee17fc8a8f0dd7fb128af9d8
2016-05-17 16:11:11 -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 Condition::waitRelative. 2016-04-04 14:51:21 -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 libutils: fix cache removal when callback invalidates the key 2015-11-20 14:54:51 +00:00
Mutex.h Use __ANDROID__ instead of HAVE_ANDROID_OS. 2015-07-30 09:33:43 -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 Kill HAVE_PTHREADS. 2015-01-27 14:23:22 -08:00
RefBase.h Fix memory order and race bugs in Refbase.h & RefBase.cpp 2016-05-17 16:11:11 -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 Teach sp<> how to std::move 2015-10-29 07:17:40 -07:00
SystemClock.h libutils clean-up 2013-07-30 13:57:01 -07:00
Thread.h Use __ANDROID__ instead of HAVE_ANDROID_OS. 2015-07-30 09:33:43 -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 TypeHelpers.h: Don't underflow unsigned int 2015-06-13 17:49:24 -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 remove reserved virtual slots 2013-07-30 13:57:01 -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