Prechádzať zdrojové kódy

RetransmissionQueue as TAILQ instead of LIST

Julius Pfrommer 8 rokov pred
rodič
commit
9fdd7df363

+ 3 - 3
src/server/ua_services_subscription.c

@@ -441,9 +441,9 @@ Service_Publish(UA_Server *server, UA_Session *session,
         /* Remove the acked transmission from the retransmission queue */
         response->results[i] = UA_STATUSCODE_BADSEQUENCENUMBERUNKNOWN;
         UA_NotificationMessageEntry *pre, *pre_tmp;
-        LIST_FOREACH_SAFE(pre, &sub->retransmissionQueue, listEntry, pre_tmp) {
+        TAILQ_FOREACH_SAFE(pre, &sub->retransmissionQueue, listEntry, pre_tmp) {
             if(pre->message.sequenceNumber == ack->sequenceNumber) {
-                LIST_REMOVE(pre, listEntry);
+                TAILQ_REMOVE(&sub->retransmissionQueue, pre, listEntry);
                 response->results[i] = UA_STATUSCODE_GOOD;
                 UA_NotificationMessage_deleteMembers(&pre->message);
                 UA_free(pre);
@@ -570,7 +570,7 @@ void Service_Republish(UA_Server *server, UA_Session *session, const UA_Republis
 
     /* Find the notification in the retransmission queue  */
     UA_NotificationMessageEntry *entry;
-    LIST_FOREACH(entry, &sub->retransmissionQueue, listEntry) {
+    TAILQ_FOREACH(entry, &sub->retransmissionQueue, listEntry) {
         if(entry->message.sequenceNumber == request->retransmitSequenceNumber)
             break;
     }

+ 6 - 6
src/server/ua_subscription.c

@@ -260,7 +260,7 @@ UA_Subscription * UA_Subscription_new(UA_Session *session, UA_UInt32 subscriptio
     new->currentLifetimeCount = 0;
     new->lastMonitoredItemId = 0;
     new->state = UA_SUBSCRIPTIONSTATE_NORMAL; /* The first publish response is sent immediately */
-    LIST_INIT(&new->retransmissionQueue);
+    TAILQ_INIT(&new->retransmissionQueue);
     LIST_INIT(&new->monitoredItems);
     return new;
 }
@@ -277,8 +277,8 @@ void UA_Subscription_deleteMembers(UA_Subscription *subscription, UA_Server *ser
 
     /* Delete Retransmission Queue */
     UA_NotificationMessageEntry *nme, *nme_tmp;
-    LIST_FOREACH_SAFE(nme, &subscription->retransmissionQueue, listEntry, nme_tmp) {
-        LIST_REMOVE(nme, listEntry);
+    TAILQ_FOREACH_SAFE(nme, &subscription->retransmissionQueue, listEntry, nme_tmp) {
+        TAILQ_REMOVE(&subscription->retransmissionQueue, nme, listEntry);
         UA_NotificationMessage_deleteMembers(&nme->message);
         UA_free(nme);
     }
@@ -466,13 +466,13 @@ void UA_Subscription_publishCallback(UA_Server *server, UA_Subscription *sub) {
          * be done here, so that the message itself is included in the available
          * sequence numbers for acknowledgement. */
         retransmission->message = response->notificationMessage;
-        LIST_INSERT_HEAD(&sub->retransmissionQueue, retransmission, listEntry);
+        TAILQ_INSERT_HEAD(&sub->retransmissionQueue, retransmission, listEntry);
     }
 
     /* Get the available sequence numbers from the retransmission queue */
     size_t available = 0;
     UA_NotificationMessageEntry *nme;
-    LIST_FOREACH(nme, &sub->retransmissionQueue, listEntry)
+    TAILQ_FOREACH(nme, &sub->retransmissionQueue, listEntry)
         ++available;
     // cppcheck-suppress knownConditionTrueFalse
     if(available > 0) {
@@ -480,7 +480,7 @@ void UA_Subscription_publishCallback(UA_Server *server, UA_Subscription *sub) {
         response->availableSequenceNumbersSize = available;
     }
     size_t i = 0;
-    LIST_FOREACH(nme, &sub->retransmissionQueue, listEntry) {
+    TAILQ_FOREACH(nme, &sub->retransmissionQueue, listEntry) {
         response->availableSequenceNumbers[i] = nme->message.sequenceNumber;
         ++i;
     }

+ 2 - 2
src/server/ua_subscription.h

@@ -63,7 +63,7 @@ UA_StatusCode MonitoredItem_unregisterSampleJob(UA_Server *server, UA_MonitoredI
 /****************/
 
 typedef struct UA_NotificationMessageEntry {
-    LIST_ENTRY(UA_NotificationMessageEntry) listEntry;
+    TAILQ_ENTRY(UA_NotificationMessageEntry) listEntry;
     UA_NotificationMessage message;
 } UA_NotificationMessageEntry;
 
@@ -101,7 +101,7 @@ struct UA_Subscription {
     UA_Boolean publishJobIsRegistered;
 
     LIST_HEAD(UA_ListOfUAMonitoredItems, UA_MonitoredItem) monitoredItems;
-    LIST_HEAD(UA_ListOfNotificationMessages, UA_NotificationMessageEntry) retransmissionQueue;
+    TAILQ_HEAD(UA_ListOfNotificationMessages, UA_NotificationMessageEntry) retransmissionQueue;
 };
 
 UA_Subscription *UA_Subscription_new(UA_Session *session, UA_UInt32 subscriptionID);