Is ECPG's SET CONNECTION really not thread-aware?

From: "Tsunakawa, Takayuki" <tsunakawa(dot)takay(at)jp(dot)fujitsu(dot)com>
To: "Michael Meskes (meskes(at)postgresql(dot)org)" <meskes(at)postgresql(dot)org>, "pgsql-hackers(at)postgresql(dot)org" <pgsql-hackers(at)postgresql(dot)org>
Subject: Is ECPG's SET CONNECTION really not thread-aware?
Date: 2017-06-01 06:44:37
Message-ID: 0A3221C70F24FB45833433255569204D1F71CE45@G01JPEXMBYT05
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

Hello,

The following page says:

https://www.postgresql.org/docs/devel/static/ecpg-connect.html#ecpg-set-connection

--------------------------------------------------
EXEC SQL AT connection-name SELECT ...;

If your application uses multiple threads of execution, they cannot share a connection concurrently. You must either explicitly control access to the connection (using mutexes) or use a connection for each thread. If each thread uses its own connection, you will need to use the AT clause to specify which connection the thread will use.

EXEC SQL SET CONNECTION connection-name;

...It is not thread-aware.
--------------------------------------------------

What does this mean by "not thread-aware?" Does SET CONNECTION in one thread change the current connection in another thread?
It doesn't look so, because the connection management and SQL execution in ECPG uses thread-specific data (TSD) to get and set the current connection, like this:

bool
ECPGsetconn(int lineno, const char *connection_name)
{
struct connection *con = ecpg_get_connection(connection_name);

if (!ecpg_init(con, connection_name, lineno))
return (false);

#ifdef ENABLE_THREAD_SAFETY
pthread_setspecific(actual_connection_key, con);
#else
actual_connection = con;
#endif
return true;
}

Regards
Takayuki Tsunakawa

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message fte 2017-06-01 06:59:59 BUG #14682: row level security not work with partitioned table
Previous Message Dilip Kumar 2017-06-01 05:49:32 Re: Error while creating subscription when server is running in single user mode