Signed-off-by: Tim Wiederhake <twiederh(a)redhat.com>
---
src/util/virnetlink.c | 24 +++++++++++++-----------
1 file changed, 13 insertions(+), 11 deletions(-)
diff --git a/src/util/virnetlink.c b/src/util/virnetlink.c
index 3216765492..c6c8c33c7c 100644
--- a/src/util/virnetlink.c
+++ b/src/util/virnetlink.c
@@ -1114,7 +1114,8 @@ virNetlinkEventAddClient(virNetlinkEventHandleCallback handleCB,
unsigned int protocol)
{
size_t i;
- int r, ret = -1;
+ int r = -1;
+ int ret = -1;
virNetlinkEventSrvPrivate *srv = NULL;
if (protocol >= MAX_LINKS)
@@ -1132,24 +1133,25 @@ virNetlinkEventAddClient(virNetlinkEventHandleCallback handleCB,
VIR_DEBUG("adding client: %d.", nextWatch);
- r = 0;
/* first try to re-use deleted free slots */
for (i = 0; i < srv->handlesCount; i++) {
if (srv->handles[i].deleted == VIR_NETLINK_HANDLE_DELETED) {
r = i;
- goto addentry;
+ break;
}
}
- /* Resize the eventLoop array if needed */
- if (srv->handlesCount == srv->handlesAlloc) {
- VIR_DEBUG("Used %zu handle slots, adding at least %d more",
- srv->handlesAlloc, NETLINK_EVENT_ALLOC_EXTENT);
- VIR_RESIZE_N(srv->handles, srv->handlesAlloc,
- srv->handlesCount, NETLINK_EVENT_ALLOC_EXTENT);
+
+ if (r < 0) {
+ /* Resize the eventLoop array if needed */
+ if (srv->handlesCount == srv->handlesAlloc) {
+ VIR_DEBUG("Used %zu handle slots, adding at least %d more",
+ srv->handlesAlloc, NETLINK_EVENT_ALLOC_EXTENT);
+ VIR_RESIZE_N(srv->handles, srv->handlesAlloc,
+ srv->handlesCount, NETLINK_EVENT_ALLOC_EXTENT);
+ }
+ r = srv->handlesCount++;
}
- r = srv->handlesCount++;
- addentry:
srv->handles[r].watch = nextWatch;
srv->handles[r].handleCB = handleCB;
srv->handles[r].removeCB = removeCB;
--
2.31.1