63 lines
1.7 KiB
Diff
63 lines
1.7 KiB
Diff
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 20/24] 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
|
|
|