Andrew Chernow <[EMAIL PROTECTED]> writes:
>> 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 think #1 is mostly going to complicate life for both libpq and callers
--- libpq has to deal with generating the handles (threading issues
here) and callers have to remember them somewhere.  And it's not even
clear to me that it fixes the problem: wouldn't you get two different
handles if you supplied the internal and external addresses of an
eventproc?

On the whole I vote for #4 out of these.  I was just wondering whether
there were any better alternatives, and it seems there's not.

                        regards, tom lane

-- 
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

Reply via email to