Julius Pfrommer 8 gadi atpakaļ
vecāks
revīzija
b4c52597a1
2 mainītis faili ar 19 papildinājumiem un 16 dzēšanām
  1. 3 3
      src/client/ua_client.c
  2. 16 13
      src/client/ua_client_highlevel_subscriptions.c

+ 3 - 3
src/client/ua_client.c

@@ -67,12 +67,12 @@ static void UA_Client_deleteMembers(UA_Client* client) {
     }
     UA_Client_Subscription *sub, *tmps;
     LIST_FOREACH_SAFE(sub, &client->subscriptions, listEntry, tmps) {
-        LIST_REMOVE(sub, listEntry);
         UA_Client_MonitoredItem *mon, *tmpmon;
         LIST_FOREACH_SAFE(mon, &sub->MonitoredItems, listEntry, tmpmon) {
             UA_Client_Subscriptions_removeMonitoredItem(client, sub->SubscriptionID,
                                                         mon->MonitoredItemId);
         }
+        LIST_REMOVE(sub, listEntry);
         free(sub);
     }
 #endif
@@ -737,8 +737,8 @@ void __UA_Client_Service(UA_Client *client, const void *r, const UA_DataType *re
         } else
             retval = UA_decodeBinary(&reply, &offset, respHeader, &UA_TYPES[UA_TYPES_SERVICEFAULT]);
         goto finish;
-    } 
-    
+    }
+
     retval = UA_decodeBinary(&reply, &offset, response, responseType);
     if(retval == UA_STATUSCODE_BADENCODINGLIMITSEXCEEDED)
         retval = UA_STATUSCODE_BADRESPONSETOOLARGE;

+ 16 - 13
src/client/ua_client_highlevel_subscriptions.c

@@ -171,21 +171,24 @@ UA_Client_Subscriptions_removeMonitoredItem(UA_Client *client, UA_UInt32 subscri
     }
     if(!mon)
         return UA_STATUSCODE_BADMONITOREDITEMIDINVALID;
-    
-    UA_DeleteMonitoredItemsRequest request;
-    UA_DeleteMonitoredItemsRequest_init(&request);
-    request.subscriptionId = sub->SubscriptionID;
-    request.monitoredItemIdsSize = 1;
-    request.monitoredItemIds = (UA_UInt32 *) UA_malloc(sizeof(UA_UInt32));
-    request.monitoredItemIds[0] = mon->MonitoredItemId;
-    
-    UA_DeleteMonitoredItemsResponse response = UA_Client_Service_deleteMonitoredItems(client, request);
 
     UA_StatusCode retval = UA_STATUSCODE_GOOD;
-    if(response.resultsSize > 1)
-        retval = response.results[0];
-    else
-        retval = response.responseHeader.serviceResult;
+
+    if(client->state == UA_CLIENTSTATE_CONNECTED) {
+        UA_DeleteMonitoredItemsRequest request;
+        UA_DeleteMonitoredItemsRequest_init(&request);
+        request.subscriptionId = sub->SubscriptionID;
+        request.monitoredItemIdsSize = 1;
+        request.monitoredItemIds = (UA_UInt32 *) UA_malloc(sizeof(UA_UInt32));
+        request.monitoredItemIds[0] = mon->MonitoredItemId;
+
+        UA_DeleteMonitoredItemsResponse response = UA_Client_Service_deleteMonitoredItems(client, request);
+
+        if(response.resultsSize > 1)
+            retval = response.results[0];
+        else
+            retval = response.responseHeader.serviceResult;
+    }
     
     if(retval == UA_STATUSCODE_GOOD) {
         LIST_REMOVE(mon, listEntry);