ecpg PREPARE is not thread safe - Mailing list pgsql-hackers

From ITAGAKI Takahiro
Subject ecpg PREPARE is not thread safe
Date
Msg-id 20070921103313.68C4.ITAGAKI.TAKAHIRO@oss.ntt.co.jp
Whole thread Raw
Responses Re: ecpg PREPARE is not thread safe
List pgsql-hackers
Hi,

I encountered segfaults in a multi-threaded ecpg application. It uses
PREPARE statements concurrently in several threads. The cause seems to
be the global variable 'prep_stmts' in ecpg/ecpglib/prepare.c .
It is accessed without any locks.

I'm trying to fix it, but there are some approaches to fix it.  1. Add a giant lock to protect prep_stmts.  2. Put
prep_stmtsinto TSD (Thread Specific Data).  3. Put prep_stmts into connection specific data.
 

I think the proper approach is 3, because server-side prepared statements
are independent in each connection. For that matter, are there any problems
in current codes? Prepared statements are managed with a single list in it.
Even if we have some kinds of exclusive controls, current ecpg might not
good at prepared statements when we use multiple connections in a signle
thread or do multiple PREPARE in multiple threads. If so, 1 and 2 are not
correct fixes.

Regards,
---
ITAGAKI Takahiro
NTT Open Source Software Center



pgsql-hackers by date:

Previous
From: Tom Lane
Date:
Subject: Re: HOT is applied
Next
From: Tom Lane
Date:
Subject: Re: HOT is applied