Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e74dec4a authored by Hans Boehm's avatar Hans Boehm
Browse files

Fix reference counting for Assembly

Use correct memory ordering.

Start the reference count at zero instead of one, thus giving us a
chance to actually deallocate something.

Remove remaining (unused) inclusions of cutils/atomic.h from
libpixelflinger.

Bug: 30838047

Change-Id: I3c6fd4a4861b3635cf398ca2aa3e915118100b10
parent 7a746f3a
Loading
Loading
Loading
Loading
+3 −4
Original line number Diff line number Diff line
@@ -23,7 +23,6 @@
#include <sys/mman.h>

#include <cutils/ashmem.h>
#include <cutils/atomic.h>
#define LOG_TAG "CodeCache"
#include <cutils/log.h>

@@ -101,7 +100,7 @@ static mspace getMspace()
}

Assembly::Assembly(size_t size)
    : mCount(1), mSize(0)
    : mCount(0), mSize(0)
{
    mBase = (uint32_t*)mspace_malloc(getMspace(), size);
    LOG_ALWAYS_FATAL_IF(mBase == NULL,
@@ -117,12 +116,12 @@ Assembly::~Assembly()

void Assembly::incStrong(const void*) const
{
    android_atomic_inc(&mCount);
    mCount.fetch_add(1, std::memory_order_relaxed);
}

void Assembly::decStrong(const void*) const
{
    if (android_atomic_dec(&mCount) == 1) {
    if (mCount.fetch_sub(1, std::memory_order_acq_rel) == 1) {
        delete this;
    }
}
+2 −1
Original line number Diff line number Diff line
@@ -19,6 +19,7 @@
#ifndef ANDROID_CODECACHE_H
#define ANDROID_CODECACHE_H

#include <atomic>
#include <stdint.h>
#include <pthread.h>
#include <sys/types.h>
@@ -69,7 +70,7 @@ public:
    typedef void    weakref_type;

private:
    mutable int32_t     mCount;
    mutable std::atomic<int32_t>     mCount;
            uint32_t*   mBase;
            size_t      mSize;
};
+0 −1
Original line number Diff line number Diff line
@@ -34,7 +34,6 @@

#include <sys/mman.h>
#include <cutils/ashmem.h>
#include <cutils/atomic.h>

#define __STDC_FORMAT_MACROS
#include <inttypes.h>
+0 −1
Original line number Diff line number Diff line
@@ -34,7 +34,6 @@

#include <sys/mman.h>
#include <cutils/ashmem.h>
#include <cutils/atomic.h>
#include <cutils/log.h>

#define __STDC_FORMAT_MACROS