libmemif: timer causes spin at 100% cpu
In case of timer is set and expires: 1. timer_fd is readable and stay readable. 2. timer_fd is part of epoll_fd set. This makes epoll_pwait() calls return immediately instead of sleeping. Type: fix Signed-off-by: Daniel Béreš <dberes@cisco.com> Change-Id: I9b228464fe45b83def9b182c885d6febf428049c
This commit is contained in:

committed by
Damjan Marion

parent
b95e6d4e75
commit
c69655e3bd
@ -409,6 +409,16 @@ memif_connect_handler (memif_fd_event_type_t type, void *private_ctx)
|
|||||||
memif_socket_t *ms = (memif_socket_t *) private_ctx;
|
memif_socket_t *ms = (memif_socket_t *) private_ctx;
|
||||||
memif_connection_t *c;
|
memif_connection_t *c;
|
||||||
|
|
||||||
|
if (ms->timer_fd >= 0)
|
||||||
|
{
|
||||||
|
uint64_t u64;
|
||||||
|
/*
|
||||||
|
Have to read the timer fd else it stays read-ready
|
||||||
|
and makes epoll_pwait() return without sleeping
|
||||||
|
*/
|
||||||
|
read (ms->timer_fd, &u64, sizeof (u64));
|
||||||
|
}
|
||||||
|
|
||||||
/* loop ms->slave_interfaces and request connection for disconnected ones */
|
/* loop ms->slave_interfaces and request connection for disconnected ones */
|
||||||
TAILQ_FOREACH (c, &ms->slave_interfaces, next)
|
TAILQ_FOREACH (c, &ms->slave_interfaces, next)
|
||||||
{
|
{
|
||||||
|
Reference in New Issue
Block a user