1) don't send notifications if the key is the same. 2) Add key value change notifications to key_inc & key_dec
Signed-off-by: Angus Salkeld <[email protected]> --- exec/objdb.c | 21 ++++++++++++++++++--- 1 files changed, 18 insertions(+), 3 deletions(-) diff --git a/exec/objdb.c b/exec/objdb.c index f8b12e4..e26ff14 100644 --- a/exec/objdb.c +++ b/exec/objdb.c @@ -1087,6 +1087,10 @@ static int object_key_increment ( } hdb_handle_put (&object_instance_database, object_handle); + if (res == 0) { + object_key_changed_notification (object_handle, key_name, key_len, + object_key->value, object_key->value_len, OBJECT_KEY_REPLACED); + } objdb_rdunlock(); return (res); @@ -1170,6 +1174,10 @@ static int object_key_decrement ( } hdb_handle_put (&object_instance_database, object_handle); + if (res == 0) { + object_key_changed_notification (object_handle, key_name, key_len, + object_key->value, object_key->value_len, OBJECT_KEY_REPLACED); + } objdb_rdunlock(); return (res); @@ -1244,6 +1252,7 @@ static int object_key_replace ( struct object_key *object_key = NULL; struct list_head *list; int found = 0; + int value_changed = 0; objdb_rdlock(); @@ -1308,8 +1317,14 @@ static int object_key_replace ( free(object_key->value); object_key->value = replacement_value; } - memcpy(object_key->value, new_value, new_value_len); - object_key->value_len = new_value_len; + if (memcmp (object_key->value, new_value, new_value_len) == 0) { + value_changed = 0; + } + else { + memcpy(object_key->value, new_value, new_value_len); + object_key->value_len = new_value_len; + value_changed = 1; + } } else { ret = -1; @@ -1317,7 +1332,7 @@ static int object_key_replace ( } hdb_handle_put (&object_instance_database, object_handle); - if (ret == 0) { + if (ret == 0 && value_changed) { object_key_changed_notification (object_handle, key_name, key_len, new_value, new_value_len, OBJECT_KEY_REPLACED); } -- 1.6.6.1 _______________________________________________ Openais mailing list [email protected] https://lists.linux-foundation.org/mailman/listinfo/openais
