diff options
author | Marc G. Fournier <scrappy@hub.org> | 1998-07-09 03:29:11 +0000 |
---|---|---|
committer | Marc G. Fournier <scrappy@hub.org> | 1998-07-09 03:29:11 +0000 |
commit | a0659e3e2c79be49feb4aa527d823c71d7bcaf07 (patch) | |
tree | 7dc58e872cdfce999dd0848000fcd3f2e4edbafa /src/backend/libpq/pqpacket.c | |
parent | 8bf61820f033d7df0e89433a0272d7b2567378b8 (diff) | |
download | postgresql-a0659e3e2c79be49feb4aa527d823c71d7bcaf07.tar.gz postgresql-a0659e3e2c79be49feb4aa527d823c71d7bcaf07.zip |
From: Tom Lane <tgl@sss.pgh.pa.us>
Making PQrequestCancel safe to call in a signal handler turned out to be
much easier than I feared. So here are the diffs.
Some notes:
* I modified the postmaster's packet "iodone" callback interface to allow
the callback routine to return a continue-or-drop-connection return
code; this was necessary to allow the connection to be closed after
receiving a Cancel, rather than proceeding to launch a new backend...
Being a neatnik, I also made the iodone proc have a typechecked
parameter list.
* I deleted all code I could find that had to do with OOB.
* I made some edits to ensure that all signals mentioned in the code
are referred to symbolically not by numbers ("SIGUSR2" not "2").
I think Bruce may have already done at least some of the same edits;
I hope that merging these patches is not too painful.
Diffstat (limited to 'src/backend/libpq/pqpacket.c')
-rw-r--r-- | src/backend/libpq/pqpacket.c | 18 |
1 files changed, 10 insertions, 8 deletions
diff --git a/src/backend/libpq/pqpacket.c b/src/backend/libpq/pqpacket.c index 97caae952ac..631af78ce29 100644 --- a/src/backend/libpq/pqpacket.c +++ b/src/backend/libpq/pqpacket.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/libpq/Attic/pqpacket.c,v 1.15 1998/02/26 04:31:56 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/libpq/Attic/pqpacket.c,v 1.16 1998/07/09 03:28:46 scrappy Exp $ * *------------------------------------------------------------------------- */ @@ -33,7 +33,7 @@ * Set up a packet read for the postmaster event loop. */ -void PacketReceiveSetup(Packet *pkt, void (*iodone) (), char *arg) +void PacketReceiveSetup(Packet *pkt, PacketDoneProc iodone, void *arg) { pkt->nrtodo = sizeof(pkt->len); pkt->ptr = (char *) &pkt->len; @@ -94,8 +94,8 @@ PacketReceiveFragment(Packet *pkt, int sock) if (pkt->iodone == NULL) return STATUS_ERROR; - (*pkt->iodone) (pkt->arg, pkt->len - sizeof(pkt->len), - (char *) &pkt->pkt); + return (*pkt->iodone) (pkt->arg, pkt->len - sizeof(pkt->len), + (void *) &pkt->pkt); } return STATUS_OK; @@ -107,7 +107,7 @@ PacketReceiveFragment(Packet *pkt, int sock) if (errno == EINTR) return STATUS_OK; - fprintf(stderr, "read() system call failed\n"); + perror("PacketReceiveFragment: read() failed"); return STATUS_ERROR; } @@ -117,8 +117,9 @@ PacketReceiveFragment(Packet *pkt, int sock) * Set up a packet write for the postmaster event loop. */ -void PacketSendSetup(Packet *pkt, int nbytes, void (*iodone) (), char *arg) +void PacketSendSetup(Packet *pkt, int nbytes, PacketDoneProc iodone, void *arg) { + pkt->len = (PacketLen) nbytes; pkt->nrtodo = nbytes; pkt->ptr = (char *) &pkt->pkt; pkt->iodone = iodone; @@ -153,7 +154,8 @@ PacketSendFragment(Packet *pkt, int sock) if (pkt->iodone == NULL) return STATUS_ERROR; - (*pkt->iodone) (pkt->arg); + return (*pkt->iodone) (pkt->arg, pkt->len, + (void *) &pkt->pkt); } return STATUS_OK; @@ -165,7 +167,7 @@ PacketSendFragment(Packet *pkt, int sock) if (errno == EINTR) return STATUS_OK; - fprintf(stderr, "write() system call failed\n"); + perror("PacketSendFragment: write() failed"); return STATUS_ERROR; } |