Remove incorrect/non-working (and used?) implementation of pthread_kill

Our implementation of `pthread_kill` seems to be based on the assumption
that this function is supposed to kill and given thread.  This is not
true.  Instead `pthread_kill` works more like `kill` in that is delivers
and async signal to a given thread.  There are many such signals
available such as SIGUSR1, SIGUSR2, SIGKILL, and SIGTERM.   All that
pthread_kill does that is different from `kill` is that it enables the
caller to decided which thread the signal handler should run in.  There
is no signal that can sent that reults in a termination of a given
thread.  Sending SIGKILL (which is unblockable) will still bring down
the entire program.  There is no pthread API for asynronously killing a
single thread, only pthread_cancel, which requires some cooperation from
the thread being terminated.

The currently implementation of `pthread_kill` is based on
`worker.terminate()`, which will kill the worker even if it is in a busy
loop (how does this work at the OS level I wonder?), is problematic
becuse the thread has no way to clean up or free resources which can
lead to memory leaks.

Finally, `pthread_kill` does not currently work under chrome (brings
down the entire tab) so this leads me to believe that it is very
unlikely anyone is relying on the feature.

Fixes: #14872
5 files changed
tree: d032a78aa8cd57453c557c3f09761f907543a2a0
  1. .circleci/
  2. .github/
  3. cmake/
  4. docs/
  5. media/
  6. site/
  7. src/
  8. system/
  9. tests/
  10. third_party/
  11. tools/
  12. .clang-format
  13. .coveragerc
  14. .editorconfig
  15. .eslintrc.yml
  16. .flake8
  17. .gitattributes
  18. .gitignore
  19. .gitmodules
  20. .style.yapf
  21. AUTHORS
  22. ChangeLog.md
  23. CONTRIBUTING.md
  24. em++
  25. em++.bat
  26. em++.py
  27. em-config
  28. em-config.bat
  29. em-config.py
  30. emar
  31. emar.bat
  32. emar.py
  33. embuilder
  34. embuilder.bat
  35. embuilder.py
  36. emcc
  37. emcc.bat
  38. emcc.py
  39. emcmake
  40. emcmake.bat
  41. emcmake.py
  42. emconfigure
  43. emconfigure.bat
  44. emconfigure.py
  45. emdump
  46. emdump.bat
  47. emdwp
  48. emdwp.bat
  49. emmake
  50. emmake.bat
  51. emmake.py
  52. emnm
  53. emnm.bat
  54. emprofile
  55. emprofile.bat
  56. emranlib
  57. emranlib.bat
  58. emranlib.py
  59. emrun
  60. emrun.bat
  61. emrun.py
  62. emscons
  63. emscons.bat
  64. emscons.py
  65. emscripten-version.txt
  66. emscripten.py
  67. emsize
  68. emsize.bat
  69. emsize.py
  70. LICENSE
  71. Makefile
  72. package-lock.json
  73. package.json
  74. README.md
  75. requirements-dev.txt
README.md

emscripten logo

Main project page: https://emscripten.org

GitHub CI status: CircleCI

Chromium builder status: emscripten-releases

Overview

Emscripten compiles C and C++ to WebAssembly using LLVM and Binaryen. Emscripten output can run on the Web, in Node.js, and in wasm runtimes.

Emscripten provides Web support for popular portable APIs such as OpenGL and SDL2, allowing complex graphical native applications to be ported, such as the Unity game engine and Google Earth. It can probably port your codebase, too!

While Emscripten mostly focuses on compiling C and C++ using Clang, it can be integrated with other LLVM-using compilers (for example, Rust has Emscripten integration, with the wasm32-unknown-emscripten and asmjs-unknown-emscripten targets).

License

Emscripten is available under 2 licenses, the MIT license and the University of Illinois/NCSA Open Source License.

Both are permissive open source licenses, with little if any practical difference between them.

The reason for offering both is that (1) the MIT license is well-known and suitable for a compiler toolchain, while (2) LLVM‘s original license, the University of Illinois/NCSA Open Source License, was also offered to allow Emscripten’s code to be integrated upstream into LLVM. The second reason became less important after Emscripten switched to the LLVM wasm backend, at which point there isn't any code we expect to move back and forth between the projects; also, LLVM relicensed to Apache 2.0 + exceptions meanwhile. In practice you can just consider Emscripten as MIT licensed (which allows you to do pretty much anything you want with a compiler, including commercial and non-commercial use).

See LICENSE for the full content of the licenses.