Blame SOURCES/0018-sss_ptr_hash-don-t-keep-empty-sss_ptr_hash_delete_da.patch

0d097b
From adc7730a4e1b9721c93863a1b283457e9c02a3c5 Mon Sep 17 00:00:00 2001
0d097b
From: Alexey Tikhonov <atikhono@redhat.com>
0d097b
Date: Thu, 23 Jan 2020 17:55:24 +0100
0d097b
Subject: [PATCH 18/23] sss_ptr_hash: don't keep empty sss_ptr_hash_delete_data
0d097b
MIME-Version: 1.0
0d097b
Content-Type: text/plain; charset=UTF-8
0d097b
Content-Transfer-Encoding: 8bit
0d097b
0d097b
There is no need to allocate memory for `sss_ptr_hash_delete_data`
0d097b
if table user doesn't provide custom delete callback.
0d097b
0d097b
Reviewed-by: Pavel Březina <pbrezina@redhat.com>
0d097b
---
0d097b
 src/util/sss_ptr_hash.c | 36 ++++++++++++++++++++----------------
0d097b
 1 file changed, 20 insertions(+), 16 deletions(-)
0d097b
0d097b
diff --git a/src/util/sss_ptr_hash.c b/src/util/sss_ptr_hash.c
0d097b
index 8f9762cb9..f8addec1e 100644
0d097b
--- a/src/util/sss_ptr_hash.c
0d097b
+++ b/src/util/sss_ptr_hash.c
0d097b
@@ -138,12 +138,6 @@ sss_ptr_hash_delete_cb(hash_entry_t *item,
0d097b
     struct sss_ptr_hash_value *value;
0d097b
     struct hash_entry_t callback_entry;
0d097b
 
0d097b
-    data = talloc_get_type(pvt, struct sss_ptr_hash_delete_data);
0d097b
-    if (data == NULL) {
0d097b
-        DEBUG(SSSDBG_CRIT_FAILURE, "Invalid data!\n");
0d097b
-        return;
0d097b
-    }
0d097b
-
0d097b
     value = talloc_get_type(item->value.ptr, struct sss_ptr_hash_value);
0d097b
     if (value == NULL) {
0d097b
         DEBUG(SSSDBG_CRIT_FAILURE, "Invalid value!\n");
0d097b
@@ -157,8 +151,14 @@ sss_ptr_hash_delete_cb(hash_entry_t *item,
0d097b
     /* Free value, this also will disable spy */
0d097b
     talloc_free(value);
0d097b
 
0d097b
-    /* Switch to the input value and call custom callback. */
0d097b
-    if (data->callback != NULL) {
0d097b
+    if (pvt != NULL) {
0d097b
+        /* Switch to the input value and call custom callback. */
0d097b
+        data = talloc_get_type(pvt, struct sss_ptr_hash_delete_data);
0d097b
+        if (data == NULL) {
0d097b
+            DEBUG(SSSDBG_CRIT_FAILURE, "Invalid data!\n");
0d097b
+            return;
0d097b
+        }
0d097b
+
0d097b
         data->callback(&callback_entry, deltype, data->pvt);
0d097b
     }
0d097b
 }
0d097b
@@ -167,17 +167,19 @@ hash_table_t *sss_ptr_hash_create(TALLOC_CTX *mem_ctx,
0d097b
                                   hash_delete_callback *del_cb,
0d097b
                                   void *del_cb_pvt)
0d097b
 {
0d097b
-    struct sss_ptr_hash_delete_data *data;
0d097b
+    struct sss_ptr_hash_delete_data *data = NULL;
0d097b
     hash_table_t *table;
0d097b
     errno_t ret;
0d097b
 
0d097b
-    data = talloc_zero(NULL, struct sss_ptr_hash_delete_data);
0d097b
-    if (data == NULL) {
0d097b
-        return NULL;
0d097b
-    }
0d097b
+    if (del_cb != NULL) {
0d097b
+        data = talloc_zero(NULL, struct sss_ptr_hash_delete_data);
0d097b
+        if (data == NULL) {
0d097b
+            return NULL;
0d097b
+        }
0d097b
 
0d097b
-    data->callback = del_cb;
0d097b
-    data->pvt = del_cb_pvt;
0d097b
+        data->callback = del_cb;
0d097b
+        data->pvt = del_cb_pvt;
0d097b
+    }
0d097b
 
0d097b
     ret = sss_hash_create_ex(mem_ctx, 10, &table, 0, 0, 0, 0,
0d097b
                              sss_ptr_hash_delete_cb, data);
0d097b
@@ -188,7 +190,9 @@ hash_table_t *sss_ptr_hash_create(TALLOC_CTX *mem_ctx,
0d097b
         return NULL;
0d097b
     }
0d097b
 
0d097b
-    talloc_steal(table, data);
0d097b
+    if (data != NULL) {
0d097b
+        talloc_steal(table, data);
0d097b
+    }
0d097b
 
0d097b
     return table;
0d097b
 }
0d097b
-- 
0d097b
2.20.1
0d097b