Re: Win32 open items

Поиск
Список
Период
Сортировка
От Magnus Hagander
Тема Re: Win32 open items
Дата
Msg-id 6BCB9D8A16AC4241919521715F4D8BCE476012@algol.sollentuna.se
обсуждение исходный текст
Список pgsql-hackers-win32
> > The problem with this is that PQrequestCancel() is not thread-safe.
>
> What is your basis for asserting that?

Looking at the source code?

We are talking about two different threads *accessing the same PGconn*.
For example:
    if (conn->sock < 0)
    {
        strcpy(conn->errorMessage.data,
               "PQrequestCancel() -- connection is not
open\n");
        conn->errorMessage.len =
strlen(conn->errorMessage.data);
#ifdef WIN32
        WSASetLastError(save_errno);
#else
        errno = save_errno;
#endif
        return FALSE;
    }

What if another thread is modifying or reading the errorMessage variable
at the same time? Or what if another thread just PQfinished() the entire
conenction, which causes a free() call? None of this stuff is
thread-protected...

It may be re-entrant-safe, but I don't beleive it's thread safe. libpq
in general is only thread safe as long as a single connection is only
used on a single thread.

//Magnus

В списке pgsql-hackers-win32 по дате отправления:

Предыдущее
От: Tom Lane
Дата:
Сообщение: Re: Win32 open items
Следующее
От: Andrew Dunstan
Дата:
Сообщение: Re: pg_ctl strangeness under msys