Обсуждение: pgsql/src/interfaces/libpq (fe-connect.c)
Date: Monday, December 18, 2000 @ 12:33:42
Author: tgl
Update of /home/projects/pgsql/cvsroot/pgsql/src/interfaces/libpq
from hub.org:/home/projects/pgsql/tmp/cvs-serv46276/src/interfaces/libpq
Modified Files:
fe-connect.c
----------------------------- Log Message -----------------------------
Ensure that 'errno' is saved and restored by all signal handlers that
might change it. Experimentation shows that the signal handler call
mechanism does not save/restore errno for you, at least not on Linux
or HPUX, so this is definitely a real risk.
* tgl@postgresql.org <tgl@postgresql.org> [001218 09:34] wrote: > Date: Monday, December 18, 2000 @ 12:33:42 > Author: tgl > > Update of /home/projects/pgsql/cvsroot/pgsql/src/interfaces/libpq > from hub.org:/home/projects/pgsql/tmp/cvs-serv46276/src/interfaces/libpq > > Modified Files: > fe-connect.c > > ----------------------------- Log Message ----------------------------- > > Ensure that 'errno' is saved and restored by all signal handlers that > might change it. Experimentation shows that the signal handler call > mechanism does not save/restore errno for you, at least not on Linux > or HPUX, so this is definitely a real risk. I'm not sure why you're doing this, if someone calls PQrequestCancel, they shouldn't expect it to preserve errno. Afaik you're not responcible for saving/restoring errno on all entries to a userland library, users should know to check beforehand. -- -Alfred Perlstein - [bright@wintelcom.net|alfred@freebsd.org] "I have the heart of a child; I keep it in a jar on my desk."
Alfred Perlstein <bright@wintelcom.net> writes:
>> Ensure that 'errno' is saved and restored by all signal handlers that
>> might change it.
> I'm not sure why you're doing this, if someone calls PQrequestCancel,
> they shouldn't expect it to preserve errno.
PQrequestCancel is designed and documented to be callable from user
signal handlers, so it seems like good defensive programming to make
it save/restore errno.
regards, tom lane