mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-04-29 21:37:08 +00:00
lib: Test return of fcntl in agentx.c
The agentx.c code was calling fcntl but not testing return code and handling it, thus making SA unhappy. Fix. Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
This commit is contained in:
parent
698ba8d026
commit
19d95d40c0
24
lib/agentx.c
24
lib/agentx.c
@ -55,28 +55,42 @@ static int agentx_timeout(struct thread *t)
|
|||||||
static int agentx_read(struct thread *t)
|
static int agentx_read(struct thread *t)
|
||||||
{
|
{
|
||||||
fd_set fds;
|
fd_set fds;
|
||||||
int flags;
|
int flags, new_flags = 0;
|
||||||
int nonblock = false;
|
int nonblock = false;
|
||||||
struct listnode *ln = THREAD_ARG(t);
|
struct listnode *ln = THREAD_ARG(t);
|
||||||
list_delete_node(events, ln);
|
list_delete_node(events, ln);
|
||||||
|
|
||||||
/* fix for non blocking socket */
|
/* fix for non blocking socket */
|
||||||
flags = fcntl(THREAD_FD(t), F_GETFL, 0);
|
flags = fcntl(THREAD_FD(t), F_GETFL, 0);
|
||||||
if (-1 == flags)
|
if (-1 == flags) {
|
||||||
|
flog_err(EC_LIB_SYSTEM_CALL, "Failed to get FD settings fcntl: %s(%d)",
|
||||||
|
strerror(errno), errno);
|
||||||
return -1;
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
if (flags & O_NONBLOCK)
|
if (flags & O_NONBLOCK)
|
||||||
nonblock = true;
|
nonblock = true;
|
||||||
else
|
else
|
||||||
fcntl(THREAD_FD(t), F_SETFL, flags | O_NONBLOCK);
|
new_flags = fcntl(THREAD_FD(t), F_SETFL, flags | O_NONBLOCK);
|
||||||
|
|
||||||
|
if (new_flags == -1)
|
||||||
|
flog_err(EC_LIB_SYSTEM_CALL, "Failed to set snmp fd non blocking: %s(%d)",
|
||||||
|
strerror(errno), errno);
|
||||||
|
|
||||||
FD_ZERO(&fds);
|
FD_ZERO(&fds);
|
||||||
FD_SET(THREAD_FD(t), &fds);
|
FD_SET(THREAD_FD(t), &fds);
|
||||||
snmp_read(&fds);
|
snmp_read(&fds);
|
||||||
|
|
||||||
/* Reset the flag */
|
/* Reset the flag */
|
||||||
if (!nonblock)
|
if (!nonblock) {
|
||||||
fcntl(THREAD_FD(t), F_SETFL, flags);
|
new_flags = fcntl(THREAD_FD(t), F_SETFL, flags);
|
||||||
|
|
||||||
|
if (new_flags == -1)
|
||||||
|
flog_err(
|
||||||
|
EC_LIB_SYSTEM_CALL,
|
||||||
|
"Failed to set snmp fd back to original settings: %s(%d)",
|
||||||
|
strerror(errno), errno);
|
||||||
|
}
|
||||||
|
|
||||||
netsnmp_check_outstanding_agent_requests();
|
netsnmp_check_outstanding_agent_requests();
|
||||||
agentx_events_update();
|
agentx_events_update();
|
||||||
|
Loading…
Reference in New Issue
Block a user