| From: | "Magnus Hagander" <mha(at)sollentuna(dot)net> |
|---|---|
| To: | "Tom Lane" <tgl(at)sss(dot)pgh(dot)pa(dot)us> |
| Cc: | <pgsql-hackers-win32(at)postgresql(dot)org> |
| Subject: | Re: Win32 open items |
| Date: | 2004-10-26 15:07:45 |
| Message-ID: | 6BCB9D8A16AC4241919521715F4D8BCE476012@algol.sollentuna.se |
| Views: | Whole Thread | Raw Message | Download mbox | Resend email |
| Thread: | |
| Lists: | 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
| From | Date | Subject | |
|---|---|---|---|
| Next Message | Andrew Dunstan | 2004-10-26 15:34:46 | Re: pg_ctl strangeness under msys |
| Previous Message | Tom Lane | 2004-10-26 14:41:09 | Re: Win32 open items |