From a518a318d496ef5a2c02b4e0ad2eae45b0f77e5d Mon Sep 17 00:00:00 2001 From: Thomas Graf Date: Sat, 21 Apr 2012 12:47:29 +0200 Subject: [PATCH] cache_mngr: Let nl_cache_mngr_data_ready() read multiple messages Having nl_recvmsgs() return the number of read messages allows to continue reading until the underlying recvmsg() will return EAGAIN for the non blocking socket. --- lib/cache_mngr.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/lib/cache_mngr.c b/lib/cache_mngr.c index aaf90bf..3eefbb0 100644 --- a/lib/cache_mngr.c +++ b/lib/cache_mngr.c @@ -324,7 +324,7 @@ int nl_cache_mngr_poll(struct nl_cache_mngr *mngr, int timeout) */ int nl_cache_mngr_data_ready(struct nl_cache_mngr *mngr) { - int err; + int err, nread = 0; struct nl_cb *cb; NL_DBG(2, "Cache manager %p, reading new data from fd %d\n", @@ -336,12 +336,17 @@ int nl_cache_mngr_data_ready(struct nl_cache_mngr *mngr) nl_cb_set(cb, NL_CB_VALID, NL_CB_CUSTOM, event_input, mngr); - err = nl_recvmsgs(mngr->cm_sock, cb); + while ((err = nl_recvmsgs(mngr->cm_sock, cb)) > 0) { + NL_DBG(2, "Cache manager %p, recvmsgs read %d messages\n", + mngr, err); + nread += err; + } + nl_cb_put(cb); if (err < 0) return err; - return 1; + return nread; } /**