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

Commit dafa1db0 authored by Sudheer Shanka's avatar Sudheer Shanka Committed by Automerger Merge Worker
Browse files

Merge "Maintain the fuse buffer pool keyed by inode instead of threadId." into...

Merge "Maintain the fuse buffer pool keyed by inode instead of threadId." into rvc-dev am: b52a288e am: 8861ef2c

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/11885304

Change-Id: I3052e9d50f91c37b10cac558f3b7a7e3397a7ef7
parents 1f72612f 8861ef2c
Loading
Loading
Loading
Loading
+9 −9
Original line number Diff line number Diff line
@@ -210,7 +210,7 @@ public class FuseAppLoop implements Handler.Callback {
                        if (mInstance != 0) {
                            native_replySimple(mInstance, unique, FUSE_OK);
                        }
                        mBytesMap.stopUsing(entry.getThreadId());
                        mBytesMap.stopUsing(inode);
                        recycleLocked(args);
                    }
                    break;
@@ -270,7 +270,7 @@ public class FuseAppLoop implements Handler.Callback {
                if (mInstance != 0) {
                    native_replyOpen(mInstance, unique, /* fh */ inode);
                    entry.opened = true;
                    return mBytesMap.startUsing(entry.getThreadId());
                    return mBytesMap.startUsing(inode);
                }
            } catch (ErrnoException error) {
                replySimpleLocked(unique, getError(error));
@@ -354,27 +354,27 @@ public class FuseAppLoop implements Handler.Callback {
    }

    /**
     * Map between Thread ID and byte buffer.
     * Map between inode and byte buffer.
     */
    private static class BytesMap {
        final Map<Long, BytesMapEntry> mEntries = new HashMap<>();

        byte[] startUsing(long threadId) {
            BytesMapEntry entry = mEntries.get(threadId);
        byte[] startUsing(long inode) {
            BytesMapEntry entry = mEntries.get(inode);
            if (entry == null) {
                entry = new BytesMapEntry();
                mEntries.put(threadId, entry);
                mEntries.put(inode, entry);
            }
            entry.counter++;
            return entry.bytes;
        }

        void stopUsing(long threadId) {
            final BytesMapEntry entry = mEntries.get(threadId);
        void stopUsing(long inode) {
            final BytesMapEntry entry = mEntries.get(inode);
            Objects.requireNonNull(entry);
            entry.counter--;
            if (entry.counter <= 0) {
                mEntries.remove(threadId);
                mEntries.remove(inode);
            }
        }