Re: libpq-events windows gotcha

Поиск
Список
Период
Сортировка
От Andrew Chernow
Тема Re: libpq-events windows gotcha
Дата
Msg-id 491D6BF3.9030700@esilo.com
обсуждение исходный текст
Ответ на Re: libpq-events windows gotcha  (Tom Lane <tgl@sss.pgh.pa.us>)
Ответы Re: libpq-events windows gotcha  (Tom Lane <tgl@sss.pgh.pa.us>)
Список pgsql-hackers
>>>
>>> 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.
>
> On the whole I vote for #4 out of these.
>

I attached a patch for the docs.  Its documented as a NOTE to the
PGEventProc.

--
Andrew Chernow
eSilo, LLC
every bit counts
http://www.esilo.com/
Index: doc/src/sgml/libpq.sgml
===================================================================
RCS file: /projects/cvsroot/pgsql/doc/src/sgml/libpq.sgml,v
retrieving revision 1.269
diff -C6 -r1.269 libpq.sgml
*** doc/src/sgml/libpq.sgml    13 Nov 2008 09:45:24 -0000    1.269
--- doc/src/sgml/libpq.sgml    14 Nov 2008 12:08:07 -0000
***************
*** 5252,5263 ****
--- 5252,5275 ----

        <para>
         A particular event procedure can be registered only once in any
         <structname>PGconn</>.  This is because the address of the procedure
         is used as a lookup key to identify the associated instance data.
        </para>
+
+       <note>
+        <para>
+         On windows, functions can have two different addresses: one accessed
+         from outside a DLL, obtained from the import library, and another from
+         inside a DLL.  For this reason, implementors should never directly expose
+         an event procedure.  If the event procedure is needed by an API user,
+         then its address should be returned by a library function; ie.
+         <literal>PGEventProc MyGetEventProc(void);</literal>.  This ensures that
+         the application and DLL are always using the same address.
+        </para>
+       </note>
       </listitem>
      </varlistentry>
     </variablelist>
    </sect2>

    <sect2 id="libpq-events-funcs">

В списке pgsql-hackers по дате отправления:

Предыдущее
От: Alvaro Herrera
Дата:
Сообщение: Re: gram.y => preproc.y
Следующее
От: Michael Meskes
Дата:
Сообщение: Re: gram.y => preproc.y