Skip to content

Commit

Permalink
delete worker objects with random id on callback
Browse files Browse the repository at this point in the history
  • Loading branch information
woodser committed Sep 1, 2023
1 parent d09260d commit b32754b
Show file tree
Hide file tree
Showing 3 changed files with 8 additions and 7 deletions.
2 changes: 1 addition & 1 deletion src/main/js/common/HttpClient.js
Expand Up @@ -38,7 +38,7 @@ class HttpClient {
// proxy to worker if configured
if (request.proxyToWorker) {
try {
return await LibraryUtils.invokeWorker(GenUtils.getUUID(), "httpRequest", request);
return await LibraryUtils.invokeWorker(undefined, "httpRequest", request);
} catch (err) {
if (err.message.length > 0 && err.message.charAt(0) === "{") {
let parsed = JSON.parse(err.message);
Expand Down
11 changes: 7 additions & 4 deletions src/main/js/common/LibraryUtils.js
Expand Up @@ -30,7 +30,7 @@ class LibraryUtils {
assert(level === parseInt(level, 10) && level >= 0, "Log level must be an integer >= 0");
LibraryUtils.LOG_LEVEL = level;
if (LibraryUtils.WASM_MODULE) LibraryUtils.WASM_MODULE.set_log_level(level);
if (LibraryUtils.WORKER) await LibraryUtils.invokeWorker(GenUtils.getUUID(), "setLogLevel", [level]);
if (LibraryUtils.WORKER) await LibraryUtils.invokeWorker(undefined, "setLogLevel", [level]);
}

/**
Expand All @@ -49,7 +49,7 @@ class LibraryUtils {
*/
static async getWasmMemoryUsed() {
let total = 0;
if (LibraryUtils.WORKER) total += await LibraryUtils.invokeWorker(GenUtils.getUUID(), "getWasmMemoryUsed", []);
if (LibraryUtils.WORKER) total += await LibraryUtils.invokeWorker(undefined, "getWasmMemoryUsed", []);
if (LibraryUtils.getWasmModule() && LibraryUtils.getWasmModule().HEAP8) total += LibraryUtils.getWasmModule().HEAP8.length;
return total;
}
Expand Down Expand Up @@ -198,20 +198,23 @@ class LibraryUtils {
/**
* Invoke a worker function and get the result with error handling.
*
* @param {objectId} identifies the worker object to invoke
* @param {string} objectId identifies the worker object to invoke (default random id)
* @param {string} fnName is the name of the function to invoke
* @param {Object[]} args are function arguments to invoke with
* @param {any[]} args are function arguments to invoke with
* @return {any} resolves with response payload from the worker or an error
*/
static async invokeWorker(objectId, fnName, args) {
assert(fnName.length >= 2);
let worker = await LibraryUtils.getWorker();
let randomObject = objectId === undefined;
if (randomObject) objectId = GenUtils.getUUID();
if (!LibraryUtils.WORKER_OBJECTS[objectId]) LibraryUtils.WORKER_OBJECTS[objectId] = {callbacks: {}};
return await new Promise(function(resolve, reject) {
let callbackId = GenUtils.getUUID();
LibraryUtils.WORKER_OBJECTS[objectId].callbacks[callbackId] = function(resp) { // TODO: this defines function once per callback
resp ? (resp.error ? reject(LibraryUtils.deserializeError(resp.error)) : resolve(resp.result)) : resolve();
delete LibraryUtils.WORKER_OBJECTS[objectId].callbacks[callbackId];
if (randomObject) delete LibraryUtils.WORKER_OBJECTS[objectId];
};
worker.postMessage([objectId, fnName, callbackId].concat(args === undefined ? [] : GenUtils.listify(args)));
});
Expand Down
2 changes: 0 additions & 2 deletions src/main/js/common/MoneroWebWorker.js
Expand Up @@ -58,8 +58,6 @@ self.initOneTime = async function() {

// --------------------------- STATIC UTILITIES -------------------------------

// TODO: object id not needed for static utilites, using throwaway uuid

self.httpRequest = async function(objectId, opts) {
try {
return await HttpClient.request(Object.assign(opts, {proxyToWorker: false}));
Expand Down

0 comments on commit b32754b

Please sign in to comment.