From 85478eccc9aecb9cc3bf1f01731a53f296dd56a4 Mon Sep 17 00:00:00 2001 From: Ben Walker Date: Wed, 16 Nov 2022 12:43:32 -0700 Subject: [PATCH] thread: Fix error handling in spdk_interrupt_register If the calloc failed, the fd was left in the fd_group. Change-Id: Ie68426a13d342756c20315656f0309440fda6e02 Signed-off-by: Ben Walker Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/15475 Tested-by: SPDK CI Jenkins Reviewed-by: Jim Harris Reviewed-by: Changpeng Liu Reviewed-by: Xiaodong Liu Reviewed-by: Aleksey Marchuk Reviewed-by: Thanos Makatos Reviewed-by: John Levon --- lib/thread/thread.c | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/lib/thread/thread.c b/lib/thread/thread.c index 1342038f0..88873c5a3 100644 --- a/lib/thread/thread.c +++ b/lib/thread/thread.c @@ -2634,14 +2634,6 @@ spdk_interrupt_register(int efd, spdk_interrupt_fn fn, return NULL; } - ret = spdk_fd_group_add(thread->fgrp, efd, fn, arg, name); - - if (ret != 0) { - SPDK_ERRLOG("thread %s: failed to add fd %d: %s\n", - thread->name, efd, spdk_strerror(-ret)); - return NULL; - } - intr = calloc(1, sizeof(*intr)); if (intr == NULL) { SPDK_ERRLOG("Interrupt handler allocation failed\n"); @@ -2657,6 +2649,15 @@ spdk_interrupt_register(int efd, spdk_interrupt_fn fn, intr->efd = efd; intr->thread = thread; + ret = spdk_fd_group_add(thread->fgrp, efd, fn, arg, name); + + if (ret != 0) { + SPDK_ERRLOG("thread %s: failed to add fd %d: %s\n", + thread->name, efd, spdk_strerror(-ret)); + free(intr); + return NULL; + } + return intr; }