Skip to content

Commit

Permalink
cache: use cleanup attribute in nl_cache_mngr_alloc_ex()
Browse files Browse the repository at this point in the history
No "goto errout".
  • Loading branch information
thom311 committed May 6, 2024
1 parent 32cb9f3 commit 3381ace
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 21 deletions.
6 changes: 6 additions & 0 deletions include/nl-aux-core/nl-core.h
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,12 @@ void nl_socket_free(struct nl_sock *);
_NL_AUTO_DEFINE_FCN_TYPED0(struct nl_sock *, _nl_auto_nl_socket_fcn,
nl_socket_free);

struct nl_cache_mngr;
void nl_cache_mngr_free(struct nl_cache_mngr *mngr);
#define _nl_auto_nl_cache_mngr _nl_auto(_nl_auto_nl_cache_mngr_fcn)
_NL_AUTO_DEFINE_FCN_TYPED0(struct nl_cache_mngr *, _nl_auto_nl_cache_mngr_fcn,
nl_cache_mngr_free);

struct nl_addr *nl_addr_build(int, const void *, size_t);

static inline struct nl_addr *_nl_addr_build(int family, const void *buf)
Expand Down
32 changes: 11 additions & 21 deletions lib/cache_mngr.c
Original file line number Diff line number Diff line change
Expand Up @@ -168,7 +168,7 @@ int nl_cache_mngr_alloc(struct nl_sock *sk, int protocol, int flags,
int nl_cache_mngr_alloc_ex(struct nl_sock *sk, struct nl_sock *sync_sk, int protocol, int flags,
struct nl_cache_mngr **result)
{
struct nl_cache_mngr *mngr;
_nl_auto_nl_cache_mngr struct nl_cache_mngr *mngr = NULL;
int err;

/* Catch abuse of flags */
Expand All @@ -183,19 +183,15 @@ int nl_cache_mngr_alloc_ex(struct nl_sock *sk, struct nl_sock *sync_sk, int prot
mngr->cm_flags = flags;

if (!sk) {
if (!(sk = nl_socket_alloc())) {
err = -NLE_NOMEM;
goto errout;
}
if (!(sk = nl_socket_alloc()))
return -NLE_NOMEM;
mngr->cm_flags |= NL_ALLOCATED_SOCK;
}
mngr->cm_sock = sk;

if(!sync_sk) {
if (!(sync_sk = nl_socket_alloc())) {
err = -NLE_NOMEM;
goto errout;
}
if (!(sync_sk = nl_socket_alloc()))
return -NLE_NOMEM;
mngr->cm_flags |= NL_ALLOCATED_SYNC_SOCK;
}
mngr->cm_sync_sock = sync_sk;
Expand All @@ -204,32 +200,26 @@ int nl_cache_mngr_alloc_ex(struct nl_sock *sk, struct nl_sock *sync_sk, int prot
mngr->cm_protocol = protocol;
mngr->cm_assocs = calloc(mngr->cm_nassocs,
sizeof(struct nl_cache_assoc));
if (!mngr->cm_assocs) {
err = -NLE_NOMEM;
goto errout;
}
if (!mngr->cm_assocs)
return -NLE_NOMEM;

/* Required to receive async event notifications */
nl_socket_disable_seq_check(mngr->cm_sock);

if ((err = nl_connect(mngr->cm_sock, protocol)) < 0)
goto errout;
return err;

if ((err = nl_socket_set_nonblocking(mngr->cm_sock)) < 0)
goto errout;
return err;

if ((err = nl_connect(mngr->cm_sync_sock, protocol)) < 0)
goto errout;
return err;

NL_DBG(1, "Allocated cache manager %p, protocol %d, %d caches\n",
mngr, protocol, mngr->cm_nassocs);

*result = mngr;
*result = _nl_steal_pointer(&mngr);
return 0;

errout:
nl_cache_mngr_free(mngr);
return err;
}

/**
Expand Down

0 comments on commit 3381ace

Please sign in to comment.