Skip to content

Commit 1edf19d

Browse files
committed
remove worker api assertion so that sleep and other emterpreter-sync calls work in workers; #3211
1 parent 685152e commit 1edf19d

File tree

4 files changed

+22
-5
lines changed

4 files changed

+22
-5
lines changed

src/library_browser.js

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1312,7 +1312,6 @@ mergeInto(LibraryManager.library, {
13121312
},
13131313

13141314
emscripten_worker_respond_provisionally: function(data, size) {
1315-
if (!inWorkerCall) throw 'not in worker call!';
13161315
if (workerResponded) throw 'already responded with final response!';
13171316
postMessage({
13181317
'callbackId': workerCallbackId,
@@ -1322,7 +1321,6 @@ mergeInto(LibraryManager.library, {
13221321
},
13231322

13241323
emscripten_worker_respond: function(data, size) {
1325-
if (!inWorkerCall) throw 'not in worker call!';
13261324
if (workerResponded) throw 'already responded with final response!';
13271325
workerResponded = true;
13281326
postMessage({

src/postamble.js

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -300,7 +300,7 @@ function messageResender() {
300300
}
301301

302302
var buffer = 0, bufferSize = 0;
303-
var inWorkerCall = false, workerResponded = false, workerCallbackId = -1;
303+
var workerResponded = false, workerCallbackId = -1;
304304

305305
onmessage = function onmessage(msg) {
306306
// if main has not yet been called (mem init file, other async things), buffer messages
@@ -326,15 +326,13 @@ onmessage = function onmessage(msg) {
326326
HEAPU8.set(data, buffer);
327327
}
328328

329-
inWorkerCall = true;
330329
workerResponded = false;
331330
workerCallbackId = msg.data['callbackId'];
332331
if (data) {
333332
func(buffer, data.length);
334333
} else {
335334
func(0, 0);
336335
}
337-
inWorkerCall = false;
338336
}
339337

340338
#endif

tests/test_browser.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1936,6 +1936,10 @@ def test_worker_api_3(self):
19361936
Popen([PYTHON, EMCC, path_from_root('tests', 'worker_api_3_worker.cpp'), '-o', 'worker.js', '-s', 'BUILD_AS_WORKER=1', '-s', 'EXPORTED_FUNCTIONS=["_one"]']).communicate()
19371937
self.btest('worker_api_3_main.cpp', expected='5')
19381938

1939+
def test_worker_api_sleep(self):
1940+
Popen([PYTHON, EMCC, path_from_root('tests', 'worker_api_worker_sleep.cpp'), '-o', 'worker.js', '-s', 'BUILD_AS_WORKER=1', '-s', 'EXPORTED_FUNCTIONS=["_one"]', '-s', 'EMTERPRETIFY=1', '-s', 'EMTERPRETIFY_ASYNC=1']).communicate()
1941+
self.btest('worker_api_main.cpp', expected='566')
1942+
19391943
def test_emscripten_async_wget2(self):
19401944
self.btest('http.cpp', expected='0', args=['-I' + path_from_root('tests')])
19411945

tests/worker_api_worker_sleep.cpp

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
#include <assert.h>
2+
#include <emscripten.h>
3+
4+
extern "C" {
5+
6+
void one(char *data, int size) {
7+
int *x = (int*)data;
8+
int num = size/sizeof(int);
9+
for (int i = 0; i < num; i++) {
10+
x[i] += 1234;
11+
}
12+
emscripten_sleep(1000);
13+
emscripten_worker_respond(data, size);
14+
}
15+
16+
}
17+

0 commit comments

Comments
 (0)