diff options
author | Yee Cheng Chin <ychin.git@gmail.com> | 2023-09-01 18:46:17 +0200 |
---|---|---|
committer | Christian Brabandt <cb@256bit.org> | 2023-09-01 18:46:17 +0200 |
commit | 7a9d1aa878d8724e28893b968016b86a3a70c63f (patch) | |
tree | 11102172dc30b90932c5a85bda1183f48b27b59c | |
parent | f6fc255e8d9c46a0e51e03f16a508833d309dee6 (diff) |
patch 9.0.1835: Perl interface has problems with load PL_current_contextv9.0.1835
Problem: Perl interface has problems with load PL_current_context
Solution: Fix Perl interface to load PL_current_context from library
In #12914, in order to fix an issue with Perl 5.36 dynamic builds, (that
version introduced a thread-local `PL_current_context`), the file added
the variable manually so we can satisfy the linker. However, the
variable is a different one from the one in the library, so there could
be unpredictable behavior. Instead, just use `dlsym` to load the context
from the library. The fact that it's thread-local doesn't matter too
much to us because Vim's interface is single-threaded so it will work
properly.
closes: #12996
Signed-off-by: Christian Brabandt <cb@256bit.org>
Co-authored-by: Yee Cheng Chin <ychin.git@gmail.com>
-rw-r--r-- | src/if_perl.xs | 13 | ||||
-rw-r--r-- | src/version.c | 2 |
2 files changed, 11 insertions, 4 deletions
diff --git a/src/if_perl.xs b/src/if_perl.xs index 879ee2d646..a5b3f285b9 100644 --- a/src/if_perl.xs +++ b/src/if_perl.xs @@ -315,6 +315,9 @@ typedef int perl_key; # define PL_thr_key *dll_PL_thr_key # endif # endif +# ifdef PERL_USE_THREAD_LOCAL +# define PL_current_context *dll_PL_current_context +# endif # define Perl_hv_iternext_flags dll_Perl_hv_iternext_flags # define Perl_hv_iterinit dll_Perl_hv_iterinit # define Perl_hv_iterkey dll_Perl_hv_iterkey @@ -484,6 +487,9 @@ static GV** (*Perl_Ierrgv_ptr)(register PerlInterpreter*); static SV* (*Perl_Isv_yes_ptr)(register PerlInterpreter*); static perl_key* (*Perl_Gthr_key_ptr)_((pTHX)); # endif +# ifdef PERL_USE_THREAD_LOCAL +static void** dll_PL_current_context; +# endif static void (*boot_DynaLoader)_((pTHX_ CV*)); static HE * (*Perl_hv_iternext_flags)(pTHX_ HV *, I32); static I32 (*Perl_hv_iterinit)(pTHX_ HV *); @@ -633,6 +639,9 @@ static struct { # ifdef USE_ITHREADS {"PL_thr_key", (PERL_PROC*)&dll_PL_thr_key}, # endif +# ifdef PERL_USE_THREAD_LOCAL + {"PL_current_context", (PERL_PROC*)&dll_PL_current_context}, +# endif # else {"Perl_Idefgv_ptr", (PERL_PROC*)&Perl_Idefgv_ptr}, {"Perl_Ierrgv_ptr", (PERL_PROC*)&Perl_Ierrgv_ptr}, @@ -1516,10 +1525,6 @@ IV Perl_sv_2iv_flags(pTHX_ SV* sv, I32 flags) } # endif -# ifdef PERL_USE_THREAD_LOCAL -PERL_THREAD_LOCAL void *PL_current_context; -# endif - #endif // DYNAMIC_PERL XS(boot_VIM); diff --git a/src/version.c b/src/version.c index 658bf608ef..71d71b7bb3 100644 --- a/src/version.c +++ b/src/version.c @@ -700,6 +700,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 1835, +/**/ 1834, /**/ 1833, |