Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Skip to content

Commit 2fac57a

Browse files
committed
Fix intialization of RDMS when both pgcommon and pgcommon_srv libraries are loaded in the same process
1 parent 0af25f6 commit 2fac57a

File tree

3 files changed

+26
-18
lines changed

3 files changed

+26
-18
lines changed

contrib/mmts/pglogical_receiver.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -663,7 +663,8 @@ pglogical_receiver_main(Datum main_arg)
663663
timeout.tv_usec = usecs;
664664
timeoutptr = &timeout;
665665

666-
r = pg_select(PQsocket(conn) + 1, &input_mask, NULL, NULL, timeoutptr, conn->isRsocket);
666+
r = PQselect(PQsocket(conn) + 1, &input_mask, NULL, NULL, timeoutptr,
667+
PQisRsocket(conn));
667668
if (r == 0)
668669
{
669670
int64 now = feGetCurrentTimestamp();

src/common/pg_rsocket.c

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,10 +49,17 @@
4949
#define RDMACM_NAME "librdmacm.so.1"
5050

5151
/* Declarations of rsocket functions */
52-
PgSocketCall *rcalls = NULL;
52+
static PgSocketCall *rcalls = NULL;
5353

5454
static void *rdmacm_handle = NULL;
5555

56+
PgSocketCall * pg_sock_vtab(void)
57+
{
58+
if (!rcalls)
59+
initialize_rsocket();
60+
return rcalls;
61+
}
62+
5663
/*
5764
* Returns pointer to the function of the library
5865
*/

src/include/common/pg_socket.h

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -73,72 +73,72 @@ typedef struct PgSocketCall
7373
int (*fcntl) (int socket, int cmd, ... /* arg */ );
7474
} PgSocketCall;
7575

76-
extern PgSocketCall *rcalls;
76+
extern PgSocketCall *pg_sock_vtab(void);
7777

7878
/*
7979
* These macroses call socket function depending on isRsocket value
8080
*/
8181

8282
#define pg_fcntl(fd, flag, value, isRsocket) \
83-
((isRsocket) ? rcalls->fcntl(fd, flag, value) : \
83+
((isRsocket) ? pg_sock_vtab()->fcntl(fd, flag, value) : \
8484
fcntl(fd, flag, value))
8585

8686
#define pg_socket(domain, type, protocol, isRsocket) \
87-
((isRsocket) ? rcalls->socket(domain, type, protocol) : \
87+
((isRsocket) ? pg_sock_vtab()->socket(domain, type, protocol) : \
8888
socket(domain, type, protocol))
8989

9090
#define pg_bind(socket, addr, addrlen, isRsocket) \
91-
((isRsocket) ? rcalls->bind(socket, addr, addrlen) : \
91+
((isRsocket) ? pg_sock_vtab()->bind(socket, addr, addrlen) : \
9292
bind(socket, addr, addrlen))
9393

9494
#define pg_listen(socket, backlog, isRsocket) \
95-
((isRsocket) ? rcalls->listen(socket, backlog) : \
95+
((isRsocket) ? pg_sock_vtab()->listen(socket, backlog) : \
9696
listen(socket, backlog))
9797

9898
#define pg_accept(socket, addr, addrlen, isRsocket) \
99-
((isRsocket) ? rcalls->accept(socket, addr, addrlen) : \
99+
((isRsocket) ? pg_sock_vtab()->accept(socket, addr, addrlen) : \
100100
accept(socket, addr, addrlen))
101101

102102
#define pg_connect(socket, addr, addrlen, isRsocket) \
103-
((isRsocket) ? rcalls->connect(socket, addr, addrlen) : \
103+
((isRsocket) ? pg_sock_vtab()->connect(socket, addr, addrlen) : \
104104
connect(socket, addr, addrlen))
105105

106106
#define pg_closesocket(socket, isRsocket) \
107-
((isRsocket) ? rcalls->close(socket) : \
107+
((isRsocket) ? pg_sock_vtab()->close(socket) : \
108108
closesocket(socket))
109109

110110
#define pg_recv(socket, buf, len, flags, isRsocket) \
111-
((isRsocket) ? rcalls->recv(socket, buf, len, flags) : \
111+
((isRsocket) ? pg_sock_vtab()->recv(socket, buf, len, flags) : \
112112
recv(socket, buf, len, flags))
113113

114114
#define pg_send(socket, buf, len, flags, isRsocket) \
115-
((isRsocket) ? rcalls->send(socket, buf, len, flags) : \
115+
((isRsocket) ? pg_sock_vtab()->send(socket, buf, len, flags) : \
116116
send(socket, buf, len, flags))
117117

118118
#define pg_sendmsg(socket, msg, flags, isRsocket) \
119-
((isRsocket) ? rcalls->sendmsg(socket, msg, flags) : \
119+
((isRsocket) ? pg_sock_vtab()->sendmsg(socket, msg, flags) : \
120120
sendmsg(socket, msg, flags))
121121

122122
#ifdef HAVE_POLL
123123
#define pg_poll(fds, nfds, timeout, isRsocket) \
124-
((isRsocket) ? rcalls->poll(fds, nfds, timeout) : \
124+
((isRsocket) ? pg_sock_vtab()->poll(fds, nfds, timeout) : \
125125
poll(fds, nfds, timeout))
126126
#endif
127127

128128
#define pg_select(nfds, readfds, writefds, exceptfds, timeout, isRsocket) \
129-
((isRsocket) ? rcalls->select(nfds, readfds, writefds, exceptfds, timeout) : \
129+
((isRsocket) ? pg_sock_vtab()->select(nfds, readfds, writefds, exceptfds, timeout) : \
130130
select(nfds, readfds, writefds, exceptfds, timeout))
131131

132132
#define pg_getsockname(socket, addr, addrlen, isRsocket) \
133-
((isRsocket) ? rcalls->getsockname(socket, addr, addrlen) : \
133+
((isRsocket) ? pg_sock_vtab()->getsockname(socket, addr, addrlen) : \
134134
getsockname(socket, addr, addrlen))
135135

136136
#define pg_setsockopt(socket, level, optname, optval, optlen, isRsocket) \
137-
((isRsocket) ? rcalls->setsockopt(socket, level, optname, optval, optlen) : \
137+
((isRsocket) ? pg_sock_vtab()->setsockopt(socket, level, optname, optval, optlen) : \
138138
setsockopt(socket, level, optname, optval, optlen))
139139

140140
#define pg_getsockopt(socket, level, optname, optval, optlen, isRsocket) \
141-
((isRsocket) ? rcalls->getsockopt(socket, level, optname, optval, optlen) : \
141+
((isRsocket) ? pg_sock_vtab()->getsockopt(socket, level, optname, optval, optlen) : \
142142
getsockopt(socket, level, optname, optval, optlen))
143143

144144
/* port/pg_rsocket.c */

0 commit comments

Comments
 (0)