From: Luiz Augusto von Dentz <luiz.von.dentz@xxxxxxxxx> The process of cloning an existing db shall also clone certain values that are considered when calculating the hash since the resulting clone shall have the same hash. --- src/shared/gatt-db.c | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/src/shared/gatt-db.c b/src/shared/gatt-db.c index 16abcba2ec1c..b35763410d17 100644 --- a/src/shared/gatt-db.c +++ b/src/shared/gatt-db.c @@ -281,18 +281,35 @@ static void service_clone(void *data, void *user_data) /* Only clone values for characteristics declaration since that * is considered when calculating the db hash. */ - if (bt_uuid_len(&attr->uuid) == 2 && - attr->uuid.value.u16 == GATT_CHARAC_UUID) + if (bt_uuid_len(&attr->uuid) != 2) { + clone->attributes[i] = new_attribute(clone, + attr->handle, + &attr->uuid, + NULL, 0); + continue; + } + + /* Attribute values that are used for generating the hash needs + * to be cloned as well. + */ + switch (attr->uuid.value.u16) { + case GATT_PRIM_SVC_UUID: + case GATT_SND_SVC_UUID: + case GATT_INCLUDE_UUID: + case GATT_CHARAC_UUID: clone->attributes[i] = new_attribute(clone, attr->handle, &attr->uuid, attr->value, attr->value_len); - else + break; + default: clone->attributes[i] = new_attribute(clone, attr->handle, &attr->uuid, NULL, 0); + break; + } } queue_push_tail(db->services, clone); -- 2.45.2