Обсуждение: Failure to exit critical section on error case
Hi all
A user pointed out that after line 130 in pgxalib.c:
122 HDBC XAConnection::ActivateConnection(void)
123 {
124 RETCODE ret;
125
126 MLOCK_ACQUIRE;
127 if (!init_crit.env)
128 {
129 ret = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE,
&init_crit.env);
130 if (!SQL_SUCCEEDED(ret))
131 return NULL;
132 }
133 MLOCK_RELEASE;
we fail to MLOCK_RELEASE .
It seems like a trivial fix to just
if (!SQL_SUCCEEDED(ret))
{
MLOCK_RELEASE;
return NULL;
}
--
Craig Ringer http://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Training & Services
On 06/15/2015 11:14 AM, Craig Ringer wrote:
> Hi all
>
> A user pointed out that after line 130 in pgxalib.c:
>
> 122 HDBC XAConnection::ActivateConnection(void)
> 123 {
> 124 RETCODE ret;
> 125
> 126 MLOCK_ACQUIRE;
> 127 if (!init_crit.env)
> 128 {
> 129 ret = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE,
> &init_crit.env);
> 130 if (!SQL_SUCCEEDED(ret))
> 131 return NULL;
> 132 }
> 133 MLOCK_RELEASE;
>
> we fail to MLOCK_RELEASE .
>
> It seems like a trivial fix to just
>
> if (!SQL_SUCCEEDED(ret))
> {
> MLOCK_RELEASE;
> return NULL;
> }
>
Fixed, thanks.
- Heikki