Re: pl/perl extension fails on Windows

From: Andrew Dunstan <andrew(at)dunslane(dot)net>
To: Muralikrishna Bandaru <muralikrishna(dot)bandaru(at)enterprisedb(dot)com>
Cc: pgsql-bugs(at)lists(dot)postgresql(dot)org
Subject: Re: pl/perl extension fails on Windows
Date: 2024-09-11 11:36:33
Message-ID: aea5b741-701d-420d-955a-148b7d112a85@dunslane.net
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-bugs


On 2024-09-11 We 3:37 AM, Muralikrishna Bandaru wrote:
>
>
> On Tue, Sep 10, 2024 at 7:17 PM Andrew Dunstan <andrew(at)dunslane(dot)net>
> wrote:
>
>
> On 2024-09-10 Tu 7:51 AM, Andrew Dunstan wrote:
>>
>>
>> On 2024-09-10 Tu 6:20 AM, Muralikrishna Bandaru wrote:
>>> Hi,
>>> I built PG17 rc1 using meson on Windows with the option
>>> "-Dplperl=enabled" . When I tried to create the extension,it
>>> crashed the database.
>>> --
>>> postgres=# create extension plperl;
>>> server closed the connection unexpectedly
>>>         This probably means the server terminated abnormally
>>>         before or while processing the request.
>>> The connection to the server was lost. Attempting reset: Succeeded.
>>>
>>> The log contains the following error.
>>>
>>> *src/pl/plperl/Util.c: loadable library and perl binaries are
>>> mismatched (got first handshake key 0000000012d00080, needed
>>> 0000000012c00080)*
>>> --
>>> This issue is seen with strawberry perl *5.40* not with *5.38* .
>>> The Perl that is used during compilation and on the target
>>> machine is the same.
>>>
>>> I have used strawberry perl 5.40 , which is available in the
>>> strawberry perl home page <https://strawberryperl.com/> ,but 
>>> 5.40 is not available in the release page
>>> <https://strawberryperl.com/releases.html> . So, is it
>>> recommended to use  perl 5.40 ?
>>>
>>> Please let me know if you need any other information.
>>
>>
>> We've seen similar things before. See for example:
>>
>> https://postgr.es/m/20211005004334.tgjmro4kuachwiuc@alap3.anarazel.de
>> https://postgr.es/m/c2da86a0-2906-744c-923d-16da6047875e@dunslane.net
>>
>> This looks like we are defining something we should not be, or
>> not defining something we should be. We just need to find out
>> what it is :-)
>>
>> In the meantime, I would suggest sticking to 5.38.
>>
>>
>>
>
>
> Now I've had a chance to take a look I see that Strawberry 5.40
> has USE_THREAD_SAFE_LOCALE defined. Can you try what happens with
> 5.40 if you comment out theses lines in meson.build?
>
>
>       if cc.get_id() == 'msvc'
>         # prevent binary mismatch between MSVC built plperl and
> Strawberry or
>         # msys ucrt perl libraries
>         perl_ccflags += ['-DNO_THREAD_SAFE_LOCALE']
>       endif
>
>
> Hi Andrew,
> Thanks. I commented above lines in the meson.build file and built the
> installer with  Strawberry 5.40 . Now able to create the extension.
> --
> c:\Program Files\PostgreSQL\17>bin\psql.exe -d postgres -p 5436
> psql (17rc1)
> WARNING: Console code page (437) differs from Windows code page (1252)
>          8-bit characters might not work correctly. See psql reference
>          page "Notes for Windows users" for details.
> Type "help" for help.
>
> postgres=#
> postgres=#
> postgres=# create extension plperl;
> --
> So, will this change be a part of the PG17 GA release?
>
>

Probably not. The difficulty is that it's required for some versions of
perl and breaks others. We need to come up with a reliable test for it.

Maybe we need to look at the output of `perl -V` and only output the
flag if it doesn't contain USE_THREAD_SAFE_LOCALE. If anyone has a
better idea I am all ears.

It's kind of annoying that this could tie us so closely to a particular
perl binary.

cheers

andrew

--
Andrew Dunstan
EDB:https://www.enterprisedb.com

In response to

Responses

Browse pgsql-bugs by date

  From Date Subject
Next Message Tomas Vondra 2024-09-11 12:08:23 Re: BUG #18598: AddressSanitizer detects use after free inside json_unique_hash_match()
Previous Message Thomas Munro 2024-09-11 09:55:45 Re: BUG #18610: llvm error: __aarch64_swp4_acq_rel which could not be resolved