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

Commit d7de48da 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: e851dafc

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

Change-Id: I019a15eb36a83d0cef6d4a24448fcb9524fb5c6b
parents 0240160d e851dafc
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);
            }
        }