Обсуждение: 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