1
0
mirror of https://gitlab.labs.nic.cz/labs/bird.git synced 2024-05-11 16:54:54 +00:00

CLI closing fix when its action is run asynchronously.

Some CLI actions, notably "show route", are run by queuing an event
somewhere else. If the user closes the socket, in case such an action is
being executed, the CLI must free the socket immediately from the error
hook but the pool must remain until the asynchronous event finishes and
cleans everything up.
This commit is contained in:
Maria Matejka
2023-01-19 10:53:09 +01:00
parent 34aeafbf9e
commit 59a5bf18f9
4 changed files with 19 additions and 8 deletions

View File

@@ -395,7 +395,8 @@ static char *path_control_socket = PATH_CONTROL_SOCKET;
static void
cli_write(cli *c)
{
sock *s = c->priv;
sock *s = c->sock;
ASSERT_DIE(c->sock);
while (c->tx_pos)
{
@@ -419,7 +420,9 @@ cli_write(cli *c)
void
cli_write_trigger(cli *c)
{
sock *s = c->priv;
sock *s = c->sock;
if (!s)
return;
if (s->tbuf == NULL)
cli_write(c);
@@ -434,7 +437,8 @@ cli_tx(sock *s)
int
cli_get_command(cli *c)
{
sock *s = c->priv;
sock *s = c->sock;
ASSERT_DIE(c->sock);
byte *t = c->rx_aux ? : s->rbuf;
byte *tend = s->rpos;
byte *d = c->rx_pos;
@@ -477,6 +481,7 @@ cli_err(sock *s, int err)
else
log(L_INFO "CLI connection closed");
}
cli_free(s->data);
}