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

Commit 29937425 authored by Steven Moreland's avatar Steven Moreland Committed by Automerger Merge Worker
Browse files

Merge "libbinder: Parcel, remove mOwnerCookie" am: 1ba79458 am: 99d7fa9e...

Merge "libbinder: Parcel, remove mOwnerCookie" am: 1ba79458 am: 99d7fa9e am: 14a47bcd am: cdd46ec0

Original change: https://android-review.googlesource.com/c/platform/frameworks/native/+/1496311

Change-Id: I98238071d9e8dee75813cdfe52315e62445cdbf8
parents 0283fe89 cdd46ec0
Loading
Loading
Loading
Loading
+5 −5
Original line number Diff line number Diff line
@@ -895,21 +895,21 @@ status_t IPCThreadState::waitForResponse(Parcel *reply, status_t *acquireResult)
                            tr.data_size,
                            reinterpret_cast<const binder_size_t*>(tr.data.ptr.offsets),
                            tr.offsets_size/sizeof(binder_size_t),
                            freeBuffer, this);
                            freeBuffer);
                    } else {
                        err = *reinterpret_cast<const status_t*>(tr.data.ptr.buffer);
                        freeBuffer(nullptr,
                            reinterpret_cast<const uint8_t*>(tr.data.ptr.buffer),
                            tr.data_size,
                            reinterpret_cast<const binder_size_t*>(tr.data.ptr.offsets),
                            tr.offsets_size/sizeof(binder_size_t), this);
                            tr.offsets_size/sizeof(binder_size_t));
                    }
                } else {
                    freeBuffer(nullptr,
                        reinterpret_cast<const uint8_t*>(tr.data.ptr.buffer),
                        tr.data_size,
                        reinterpret_cast<const binder_size_t*>(tr.data.ptr.offsets),
                        tr.offsets_size/sizeof(binder_size_t), this);
                        tr.offsets_size/sizeof(binder_size_t));
                    continue;
                }
            }
@@ -1183,7 +1183,7 @@ status_t IPCThreadState::executeCommand(int32_t cmd)
                reinterpret_cast<const uint8_t*>(tr.data.ptr.buffer),
                tr.data_size,
                reinterpret_cast<const binder_size_t*>(tr.data.ptr.offsets),
                tr.offsets_size/sizeof(binder_size_t), freeBuffer, this);
                tr.offsets_size/sizeof(binder_size_t), freeBuffer);

            const void* origServingStackPointer = mServingStackPointer;
            mServingStackPointer = &origServingStackPointer; // anything on the stack
@@ -1370,7 +1370,7 @@ status_t IPCThreadState::freeze(pid_t pid, bool enable, uint32_t timeout_ms) {
void IPCThreadState::freeBuffer(Parcel* parcel, const uint8_t* data,
                                size_t /*dataSize*/,
                                const binder_size_t* /*objects*/,
                                size_t /*objectsSize*/, void* /*cookie*/)
                                size_t /*objectsSize*/)
{
    //ALOGI("Freeing parcel %p", &parcel);
    IF_LOG_COMMANDS() {
+3 −4
Original line number Diff line number Diff line
@@ -2498,7 +2498,7 @@ size_t Parcel::ipcObjectsCount() const
}

void Parcel::ipcSetDataReference(const uint8_t* data, size_t dataSize,
    const binder_size_t* objects, size_t objectsCount, release_func relFunc, void* relCookie)
    const binder_size_t* objects, size_t objectsCount, release_func relFunc)
{
    binder_size_t minOffset = 0;
    freeDataNoInit();
@@ -2513,7 +2513,6 @@ void Parcel::ipcSetDataReference(const uint8_t* data, size_t dataSize,
    mNextObjectHint = 0;
    mObjectsSorted = false;
    mOwner = relFunc;
    mOwnerCookie = relCookie;
    for (size_t i = 0; i < mObjectsSize; i++) {
        binder_size_t offset = mObjects[i];
        if (offset < minOffset) {
@@ -2614,7 +2613,7 @@ void Parcel::freeDataNoInit()
    if (mOwner) {
        LOG_ALLOC("Parcel %p: freeing other owner data", this);
        //ALOGI("Freeing data ref of %p (pid=%d)", this, getpid());
        mOwner(this, mData, mDataSize, mObjects, mObjectsSize, mOwnerCookie);
        mOwner(this, mData, mDataSize, mObjects, mObjectsSize);
    } else {
        LOG_ALLOC("Parcel %p: freeing allocated data", this);
        releaseObjects();
@@ -2777,7 +2776,7 @@ status_t Parcel::continueWrite(size_t desired)
            memcpy(objects, mObjects, objectsSize*sizeof(binder_size_t));
        }
        //ALOGI("Freeing data ref of %p (pid=%d)", this, getpid());
        mOwner(this, mData, mDataSize, mObjects, mObjectsSize, mOwnerCookie);
        mOwner(this, mData, mDataSize, mObjects, mObjectsSize);
        mOwner = nullptr;

        LOG_ALLOC("Parcel %p: taking ownership of %zu capacity", this, desired);
+2 −3
Original line number Diff line number Diff line
@@ -185,8 +185,7 @@ private:
    static  void                threadDestructor(void *st);
    static  void                freeBuffer(Parcel* parcel,
                                           const uint8_t* data, size_t dataSize,
                                           const binder_size_t* objects, size_t objectsSize,
                                           void* cookie);
                                           const binder_size_t* objects, size_t objectsSize);

    const   sp<ProcessState>    mProcess;
            Vector<BBinder*>    mPendingStrongDerefs;
+8 −9
Original line number Diff line number Diff line
@@ -485,11 +485,12 @@ public:
    // uid.
    uid_t               readCallingWorkSourceUid() const;

    void                print(TextOutput& to, uint32_t flags = 0) const;

private:
    typedef void        (*release_func)(Parcel* parcel,
                                        const uint8_t* data, size_t dataSize,
                                        const binder_size_t* objects, size_t objectsSize,
                                        void* cookie);
                                        const binder_size_t* objects, size_t objectsSize);

    uintptr_t           ipcData() const;
    size_t              ipcDataSize() const;
@@ -497,12 +498,8 @@ private:
    size_t              ipcObjectsCount() const;
    void                ipcSetDataReference(const uint8_t* data, size_t dataSize,
                                            const binder_size_t* objects, size_t objectsCount,
                                            release_func relFunc, void* relCookie);
                                            release_func relFunc);

public:
    void                print(TextOutput& to, uint32_t flags = 0) const;

private:
                        Parcel(const Parcel& o);
    Parcel&             operator=(const Parcel& o);
    
@@ -609,7 +606,9 @@ private:
    mutable bool        mDeallocZero;

    release_func        mOwner;
    void*               mOwnerCookie;

    // TODO(167966510): reserved for binder/version/stability
    void*               mReserved = reinterpret_cast<void*>(0xAAAAAAAA);

    class Blob {
    public: