Обсуждение: Failure to exit critical section on error case

Поиск
Список
Период
Сортировка

Failure to exit critical section on error case

От
Craig Ringer
Дата:
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


Re: Failure to exit critical section on error case

От
Heikki Linnakangas
Дата:
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