Use an integer map key.

This commit is contained in:
Joseph Cloutier
2022-03-29 13:49:03 -04:00
parent 17b69fbb49
commit 22fbffca76

View File

@@ -354,7 +354,7 @@ import lime.utils.Log;
#if lime_threads #if lime_threads
private static var multiThreadPool:ThreadPool; private static var multiThreadPool:ThreadPool;
// It isn't safe to pass a promise object to a web worker. // It isn't safe to pass a promise object to a web worker.
private static var promises:Map<{}, Promise<Dynamic>> = new Map(); private static var promises:Map<Int, Promise<Dynamic>> = new Map();
#end #end
public static var minThreads(default, set):Int = 0; public static var minThreads(default, set):Int = 0;
public static var maxThreads(default, set):Int = 1; public static var maxThreads(default, set):Int = 1;
@@ -392,12 +392,18 @@ import lime.utils.Log;
work.makePortable(); work.makePortable();
#end #end
promises[bundle] = promise;
bundle.promise = null; bundle.promise = null;
} }
#end #end
getPool(mode).run(threadPool_doWork, bundle); var jobID:Int = getPool(mode).run(threadPool_doWork, bundle);
#if lime_threads
if (mode == MULTI_THREADED)
{
promises[jobID] = (cast promise:Promise<Dynamic>);
}
#end
} }
// Event Handlers // Event Handlers
@@ -436,15 +442,15 @@ import lime.utils.Log;
#if lime_threads #if lime_threads
private static function multiThreadPool_onComplete(result:Dynamic):Void private static function multiThreadPool_onComplete(result:Dynamic):Void
{ {
var promise:Promise<Dynamic> = promises[multiThreadPool.activeJob.state]; var promise:Promise<Dynamic> = promises[multiThreadPool.activeJob.id];
promises.remove(multiThreadPool.activeJob.state); promises.remove(multiThreadPool.activeJob.id);
promise.complete(result); promise.complete(result);
} }
private static function multiThreadPool_onError(error:Dynamic):Void private static function multiThreadPool_onError(error:Dynamic):Void
{ {
var promise:Promise<Dynamic> = promises[multiThreadPool.activeJob.state]; var promise:Promise<Dynamic> = promises[multiThreadPool.activeJob.id];
promises.remove(multiThreadPool.activeJob.state); promises.remove(multiThreadPool.activeJob.id);
promise.error(error); promise.error(error);
} }
#end #end