]> git.ipfire.org Git - thirdparty/vim.git/commitdiff
patch 9.0.1835: Perl interface has problems with load PL_current_context v9.0.1835
authorYee Cheng Chin <ychin.git@gmail.com>
Fri, 1 Sep 2023 16:46:17 +0000 (18:46 +0200)
committerChristian Brabandt <cb@256bit.org>
Fri, 1 Sep 2023 16:46:17 +0000 (18:46 +0200)
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>
src/if_perl.xs
src/version.c

index 879ee2d646144caf51f52d7884413a200db30aa5..a5b3f285b91d96c1d43f48e0e38334a681861f9d 100644 (file)
@@ -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);
index 658bf608efc0cd3e3cb8558f702ab970c31beb72..71d71b7bb3a65e775e4a5c08aa6771a16321dc40 100644 (file)
@@ -699,6 +699,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    1835,
 /**/
     1834,
 /**/