platform_system_core/include/utils
Hans Boehm 70a46d674a 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
(cherry picked from commit e263e6c633)
2016-05-19 16:18:26 -07:00
..
AndroidThreads.h Use __ANDROID__ instead of HAVE_ANDROID_OS. 2015-07-30 09:33:43 -07:00
ashmem.h auto import from //depot/cupcake/@135843 2013-07-30 13:56:49 -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 Kill HAVE_PTHREADS. 2015-01-27 14:23:22 -08: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
misc.h libutils clean-up 2013-07-30 13:57:01 -07:00
Mutex.h Mutex: Note that STL is generally prefered 2016-04-05 12:38:47 -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
RefBase.h Fix memory order and race bugs in Refbase.h & RefBase.cpp 2016-05-19 16:18:26 -07:00
RWLock.h Kill HAVE_PTHREADS. 2015-01-27 14:23:22 -08: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 system/core: remove methods returning SharedBuffer in String8, String16 2015-09-30 15:42:02 +01:00
String16.h Add String16#contains and strstr16 methods. 2016-05-09 19:45:07 +01: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 system/core: Make Thread::run threadName argument required 2016-03-12 21:32:52 -08:00
ThreadDefs.h Fix windows 64-bit builds 2016-02-25 18:43:55 -08:00
threads.h split utils/threads.h into multiple headers 2013-07-30 13:56:59 -07: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 Add String16#contains and strstr16 methods. 2016-05-09 19:45:07 +01: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