|
@@ -394,10 +394,24 @@ Operation_SetMonitoringMode(UA_Server *server, UA_Session *session,
|
|
|
return;
|
|
|
|
|
|
mon->monitoringMode = op_monitoringMode;
|
|
|
- if(mon->monitoringMode == UA_MONITORINGMODE_REPORTING)
|
|
|
+ if(mon->monitoringMode == UA_MONITORINGMODE_REPORTING) {
|
|
|
MonitoredItem_registerSampleCallback(server, mon);
|
|
|
- else
|
|
|
+ } else if (mon->monitoringMode == UA_MONITORINGMODE_DISABLED) {
|
|
|
+ /* Setting the mode to DISABLED causes all queued Notifications to be delete */
|
|
|
+ MonitoredItem_queuedValue *val, *val_tmp;
|
|
|
+ TAILQ_FOREACH_SAFE(val, &mon->queue, listEntry, val_tmp) {
|
|
|
+ TAILQ_REMOVE(&mon->queue, val, listEntry);
|
|
|
+ UA_DataValue_deleteMembers(&val->value);
|
|
|
+ UA_free(val);
|
|
|
+ }
|
|
|
+ mon->currentQueueSize = 0;
|
|
|
+
|
|
|
+ /* initialize lastSampledValue */
|
|
|
+ mon->lastSampledValue.data = NULL;
|
|
|
+ mon->lastSampledValue.length = 0;
|
|
|
+
|
|
|
MonitoredItem_unregisterSampleCallback(server, mon);
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
void Service_SetMonitoringMode(UA_Server *server, UA_Session *session,
|