Threading from a Web Worker

211 views
Skip to first unread message

Segmentation Fault Error

unread,
Jul 23, 2020, 10:46:06 AM7/23/20
to emscripten-discuss

Hello everyone,

 

I have been using for a while emscripten to compile a large library. Since its operations take long time, I moved the module to a web worker, where I can call functions without blocking the UI. And it has worked fantastic so far!

 

To further improve performance, I then enabled pthreads in the toolchain. I noticed then that the execution got stuck. Somehow this issue does not occur if the module is executed on the main UI thread, instead of the web worker.

 

I have left a link below, to the demo code on how to reproduce the issue: a function that launches a thread, that launches several threads. It happens that this second level never gets executed if the function was called from a web worker.

 

Maybe I am missing something here, any idea?

 

Regards,

SFE


Alon Zakai

unread,
Jul 24, 2020, 12:35:43 PM7/24/20
to emscripte...@googlegroups.com
Interesting, so this can use pthreads from the main thread ok, but not when starting from a pthread?

That is a less-tested use case, so it's possible you've run into a bug. Building with -s PTHREADS_DEBUG may help with extra logging. But it may be best to try to reduce this to a small testcase, as it may need to be debugged in depth.

--
You received this message because you are subscribed to the Google Groups "emscripten-discuss" group.
To unsubscribe from this group and stop receiving emails from it, send an email to emscripten-disc...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/emscripten-discuss/141a16e4-647e-484c-b36a-8db45addaec8o%40googlegroups.com.

Segmentation Fault Error

unread,
Jul 29, 2020, 7:26:14 AM7/29/20
to emscripten-discuss
Toying with this concept I realized that some operations cannot be performed if you launch a thread from a Web Worker.

A simpler example, following my setup linked in the OP:

#include <pthread.h>
#include <stdio.h>
#include <emscripten.h>

void *thread(void *arg)
{
    printf("Hello from thread!\n"); // Execution hangs here if Module is instantiated in a Web Worker
    return NULL;
}

EMSCRIPTEN_KEEPALIVE void doSomething()
{
    pthread_t thr;
    pthread_create(&thr, NULL, thread, NULL);
}


To me it seems like it gets locked on spawning threads, IO, ... I guess this is not expected behavior, and that this can happen because WASM threads is a WIP feature. Is there anything else I could do here?

Cheers,
SFE

Segmentation Fault Error

unread,
Aug 17, 2020, 6:27:56 AM8/17/20
to emscripten-discuss
Should this issue be raised in the emsdk repo? or left aside, until we have a final release of the threads feature?

Sam Clegg

unread,
Aug 17, 2020, 9:42:28 AM8/17/20
to emscripte...@googlegroups.com
On Mon, Aug 17, 2020 at 3:28 AM Segmentation Fault Error <segmentation...@gmail.com> wrote:
Should this issue be raised in the emsdk repo? or left aside, until we have a final release of the threads feature?


Thread support in emscripten is officially released and available.   If you find bugs then opening a bug in the emscripten repo (not the emsdk repo) is probably the right way to go.

cheers,
sam
 

Mehdi Sabwat

unread,
Aug 18, 2020, 10:09:25 AM8/18/20
to emscripte...@googlegroups.com

Segmentation Fault Error

unread,
Aug 18, 2020, 10:46:17 AM8/18/20
to emscripten-discuss
Oh! Yes, it seems so. Thanks for the link!

lailto...@gmail.com

unread,
Aug 18, 2020, 7:50:42 PM8/18/20
to emscripten-discuss
Segmentation,
The update have solved the issue to you? is possible an example code how are you doing that?
Thanks

Segmentation Fault Error

unread,
Aug 19, 2020, 3:32:06 AM8/19/20
to emscripten-discuss
Hello,
in the OP I have a full demo you could check. I also left more info here: https://github.com/emscripten-core/emscripten/issues/11914

I think I got into this situation by force, since spawning threads from a webworker was not originally working: if you create the Module on your webworker, the thread-workers will start executing your webworker's code which can corrupt its onmessage event (replaced by yours!).

If spawning threads from a webworker is not allowed from the beginning, what alternatives do we have to execute arbitrary threaded-functions that can lock the UI?

Segmentation Fault Error

unread,
Sep 7, 2020, 6:53:43 AM9/7/20
to emscripten-discuss
To anyone that arrives here:
It is fixed with this patch -> https://github.com/emscripten-core/emscripten/pull/12102 (merge pending), I also tested it and it works beautifully!
Reply all
Reply to author
Forward
0 new messages