Emscripten: Fix dead requests having their status updated

This commit is contained in:
Tamás Bálint Misius
2023-06-23 19:04:42 +02:00
parent 648bc08377
commit cfd2baa064

View File

@@ -54,7 +54,7 @@ namespace http
EM_ASM({ EM_ASM({
Module.emscriptenRequestManager = {}; Module.emscriptenRequestManager = {};
Module.emscriptenRequestManager.requests = []; Module.emscriptenRequestManager.requests = [];
Module.emscriptenRequestManager.updateRequestStatus = Module.cwrap( Module.emscriptenRequestManager.updateRequestStatusThunk = Module.cwrap(
'RequestManager_UpdateRequestStatusThunk', 'RequestManager_UpdateRequestStatusThunk',
null, null,
[ 'number' ] [ 'number' ]
@@ -241,7 +241,12 @@ namespace http
request.status = 0; request.status = 0;
request.bytesTotal = -1; request.bytesTotal = -1;
request.bytesDone = 0; request.bytesDone = 0;
Module.emscriptenRequestManager.updateRequestStatus(token); request.alive = true;
let updateRequestStatus = () => {
if (request.alive) {
Module.emscriptenRequestManager.updateRequestStatusThunk(token);
}
};
request.fetchController = new AbortController(); request.fetchController = new AbortController();
fetch(request.fetchResource, { fetch(request.fetchResource, {
method: request.fetchMethod, method: request.fetchMethod,
@@ -264,7 +269,7 @@ namespace http
return controller.close(); return controller.close();
} }
request.bytesDone += value.byteLength; request.bytesDone += value.byteLength;
Module.emscriptenRequestManager.updateRequestStatus(token); updateRequestStatus();
controller.enqueue(value); controller.enqueue(value);
read(); read();
}).catch(err => { }).catch(err => {
@@ -289,13 +294,13 @@ namespace http
}).then(data => { }).then(data => {
request.status = request.statusEarly; request.status = request.statusEarly;
request.responseData = data; request.responseData = data;
Module.emscriptenRequestManager.updateRequestStatus(token); updateRequestStatus();
}).catch(err => { }).catch(err => {
console.error(err); console.error(err);
if (!request.status) { if (!request.status) {
request.status = 600; request.status = 600;
} }
Module.emscriptenRequestManager.updateRequestStatus(token); updateRequestStatus();
}); });
}, handle->id, handle); }, handle->id, handle);
} }
@@ -363,6 +368,7 @@ namespace http
assert(handle->id >= 0); assert(handle->id >= 0);
EM_ASM({ EM_ASM({
let request = Module.emscriptenRequestManager.requests[$0]; let request = Module.emscriptenRequestManager.requests[$0];
request.alive = false;
request.fetchController.abort(); request.fetchController.abort();
Module.emscriptenRequestManager.requests[$0] = null; Module.emscriptenRequestManager.requests[$0] = null;
}, handle->id); }, handle->id);