Use HandleAllocator in legacy FS. NFC
diff --git a/src/library_fs.js b/src/library_fs.js index 79970eb..627d710 100644 --- a/src/library_fs.js +++ b/src/library_fs.js
@@ -12,6 +12,7 @@ '$intArrayFromString', '$stringToUTF8Array', '$lengthBytesUTF8', + '$HandleAllocator', #if LibraryManager.has('library_idbfs.js') '$IDBFS', #endif @@ -100,7 +101,6 @@ root: null, mounts: [], devices: {}, - streams: [], nextInode: 1, nameTable: null, currentPath: '/', @@ -381,7 +381,7 @@ } throw new FS.ErrnoError({{{ cDefs.EMFILE }}}); }, - getStream: (fd) => FS.streams[fd], + getStream: (fd) => FS.streams.allocated[fd], // TODO parameterize this function such that a stream // object isn't directly passed in. not possible until // SOCKFS is completed. @@ -427,14 +427,18 @@ // clone it, so we can return an instance of FSStream stream = Object.assign(new FS.FSStream(), stream); if (fd == -1) { - fd = FS.nextfd(); + fd = FS.streams.allocate(stream); + } else { + while (FS.streams.allocated.length <= fd) { + FS.streams.allocated.push(); + } + FS.streams.allocated[fd] = stream; } stream.fd = fd; - FS.streams[fd] = stream; return stream; }, closeStream: (fd) => { - FS.streams[fd] = null; + FS.streams.free(fd); }, // @@ -1490,6 +1494,11 @@ assert(!FS.init.initialized, 'FS.init was previously called. If you want to initialize later with custom parameters, remove any earlier calls (note that one is automatically added to the generated code)'); #endif FS.init.initialized = true; + FS.streams = new HandleAllocator(); + // Clear the default allocated list since the default HandleAllocator + // starts with `undefined` to avoid handing out hangle zero, but in the + // case of file handles zero is a valid handle (stdin). + FS.streams.allocated = [] FS.ensureErrnoError(); @@ -1507,13 +1516,7 @@ _fflush(0); #endif // close all of our streams - for (var i = 0; i < FS.streams.length; i++) { - var stream = FS.streams[i]; - if (!stream) { - continue; - } - FS.close(stream); - } + FS.streams.allocated.forEach((stream) => stream && FS.close(stream)); }, //
diff --git a/src/library_noderawfs.js b/src/library_noderawfs.js index 4de762e..2471f02 100644 --- a/src/library_noderawfs.js +++ b/src/library_noderawfs.js
@@ -107,8 +107,8 @@ return rtn; }, closeStream: function(fd) { - if (FS.streams[fd]) { - FS.streams[fd].shared.refcnt--; + if (FS.streams.has(fd)) { + FS.streams.get(fd).shared.refcnt--; } VFS.closeStream(fd); },
diff --git a/test/fs/test_mmap.c b/test/fs/test_mmap.c index 5d3927d..3ee67d2 100644 --- a/test/fs/test_mmap.c +++ b/test/fs/test_mmap.c
@@ -236,7 +236,7 @@ } EM_ASM({ - const stream = FS.streams.find(stream => stream.path.indexOf('yolo/overallocatedfile.txt') >= 0); + const stream = FS.streams.allocated.find(stream => stream.path.indexOf('yolo/overallocatedfile.txt') >= 0); assert(stream.node.usedBytes === Number($0), 'Used bytes on the over-allocated file (' + stream.node.usedBytes + ') ' + 'should be ' + $0
diff --git a/test/other/metadce/test_metadce_cxx_ctors1.jssize b/test/other/metadce/test_metadce_cxx_ctors1.jssize index b7e0851..476374f 100644 --- a/test/other/metadce/test_metadce_cxx_ctors1.jssize +++ b/test/other/metadce/test_metadce_cxx_ctors1.jssize
@@ -1 +1 @@ -25948 +26192
diff --git a/test/other/metadce/test_metadce_cxx_ctors2.jssize b/test/other/metadce/test_metadce_cxx_ctors2.jssize index 5c59d01..a177257 100644 --- a/test/other/metadce/test_metadce_cxx_ctors2.jssize +++ b/test/other/metadce/test_metadce_cxx_ctors2.jssize
@@ -1 +1 @@ -25912 +26156
diff --git a/test/other/metadce/test_metadce_cxx_except.jssize b/test/other/metadce/test_metadce_cxx_except.jssize index 3bd9928..edddd17 100644 --- a/test/other/metadce/test_metadce_cxx_except.jssize +++ b/test/other/metadce/test_metadce_cxx_except.jssize
@@ -1 +1 @@ -30462 +30707
diff --git a/test/other/metadce/test_metadce_cxx_except_wasm.jssize b/test/other/metadce/test_metadce_cxx_except_wasm.jssize index dabbf8a..d220510 100644 --- a/test/other/metadce/test_metadce_cxx_except_wasm.jssize +++ b/test/other/metadce/test_metadce_cxx_except_wasm.jssize
@@ -1 +1 @@ -25757 +26001
diff --git a/test/other/metadce/test_metadce_cxx_mangle.jssize b/test/other/metadce/test_metadce_cxx_mangle.jssize index 74bf7aa..d7d7825 100644 --- a/test/other/metadce/test_metadce_cxx_mangle.jssize +++ b/test/other/metadce/test_metadce_cxx_mangle.jssize
@@ -1 +1 @@ -30461 +30706
diff --git a/test/other/metadce/test_metadce_cxx_noexcept.jssize b/test/other/metadce/test_metadce_cxx_noexcept.jssize index b7e0851..476374f 100644 --- a/test/other/metadce/test_metadce_cxx_noexcept.jssize +++ b/test/other/metadce/test_metadce_cxx_noexcept.jssize
@@ -1 +1 @@ -25948 +26192