]> git.ipfire.org Git - thirdparty/postgresql.git/commitdiff
Fix binary mismatch for MSVC plperl vs gcc built perl libs
authorAndrew Dunstan <andrew@dunslane.net>
Sun, 27 Nov 2022 14:03:22 +0000 (09:03 -0500)
committerAndrew Dunstan <andrew@dunslane.net>
Sun, 27 Nov 2022 14:18:46 +0000 (09:18 -0500)
When loading plperl built against Strawberry perl or the msys2 ucrt perl
that have been built with gcc, a binary mismatch has been encountered
which looks like this:

loadable library and perl binaries are mismatched (got handshake key 0000000012800080, needed 0000000012900080)

To cure this we bring the handshake keys into sync by adding
NO_THREAD_SAFE_LOCALE to the defines used to build plperl.

Discussion: https://postgr.es/m/20211005004334.tgjmro4kuachwiuc@alap3.anarazel.de
Discussion: https://postgr.es/m/c2da86a0-2906-744c-923d-16da6047875e@dunslane.net

Backpatch to all live branches.

src/tools/msvc/Mkvcbuild.pm

index e08ea61cfb59fc95f2de7caeac7efbaa12193d3a..b52baa9098845e27c434079c388fe27c4d721f36 100644 (file)
@@ -563,6 +563,9 @@ sub mkvcbuild
 
                # hack to prevent duplicate definitions of uid_t/gid_t
                push(@perl_embed_ccflags, 'PLPERL_HAVE_UID_GID');
+               # prevent binary mismatch between MSVC built plperl and
+               # Strawberry or msys ucrt perl libraries
+               push(@perl_embed_ccflags, 'NO_THREAD_SAFE_LOCALE');
 
                # Windows offers several 32-bit ABIs.  Perl is sensitive to
                # sizeof(time_t), one of the ABI dimensions.  To get 32-bit time_t,