forked from Mirror/frr
lib: mgmtd: re-purpose is_short_circuit and fix depth variable inc/dec
`is_short_circuit` now is set to true when a message is being short-circuit handled. `short_circuit_depth` was being inc/dec inside conditional macro, move that out of the macro. Signed-off-by: Christian Hopps <chopps@labn.net>
This commit is contained in:
parent
2b21ec2c49
commit
babbdd43d5
|
@ -548,20 +548,26 @@ int msg_conn_send_msg(struct msg_conn *conn, uint8_t version, void *msg,
|
||||||
if (conn->remote_conn && short_circuit_ok) {
|
if (conn->remote_conn && short_circuit_ok) {
|
||||||
uint8_t *buf = msg;
|
uint8_t *buf = msg;
|
||||||
size_t n = mlen;
|
size_t n = mlen;
|
||||||
|
bool old;
|
||||||
|
|
||||||
if (packf) {
|
if (packf) {
|
||||||
buf = XMALLOC(MTYPE_TMP, mlen);
|
buf = XMALLOC(MTYPE_TMP, mlen);
|
||||||
n = packf(msg, buf);
|
n = packf(msg, buf);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
++conn->short_circuit_depth;
|
||||||
MGMT_MSG_DBG(dbgtag, "SC send: depth %u msg: %p",
|
MGMT_MSG_DBG(dbgtag, "SC send: depth %u msg: %p",
|
||||||
++conn->short_circuit_depth, msg);
|
conn->short_circuit_depth, msg);
|
||||||
|
|
||||||
|
old = conn->remote_conn->is_short_circuit;
|
||||||
|
conn->remote_conn->is_short_circuit = true;
|
||||||
conn->remote_conn->handle_msg(version, buf, n,
|
conn->remote_conn->handle_msg(version, buf, n,
|
||||||
conn->remote_conn);
|
conn->remote_conn);
|
||||||
|
conn->remote_conn->is_short_circuit = old;
|
||||||
|
|
||||||
|
--conn->short_circuit_depth;
|
||||||
MGMT_MSG_DBG(dbgtag, "SC return from depth: %u msg: %p",
|
MGMT_MSG_DBG(dbgtag, "SC return from depth: %u msg: %p",
|
||||||
conn->short_circuit_depth--, msg);
|
conn->short_circuit_depth, msg);
|
||||||
|
|
||||||
if (packf)
|
if (packf)
|
||||||
XFREE(MTYPE_TMP, buf);
|
XFREE(MTYPE_TMP, buf);
|
||||||
|
@ -661,12 +667,10 @@ static bool msg_client_connect_short_circuit(struct msg_client *client)
|
||||||
set_nonblocking(sockets[0]);
|
set_nonblocking(sockets[0]);
|
||||||
setsockopt_so_sendbuf(sockets[0], client->conn.mstate.max_write_buf);
|
setsockopt_so_sendbuf(sockets[0], client->conn.mstate.max_write_buf);
|
||||||
setsockopt_so_recvbuf(sockets[0], client->conn.mstate.max_read_buf);
|
setsockopt_so_recvbuf(sockets[0], client->conn.mstate.max_read_buf);
|
||||||
client->conn.is_short_circuit = true;
|
|
||||||
|
|
||||||
/* server side */
|
/* server side */
|
||||||
memset(&su, 0, sizeof(union sockunion));
|
memset(&su, 0, sizeof(union sockunion));
|
||||||
server_conn = server->create(sockets[1], &su);
|
server_conn = server->create(sockets[1], &su);
|
||||||
server_conn->is_short_circuit = true;
|
|
||||||
|
|
||||||
client->conn.remote_conn = server_conn;
|
client->conn.remote_conn = server_conn;
|
||||||
server_conn->remote_conn = &client->conn;
|
server_conn->remote_conn = &client->conn;
|
||||||
|
|
|
@ -98,8 +98,8 @@ struct msg_conn {
|
||||||
struct msg_conn *conn);
|
struct msg_conn *conn);
|
||||||
void *user;
|
void *user;
|
||||||
uint short_circuit_depth;
|
uint short_circuit_depth;
|
||||||
|
bool is_short_circuit; /* true when the message being handled is SC */
|
||||||
bool is_client;
|
bool is_client;
|
||||||
bool is_short_circuit;
|
|
||||||
bool debug;
|
bool debug;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue