summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Elder <aelder@audioscience.com>2016-01-11 13:31:51 -0500
committerAndrew Elder <aelder@audioscience.com>2016-01-11 13:31:51 -0500
commit260b3b48afa3e34984c45e86898a063a5261e942 (patch)
tree951ff50f9da372b7e37d15820fed118d4b9023bf
parent858f3be2ba183828ee2920d2982a09d9dd31248a (diff)
downloadOpen-AVB-260b3b48afa3e34984c45e86898a063a5261e942.tar.gz
MRP: correct TA and TR merging per #338. Test case now passes.
-rw-r--r--daemons/mrpd/msrp.c27
1 files changed, 15 insertions, 12 deletions
diff --git a/daemons/mrpd/msrp.c b/daemons/mrpd/msrp.c
index f98fddf6..8dd127e4 100644
--- a/daemons/mrpd/msrp.c
+++ b/daemons/mrpd/msrp.c
@@ -329,20 +329,23 @@ int msrp_merge(struct msrp_attribute *rattrib)
* TalkerFailed <- TalkerAdvertise and
* TalkerAdvertise <- TalkerFailed
*/
- attrib->attribute.talk_listen.FailureInformation.FailureCode =
- rattrib->attribute.talk_listen.FailureInformation.
- FailureCode;
- memcpy(attrib->attribute.talk_listen.FailureInformation.
- BridgeID,
- rattrib->attribute.talk_listen.FailureInformation.
- BridgeID, 8);
+ if (rattrib->operation == attrib->operation) {
+
+ attrib->attribute.talk_listen.FailureInformation.FailureCode =
+ rattrib->attribute.talk_listen.FailureInformation.
+ FailureCode;
+ memcpy(attrib->attribute.talk_listen.FailureInformation.
+ BridgeID,
+ rattrib->attribute.talk_listen.FailureInformation.
+ BridgeID, 8);
#ifdef ENABLE_MERGED_LATENCY
- attrib->attribute.talk_listen.AccumulatedLatency =
- rattrib->attribute.talk_listen.AccumulatedLatency;
+ attrib->attribute.talk_listen.AccumulatedLatency =
+ rattrib->attribute.talk_listen.AccumulatedLatency;
#endif
- if (attrib->type != rattrib->type) {
- attrib->type = rattrib->type;
- attrib->registrar.mrp_state = MRP_MT_STATE; /* ugly - force a notify */
+ if (attrib->type != rattrib->type) {
+ attrib->type = rattrib->type;
+ attrib->registrar.mrp_state = MRP_MT_STATE; /* ugly - force a notify */
+ }
}
break;
case MSRP_LISTENER_TYPE: