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