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
|
Список | 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 по дате отправления: