Search Postgresql Archives

Re: Postgres 8.3.5 - ECPG and the use of descriptors and cursors in multi-threaded programs

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Leif Jensen wrote:
> 
> This seems to be working most of the time, but looking at the generated C
> code from the ecpg compiler and the associated library functions, we are
> not sure whether we should put mutex locks around the 'select' part to
> avoid several threads are using "the same" execdesc at the same time.
> 
> We have made sure that each thread uses their own and only their own
> database connection, but are unsure whether the ecpg library functions is
> able to handle multiple use of the statical name "execdesc" ?

You are most probably trashing memory by using the same descriptor name in
multiple threads.  However, given that you have already spent the effort to
have the connections 'thread-dedicated' I think that rather than creating a
critical path through an area that is intentionally supposed to be mutli-
hreaded, I'd be inclined to use the connection name (or some derivation of
it) as the name of the descriptor.  I haven't used descriptors in ecpg so I
don't know if the syntax works, but you could try:

    exec sql char *dname = _thisDbConn;  // Or some derivation

    EXEC SQL AT :_thisDbConn ALLOCATE DESCRIPTOR :dname;
    ...
    EXEC SQL AT :_thisDbConn FETCH IN execcurs INTO SQL DESCRIPTOR :dname;
    ...
    EXEC SQL DEALLOCATE DESCRIPTOR :dname;


Just a thought.

Bosco.

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


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Postgresql Jobs]     [Postgresql Admin]     [Postgresql Performance]     [Linux Clusters]     [PHP Home]     [PHP on Windows]     [Kernel Newbies]     [PHP Classes]     [PHP Books]     [PHP Databases]     [Postgresql & PHP]     [Yosemite]
  Powered by Linux