Merge pull request #59 from se-apc/bugfix/out_of_resources_error_on_cov_address_list_depletion (#734)

We report an error: resources, no-space-to-add-list-element on reachng MAX_COV_ADDRESSES limit with COV subsriptions

Co-authored-by: Tomasz Kazimierz Motyl <tomasz.motyl@se.com>
This commit is contained in:
Tomasz Kazimierz Motyl
2024-08-21 15:23:10 +01:00
committed by GitHub
parent 20c3b1c69c
commit 5c20e6d505
+24 -16
View File
@@ -381,22 +381,30 @@ static bool cov_list_subscribe(BACNET_ADDRESS *src,
}
}
if (!existing_entry && (first_invalid_index >= 0) &&
(!cov_data->cancellationRequest)) {
index = first_invalid_index;
found = true;
COV_Subscriptions[index].flag.valid = true;
COV_Subscriptions[index].dest_index = cov_address_add(src);
COV_Subscriptions[index].monitoredObjectIdentifier.type =
cov_data->monitoredObjectIdentifier.type;
COV_Subscriptions[index].monitoredObjectIdentifier.instance =
cov_data->monitoredObjectIdentifier.instance;
COV_Subscriptions[index].subscriberProcessIdentifier =
cov_data->subscriberProcessIdentifier;
COV_Subscriptions[index].flag.issueConfirmedNotifications =
cov_data->issueConfirmedNotifications;
COV_Subscriptions[index].invokeID = 0;
COV_Subscriptions[index].lifetime = cov_data->lifetime;
COV_Subscriptions[index].flag.send_requested = true;
(!cov_data->cancellationRequest)) {
const int addr_add_ret = cov_address_add(src);
if(addr_add_ret < 0) {
*error_class = ERROR_CLASS_RESOURCES;
*error_code = ERROR_CODE_NO_SPACE_TO_ADD_LIST_ELEMENT;
found = false;
} else {
COV_Subscriptions[index].dest_index = addr_add_ret;
index = first_invalid_index;
found = true;
COV_Subscriptions[index].flag.valid = true;
COV_Subscriptions[index].monitoredObjectIdentifier.type =
cov_data->monitoredObjectIdentifier.type;
COV_Subscriptions[index].monitoredObjectIdentifier.instance =
cov_data->monitoredObjectIdentifier.instance;
COV_Subscriptions[index].subscriberProcessIdentifier =
cov_data->subscriberProcessIdentifier;
COV_Subscriptions[index].flag.issueConfirmedNotifications =
cov_data->issueConfirmedNotifications;
COV_Subscriptions[index].invokeID = 0;
COV_Subscriptions[index].lifetime = cov_data->lifetime;
COV_Subscriptions[index].flag.send_requested = true;
}
} else if (!existing_entry) {
if (first_invalid_index < 0) {
/* Out of resources */