Re: libpq-events windows gotcha

From: Andrew Chernow <ac(at)esilo(dot)com>
To: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
Cc: PostgreSQL-development <pgsql-hackers(at)postgresql(dot)org>
Subject: Re: libpq-events windows gotcha
Date: 2008-11-13 16:34:14
Message-ID: 491C5706.8040007@esilo.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

Andrew Chernow wrote:
> Tom Lane wrote:
>> Andrew Chernow <ac(at)esilo(dot)com> writes:
>>> Just noticed that the last libpqtypes release was broken on windows
>>> when dynamically linking. The problem is that windows has two
>>> addresses for functions, the import library uses a stub "ordinal"
>>> address while the DLL itself is using the real address; yet another
>>> m$ annoyance. This breaks the PQEventProc being used as a unique
>>> lookup value.
>>> This is a big gotcha for any libpq-events implementors. It should
>>> probably be documented in some fashion.
>>
>> Hmm. Well, it's not too late to reconsider the use of the function
>> address as a lookup key ... but what else would we use instead?
>>
>> regards, tom lane
>>
>>
>
> Here are the options we see:
>
> 1. PQregisterEventProc returns a handle, synchronized counter
> incremented by libpq. A small table could map handle value to proc
> address, so register always returns the same handle for a provided
> eventproc. Only register would take an eventproc, instanceData
> functions would take this magical handle.
>
> 2. string key, has collision issues (already been ruled out)
>
> 3. have implementors return a static variable address (doesn't seem all
> that different from returning a static funcaddr)
>
> 4. what we do now, but document loudly that PGEventProc must be static.
> If it can't be referenced outside the DLL directly then the issue can't
> arise. If you need the function address for calls to PQinstanceData, an
> implementor can create a public function that returns their private
> PGEventProc address.
>

Do you have a preference form the list above, or an another idea? If
not, we would probably implement #1. Although, the simplest thing is #4
which leaves everything as is and updates the sgml docs with a strong
warning to implementors.

I am not sure which is best.

--
Andrew Chernow
eSilo, LLC
every bit counts
http://www.esilo.com/

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Tom Lane 2008-11-13 16:55:51 Re: libpq-events windows gotcha
Previous Message Dmitry Koterov 2008-11-13 16:23:33 Sometimes pg_dump generates dump which is not restorable