Adjust signature of walrcv_receive hook.
authorTom Lane <[email protected]>
Thu, 14 Apr 2016 17:49:37 +0000 (13:49 -0400)
committerTom Lane <[email protected]>
Thu, 14 Apr 2016 17:49:37 +0000 (13:49 -0400)
Commit 314cbfc5da988eff redefined the signature of this hook as
typedef int (*walrcv_receive_type) (char **buffer, int *wait_fd);

But in fact the type of the "wait_fd" variable ought to be pgsocket,
which is what WaitLatchOrSocket expects, and which is necessary if
we want to be able to assign PGINVALID_SOCKET to it on Windows.
So fix that.

src/backend/replication/README
src/backend/replication/libpqwalreceiver/libpqwalreceiver.c
src/backend/replication/walreceiver.c
src/include/replication/walreceiver.h

index 419a2d74d734d17696a0a73774f7e78070791337..ad4864dbbeb8bfdd5c8e38f9e65daf7424d29944 100644 (file)
@@ -16,12 +16,12 @@ bool walrcv_connect(char *conninfo, XLogRecPtr startpoint)
 Establish connection to the primary, and starts streaming from 'startpoint'.
 Returns true on success.
 
-int walrcv_receive(char **buffer, int *wait_fd)
+int walrcv_receive(char **buffer, pgsocket *wait_fd)
 
 Retrieve any message available without blocking through the
 connection.  If a message was successfully read, returns its
 length. If the connection is closed, returns -1.  Otherwise returns 0
-to indicate that no data is available, and sets *wait_fd to a file
+to indicate that no data is available, and sets *wait_fd to a socket
 descriptor which can be waited on before trying again.  On success, a
 pointer to the message payload is stored in *buffer. The returned
 buffer is valid until the next call to walrcv_* functions, and the
index a3bec498fa073a32be10784c931f141421a87161..b61e39d7d8a70263f90505769f8bc0701b3cfea3 100644 (file)
@@ -52,7 +52,7 @@ static void libpqrcv_readtimelinehistoryfile(TimeLineID tli, char **filename, ch
 static bool libpqrcv_startstreaming(TimeLineID tli, XLogRecPtr startpoint,
                        char *slotname);
 static void libpqrcv_endstreaming(TimeLineID *next_tli);
-static int libpqrcv_receive(char **buffer, int *wait_fd);
+static int libpqrcv_receive(char **buffer, pgsocket *wait_fd);
 static void libpqrcv_send(const char *buffer, int nbytes);
 static void libpqrcv_disconnect(void);
 
@@ -472,14 +472,14 @@ libpqrcv_disconnect(void)
  *  until the next libpqrcv_* call.
  *
  *  If no data was available immediately, returns 0, and *wait_fd is set to a
- *  file descriptor which can be waited on before trying again.
+ *  socket descriptor which can be waited on before trying again.
  *
  *  -1 if the server ended the COPY.
  *
  * ereports on error.
  */
 static int
-libpqrcv_receive(char **buffer, int *wait_fd)
+libpqrcv_receive(char **buffer, pgsocket *wait_fd)
 {
    int         rawlen;
 
index 057c250793d2cf07aa606088e210dd11b0197740..6fd5952be711685c24c636b883f0136f56c9a659 100644 (file)
@@ -379,7 +379,7 @@ WalReceiverMain(void)
                char       *buf;
                int         len;
                bool        endofwal = false;
-               int         wait_fd = PGINVALID_SOCKET;
+               pgsocket    wait_fd = PGINVALID_SOCKET;
                int         rc;
 
                /*
index 36bcb471720806b12eb633e492445963bda3ba72..c87e7a80ad19bdfa63031b3ac2da7232900eda2f 100644 (file)
@@ -145,7 +145,7 @@ extern PGDLLIMPORT walrcv_startstreaming_type walrcv_startstreaming;
 typedef void (*walrcv_endstreaming_type) (TimeLineID *next_tli);
 extern PGDLLIMPORT walrcv_endstreaming_type walrcv_endstreaming;
 
-typedef int (*walrcv_receive_type) (char **buffer, int *wait_fd);
+typedef int (*walrcv_receive_type) (char **buffer, pgsocket *wait_fd);
 extern PGDLLIMPORT walrcv_receive_type walrcv_receive;
 
 typedef void (*walrcv_send_type) (const char *buffer, int nbytes);