osmo_stream_cli_send(): Drop data if client is not connected [yet]
The behaviour is undefined on what should happen if a stream client user is trying to write data before the client socket is connected. In osmo_io mode we would actually crash due to a NULL-pointer dereference. Let's discard any sent data in this situation and print a related error log message. This problem actually shows up with osmo-bsc Change-Id Icce412e6ee69366c7b131c9bc1d51e8d44204917 where we convert CBSP over to osmo_io - here in situations where a CBSP client (using stream_cli) was previously connected but has lost its connection. Change-Id: I18d2e8e850c23a32f5983a715fa8a18747b296cd
This commit is contained in:
parent
d047924463
commit
c17dc5f559
|
@ -1003,12 +1003,20 @@ void osmo_stream_cli_send(struct osmo_stream_cli *cli, struct msgb *msg)
|
|||
OSMO_ASSERT(cli);
|
||||
OSMO_ASSERT(msg);
|
||||
|
||||
if (!osmo_stream_cli_is_connected(cli)) {
|
||||
LOGSCLI(cli, LOGL_ERROR, "send: not connected, dropping data!\n");
|
||||
msgb_free(msg);
|
||||
return;
|
||||
}
|
||||
|
||||
switch (cli->mode) {
|
||||
case OSMO_STREAM_MODE_OSMO_FD:
|
||||
msgb_enqueue(&cli->tx_queue, msg);
|
||||
osmo_fd_write_enable(&cli->ofd);
|
||||
break;
|
||||
case OSMO_STREAM_MODE_OSMO_IO:
|
||||
/* whenever osmo_stream_cli_is_connected() [see above check], we should have an iofd */
|
||||
OSMO_ASSERT(cli->iofd);
|
||||
if (cli->proto == IPPROTO_SCTP)
|
||||
rc = stream_iofd_sctp_send_msgb(cli->iofd, msg, MSG_NOSIGNAL);
|
||||
else
|
||||
|
|
Loading…
Reference in New Issue