From 56787b1553bd151eff62741e34fb3b4834073442 Mon Sep 17 00:00:00 2001 From: "Suren A. Chilingaryan" Date: Thu, 6 Aug 2015 01:12:55 +0200 Subject: Minor fix for software registers --- protocols/software.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) (limited to 'protocols') diff --git a/protocols/software.c b/protocols/software.c index ed9d372..55f62e8 100644 --- a/protocols/software.c +++ b/protocols/software.c @@ -61,6 +61,7 @@ pcilib_register_bank_context_t* pcilib_software_registers_open(pcilib_t *ctx, pc lock = pcilib_get_lock(ctx, PCILIB_LOCK_FLAGS_DEFAULT, "softreg/%s", bank_desc->name); if (!lock) { + pcilib_software_registers_close(ctx, (pcilib_register_bank_context_t*)bank_ctx); pcilib_error("Failed to initialize a lock to protect bank %s with software registers", bank_desc->name); return NULL; } @@ -68,6 +69,7 @@ pcilib_register_bank_context_t* pcilib_software_registers_open(pcilib_t *ctx, pc err = pcilib_lock(lock); if (err) { pcilib_return_lock(ctx, PCILIB_LOCK_FLAGS_DEFAULT, lock); + pcilib_software_registers_close(ctx, (pcilib_register_bank_context_t*)bank_ctx); pcilib_error("Error (%i) obtaining lock on bank %s with software registers", err, bank_desc->name); return NULL; } @@ -77,8 +79,8 @@ pcilib_register_bank_context_t* pcilib_software_registers_open(pcilib_t *ctx, pc if (!handle) { pcilib_unlock(lock); pcilib_return_lock(ctx, PCILIB_LOCK_FLAGS_DEFAULT, lock); - pcilib_error("Allocation of kernel memory for software registers has failed"); pcilib_software_registers_close(ctx, (pcilib_register_bank_context_t*)bank_ctx); + pcilib_error("Allocation of kernel memory for software registers has failed"); return NULL; } @@ -92,8 +94,8 @@ pcilib_register_bank_context_t* pcilib_software_registers_open(pcilib_t *ctx, pc if (reused & PCILIB_KMEM_REUSE_PARTIAL) { pcilib_unlock(lock); pcilib_return_lock(ctx, PCILIB_LOCK_FLAGS_DEFAULT, lock); - pcilib_error("Inconsistent software registers are found (only part of required buffers is available)"); pcilib_software_registers_close(ctx, (pcilib_register_bank_context_t*)bank_ctx); + pcilib_error("Inconsistent software registers are found (only part of required buffers is available)"); return NULL; } -- cgit v1.2.3