Skip to content

Commit

Permalink
Merge pull request emscripten-core#12 from rstz/add-storagefoundation…
Browse files Browse the repository at this point in the history
…-quota-checks

Add safeguards against QuotaExceededErrors in SFA
  • Loading branch information
rstz authored Sep 28, 2021
2 parents e79d6da + 76bb000 commit 8d9ab82
Show file tree
Hide file tree
Showing 2 changed files with 46 additions and 10 deletions.
28 changes: 23 additions & 5 deletions pthreadfs/library_pthreadfs.js
Original file line number Diff line number Diff line change
Expand Up @@ -3164,8 +3164,18 @@ mergeInto(LibraryManager.library, {
}
fileHandle = await storageFoundation.open(SFAFS.encodedPath(node));
}
await fileHandle.setLength(attr.size);

try {
await fileHandle.setLength(attr.size);
}
catch (e) {
if (e.name == 'QuotaExceededError') {
await storageFoundation.requestCapacity(2*1024*1024*1024);
await fileHandle.setLength(attr.size);
}
else {
throw e;
}
}
} catch (e) {
if (!('code' in e)) throw e;
throw new PThreadFS.ErrnoError(-e.errno);
Expand Down Expand Up @@ -3402,9 +3412,17 @@ mergeInto(LibraryManager.library, {
SFAFS.debug('write', arguments);
stream.node.timestamp = Date.now();
let data = new Uint8Array(buffer.slice(offset, offset+length));
let result = await stream.handle.write(data, position);
SFAFS.debug('end write');
return result.writtenBytes;
let writeResult;
try {
writeResult = await stream.handle.write(data, position);
}
catch (e) {
if (e.name == 'QuotaExceededError') {
await storageFoundation.requestCapacity(2*1024*1024*1024);
writeResult = await stream.handle.write(data, position);
}
}
return writeResult.writtenBytes;
},

llseek: async function (stream, offset, whence) {
Expand Down
28 changes: 23 additions & 5 deletions pthreadfs/src/js/library_sfafs_async.js
Original file line number Diff line number Diff line change
Expand Up @@ -224,8 +224,18 @@ mergeInto(LibraryManager.library, {
}
fileHandle = await storageFoundation.open(SFAFS.encodedPath(node));
}
await fileHandle.setLength(attr.size);

try {
await fileHandle.setLength(attr.size);
}
catch (e) {
if (e.name == 'QuotaExceededError') {
await storageFoundation.requestCapacity(2*1024*1024*1024);
await fileHandle.setLength(attr.size);
}
else {
throw e;
}
}
} catch (e) {
if (!('code' in e)) throw e;
throw new PThreadFS.ErrnoError(-e.errno);
Expand Down Expand Up @@ -462,9 +472,17 @@ mergeInto(LibraryManager.library, {
SFAFS.debug('write', arguments);
stream.node.timestamp = Date.now();
let data = new Uint8Array(buffer.slice(offset, offset+length));
let result = await stream.handle.write(data, position);
SFAFS.debug('end write');
return result.writtenBytes;
let writeResult;
try {
writeResult = await stream.handle.write(data, position);
}
catch (e) {
if (e.name == 'QuotaExceededError') {
await storageFoundation.requestCapacity(2*1024*1024*1024);
writeResult = await stream.handle.write(data, position);
}
}
return writeResult.writtenBytes;
},

llseek: async function (stream, offset, whence) {
Expand Down

0 comments on commit 8d9ab82

Please sign in to comment.