Blob Blame History Raw
From d0eb88089b059bfe2da3bd1a3797b89d69119c29 Mon Sep 17 00:00:00 2001
From: Alexey Tikhonov <atikhono@redhat.com>
Date: Thu, 23 Jan 2020 19:00:27 +0100
Subject: [PATCH 19/23] sss_ptr_hash: sss_ptr_hash_delete fix/optimization
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

 - no reason to skip hash_delete() just because sss_ptr_hash_lookup_internal()
failed
 - avoid excessive lookup if it is not required to free payload

Reviewed-by: Pavel Březina <pbrezina@redhat.com>
---
 src/util/sss_ptr_hash.c | 17 +++++++++--------
 1 file changed, 9 insertions(+), 8 deletions(-)

diff --git a/src/util/sss_ptr_hash.c b/src/util/sss_ptr_hash.c
index f8addec1e..7326244e6 100644
--- a/src/util/sss_ptr_hash.c
+++ b/src/util/sss_ptr_hash.c
@@ -331,20 +331,21 @@ void sss_ptr_hash_delete(hash_table_t *table,
     struct sss_ptr_hash_value *value;
     hash_key_t table_key;
     int hret;
-    void *ptr;
+    void *payload;
 
     if (table == NULL || key == NULL) {
         return;
     }
 
-    value = sss_ptr_hash_lookup_internal(table, key);
-    if (value == NULL) {
-        /* Value not found. */
-        return;
+    if (free_value) {
+        value = sss_ptr_hash_lookup_internal(table, key);
+        if (value == NULL) {
+            free_value = false;
+        } else {
+            payload = value->ptr;
+        }
     }
 
-    ptr = value->ptr;
-
     table_key.type = HASH_KEY_STRING;
     table_key.str = discard_const_p(char, key);
 
@@ -357,7 +358,7 @@ void sss_ptr_hash_delete(hash_table_t *table,
 
     /* Also free the original value if requested. */
     if (free_value) {
-        talloc_free(ptr);
+        talloc_free(payload);
     }
 
     return;
-- 
2.20.1