good for commit

On Tue, 2010-03-30 at 13:31 +1100, Angus Salkeld wrote:
> 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);
>       }

_______________________________________________
Openais mailing list
[email protected]
https://lists.linux-foundation.org/mailman/listinfo/openais

Reply via email to