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

Commit 6d8f30be authored by Philip P. Moltmann's avatar Philip P. Moltmann
Browse files

Add logging to MemoryIntArray

Test: Booted and saw logging
Bug: 72415980
Change-Id: I828c74b2e703a8bd3cce9f325e5747f9243fe485
parent f88fdc99
Loading
Loading
Loading
Loading
+44 −7
Original line number Diff line number Diff line
@@ -16,13 +16,19 @@

package android.util;

import static android.os.Process.FIRST_APPLICATION_UID;

import android.os.Parcel;
import android.os.ParcelFileDescriptor;
import android.os.Parcelable;
import android.os.Process;

import com.android.internal.annotations.GuardedBy;

import libcore.io.IoUtils;
import dalvik.system.CloseGuard;

import libcore.io.IoUtils;

import java.io.Closeable;
import java.io.IOException;
import java.util.UUID;
@@ -49,13 +55,18 @@ import java.util.UUID;
 */
public final class MemoryIntArray implements Parcelable, Closeable {
    private static final String TAG = "MemoryIntArray";
    private static final boolean DEBUG = Process.myUid() < FIRST_APPLICATION_UID;

    private static final int MAX_SIZE = 1024;

    private final Object mLock = new Object();
    private final CloseGuard mCloseGuard = CloseGuard.get();

    private final boolean mIsOwner;
    private final long mMemoryAddr;

    /** Fd for the shared memory object, -1 when closed */
    @GuardedBy("mLock")
    private int mFd = -1;

    /**
@@ -74,6 +85,7 @@ public final class MemoryIntArray implements Parcelable, Closeable {
        mFd = nativeCreate(name, size);
        mMemoryAddr = nativeOpen(mFd, mIsOwner);
        mCloseGuard.open("close");
        if (DEBUG) Log.i(TAG, "created " + getString());
    }

    private MemoryIntArray(Parcel parcel) throws IOException {
@@ -85,6 +97,8 @@ public final class MemoryIntArray implements Parcelable, Closeable {
        mFd = pfd.detachFd();
        mMemoryAddr = nativeOpen(mFd, mIsOwner);
        mCloseGuard.open("close");

        if (DEBUG) Log.i(TAG, "created from parcel " + getString());
    }

    /**
@@ -141,13 +155,33 @@ public final class MemoryIntArray implements Parcelable, Closeable {
     */
    @Override
    public void close() throws IOException {
        synchronized (mLock) {
            if (!isClosed()) {
                if (DEBUG) {
                    try {
                        throw new Exception();
                    } catch (Exception here) {
                        Log.i(TAG, "closing " + getString(), here);
                    }
                }
                nativeClose(mFd, mMemoryAddr, mIsOwner);
                mFd = -1;
                mCloseGuard.close();
            } else {
                try {
                    throw new Exception();
                } catch (Exception here) {
                    if (DEBUG) Log.i(TAG, getString() + " already closed", here);
                }
            }
        }
    }

    private String getString() {
        return this.getClass().getSimpleName() + "@" + System.identityHashCode(this)
                + " mMemoryAddr=" + mMemoryAddr + " mFd=" + mFd;
    }

    /**
     * @return Whether this array is closed and shouldn't be used.
     */
@@ -162,7 +196,9 @@ public final class MemoryIntArray implements Parcelable, Closeable {
                mCloseGuard.warnIfOpen();
            }

            if (!isClosed()) {
                IoUtils.closeQuietly(this);
            }
        } finally {
            super.finalize();
        }
@@ -206,7 +242,8 @@ public final class MemoryIntArray implements Parcelable, Closeable {

    private void enforceNotClosed() {
        if (isClosed()) {
            throw new IllegalStateException("cannot interact with a closed instance");
            throw new IllegalStateException("cannot interact with a closed instance "
                    + getString());
        }
    }