-
Notifications
You must be signed in to change notification settings - Fork 89
Use a custom condition variable implementation #787
New issue
Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? # to your account
Conversation
condition variable has a bug: https://sourceware.org/bugzilla/show_bug.cgi?id=25847 We were able to reproduce the bug even with the one line mitigation patch, but using a custom condition variable seems to work.
@stedolan has looked at the tricky part of this, I will also read it. |
…g against glibc. Continue to use pthread on other platforms.
We know there is an exceptionally small chance of a wakeup being lost in this implementation due to integer overflow, but it seems so unlikely as to be negligible. I've done some initial testing which I think looks ok and the implementation looks correct. I'm going to merge this so a substantial amount more testing gets done, but will have to revert if any problems show up. |
25188da flambda-backend: Missed comment from PR802 (ocaml-flambda#887) 9469765 flambda-backend: Improve the semantics of asynchronous exceptions (new simpler version) (ocaml-flambda#802) d9e4dd0 flambda-backend: Fix `make runtest` on NixOS (ocaml-flambda#874) 4bbde7a flambda-backend: Simpler symbols (ocaml-flambda#753) ef37262 flambda-backend: Add opaqueness to Obj.magic under Flambda 2 (ocaml-flambda#862) a9616e9 flambda-backend: Add build system hooks for ocaml-jst (ocaml-flambda#869) 045ef67 flambda-backend: Allow the compiler to build with stock Dune (ocaml-flambda#868) 3cac5be flambda-backend: Simplify Makefile logic for natdynlinkops (ocaml-flambda#866) c5b12bf flambda-backend: Remove unnecessary install lines (ocaml-flambda#860) ff12bbe flambda-backend: Fix unused variable warning in st_stubs.c (ocaml-flambda#861) c84976c flambda-backend: Static check for noalloc: attributes (ocaml-flambda#825) ca56052 flambda-backend: Build system refactoring for ocaml-jst (ocaml-flambda#857) 39eb7f9 flambda-backend: Remove integer comparison involving nonconstant polymorphic variants (ocaml-flambda#854) c102688 flambda-backend: Fix soundness bug by using currying information from typing (ocaml-flambda#850) 6a96b61 flambda-backend: Add a primitive to enable/disable the tick thread (ocaml-flambda#852) f64370b flambda-backend: Make Obj.dup use a new primitive, %obj_dup (ocaml-flambda#843) 9b78eb2 flambda-backend: Add test for ocaml-flambda#820 (include functor soundness bug) (ocaml-flambda#841) 8f24346 flambda-backend: Add `-dtimings-precision` flag (ocaml-flambda#833) 65c2f22 flambda-backend: Add test for ocaml-flambda#829 (ocaml-flambda#831) 7b27a49 flambda-backend: Follow-up PR#829 (comballoc fixes for locals) (ocaml-flambda#830) ad7ec10 flambda-backend: Use a custom condition variable implementation (ocaml-flambda#787) 3ee650c flambda-backend: Fix soundness bug in include functor (ocaml-flambda#820) 2f57378 flambda-backend: Static check noalloc (ocaml-flambda#778) aaad625 flambda-backend: Emit begin/end region only when stack allocation is enabled (ocaml-flambda#812) 17c7173 flambda-backend: Fix .cmt for included signatures (ocaml-flambda#803) e119669 flambda-backend: Increase delays in tests/lib-threads/beat.ml (ocaml-flambda#800) ccc356d flambda-backend: Prevent dynamic loading of the same .cmxs twice in private mode, etc. (ocaml-flambda#784) 14eb572 flambda-backend: Make local extension point equivalent to local_ expression (ocaml-flambda#790) 487d11b flambda-backend: Fix tast_iterator and tast_mapper for include functor. (ocaml-flambda#795) a50a818 flambda-backend: Reduce closure allocation in List (ocaml-flambda#792) 96c9c60 flambda-backend: Merge ocaml-jst a775b88 flambda-backend: Fix ocaml/otherlibs/unix 32-bit build (ocaml-flambda#767) f7c2679 flambda-backend: Create object files internally to avoid invoking GAS (ocaml-flambda#757) c7a46bb flambda-backend: Bugfix for Cmmgen.expr_size with locals (ocaml-flambda#756) b337cb6 flambda-backend: Fix build_upstream for PR749 (ocaml-flambda#750) 8e7e81c flambda-backend: Differentiate is_int primitive between generic and variant-only versions (ocaml-flambda#749) git-subtree-dir: ocaml git-subtree-split: 25188da
This should fix hangs due to this bug in glibc:
https://sourceware.org/bugzilla/show_bug.cgi?id=25847
It implements a simple condition variable that is much easier to reason about. In our tests this didn't hang when pthread_cond did hang.