linux-cp: stop ignoring ENOBUFS while reading notif

Type: improvement

Currently, while reading notifications, ENOBUFS error is ignored and
reading continues. This was done to minimize the number of notifications
that are lost due to reopening the socket.

Now that synchronization is implemented to recover from socket errors,
ignoring ENOBUFS and reading as much notifications as possible is not
actual. Before synchronization, all currently enqueued notification are
discarded in any case.

With this change, stop reading notifications if any error occurs.

Signed-off-by: Alexander Chernavin <achernavin@netgate.com>
Change-Id: I1184d9a3aa99df63ef59bc2a67be2b1e5e0e9329
This commit is contained in:
Alexander Chernavin
2021-10-22 08:33:00 +00:00
committed by Matthew Smith
parent 7e0442aaab
commit f4795a9bd8

View File

@@ -717,15 +717,8 @@ lcp_nl_drain_messages (void)
int err;
nl_main_t *nm = &nl_main;
/* Read until there's an error. Unless the error is ENOBUFS, which means
* the kernel couldn't send a message due to socket buffer overflow.
* Continue reading when that happens.
*
* libnl translates both ENOBUFS and ENOMEM to NLE_NOMEM. So we need to
* check return status and errno to make sure we should keep going.
*/
while ((err = nl_recvmsgs_default (nm->sk_route)) > -1 ||
(err == -NLE_NOMEM && errno == ENOBUFS))
/* Read until there's an error */
while ((err = nl_recvmsgs_default (nm->sk_route)) > -1)
;
/* If there was an error other then EAGAIN, signal process node */