Skip to content

Commit

Permalink
Temporary fix for #71. Remove when rust #48251 is fixed in stable.
Browse files Browse the repository at this point in the history
  • Loading branch information
kyren committed Feb 28, 2018
1 parent d799513 commit 5d96ddc
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 7 deletions.
19 changes: 15 additions & 4 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -18,10 +18,21 @@ default = ["builtin-lua"]
# specialized version of lua into your binary, you can disable this feature to
# do that, but care must be taken. `rlua` makes at least the following
# assumptions about the linked lua library:
# * LUA_INTEGER is long long
# * LUA_NUMBER as double
# * LUA_EXTRASPACE is sizeof(void*)
# * LUAI_MAXSTACK is 1000000
# * LUA_INTEGER is long long
# * LUA_NUMBER as double
# * LUA_EXTRASPACE is sizeof(void*)
# * LUAI_MAXSTACK is 1000000
# * LUAI_THROW / LUAI_TRY are defined so that they are compatible with jumping
# over Rust stack frames. Rust is, as of the discussion around
# https://github.com/rust-lang/rust/issues/48251, intended to be compatible in
# at least a limited way with C libraries that use setjmp / longjmp error
# handling, but there are some caveats. The linked bug prevents calling into
# C APIs which use setjmp / longjmp handling *at all* on windows with at least
# the 1.24.0 version of the rust compiler, and it remains to be seen but
# potentially the 1.24.1 and 1.25 versions as well. Eventually the fix for
# this will make it into stable rust, but until then there is a fix in the
# bundled version of Lua to use __intrinsic_setjmp on windows instead of
# setjmp to avoid unwinding and triggering rust issue #48251.
builtin-lua = ["gcc"]

[dependencies]
Expand Down
12 changes: 9 additions & 3 deletions lua/luaconf.h
Original file line number Diff line number Diff line change
Expand Up @@ -775,9 +775,15 @@
** without modifying the main part of the file.
*/




/*
** rlua modification - fix for #71, temporary until the fix for
** https://github.com/rust-lang/rust/issues/48251 is in stable rust
*/
#if defined(LUA_USE_WINDOWS)
#define LUAI_THROW(L,c) longjmp((c)->b, 1)
#define LUAI_TRY(L,c,a) if (__intrinsic_setjmp((c)->b, NULL) == 0) { a }
#define luai_jmpbuf jmp_buf
#endif

#endif

0 comments on commit 5d96ddc

Please sign in to comment.