From aeedaf06c0484ce2ef401e14697570df718d200f Mon Sep 17 00:00:00 2001 From: Weronika Lewandowska <weronika.lewandowska@intel.com> Date: Thu, 14 Mar 2019 08:07:59 +0100 Subject: [PATCH] obj: fix possible memory leak in tx_add_lock Ref: pmem/issues#1028 --- src/libpmemobj/tx.c | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/src/libpmemobj/tx.c b/src/libpmemobj/tx.c index 71e0270e8..eb672cb67 100644 --- a/src/libpmemobj/tx.c +++ b/src/libpmemobj/tx.c @@ -1,5 +1,5 @@ /* - * Copyright 2015-2018, Intel Corporation + * Copyright 2015-2019, Intel Corporation * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -492,8 +492,8 @@ add_to_tx_and_lock(struct tx *tx, enum pobj_tx_param type, void *lock) retval = pmemobj_mutex_lock(tx->pop, txl->lock.mutex); if (retval) { - errno = retval; ERR("!pmemobj_mutex_lock"); + goto err; } break; case TX_PARAM_RWLOCK: @@ -501,8 +501,8 @@ add_to_tx_and_lock(struct tx *tx, enum pobj_tx_param type, void *lock) retval = pmemobj_rwlock_wrlock(tx->pop, txl->lock.rwlock); if (retval) { - errno = retval; ERR("!pmemobj_rwlock_wrlock"); + goto err; } break; default: @@ -511,8 +511,12 @@ add_to_tx_and_lock(struct tx *tx, enum pobj_tx_param type, void *lock) break; } - if (retval == 0) - SLIST_INSERT_HEAD(&tx->tx_locks, txl, tx_lock); + SLIST_INSERT_HEAD(&tx->tx_locks, txl, tx_lock); + return 0; + +err: + errno = retval; + Free(txl); return retval; } -- GitLab