[asterisk-commits] main/devicestate: Prevent duplicate registration of device s... (asterisk[13])
    SVN commits to the Asterisk project 
    asterisk-commits at lists.digium.com
       
    Sat Jul 11 11:04:20 CDT 2015
    
    
  
Matt Jordan has submitted this change and it was merged.
Change subject: main/devicestate: Prevent duplicate registration of device state providers
......................................................................
main/devicestate: Prevent duplicate registration of device state providers
Currently, the device state provider API will allow you to register a
device state provider with the same case insensitive name more than
once. This could cause strange issues, as the duplicate device state
providers will not be queried when a device's state has to be polled.
This patch updates the API such that a device state provider with the
same name as one that has already registered will be rejected.
Change-Id: I4a418a12280b7b6e4960bd44f302e27cd036ceb2
---
M main/devicestate.c
1 file changed, 9 insertions(+), 0 deletions(-)
Approvals:
  Matt Jordan: Looks good to me, approved; Verified
  Joshua Colp: Looks good to me, but someone else must approve
diff --git a/main/devicestate.c b/main/devicestate.c
index 7eb9e30..2983ee9 100644
--- a/main/devicestate.c
+++ b/main/devicestate.c
@@ -397,6 +397,7 @@
 /*! \brief Add device state provider */
 int ast_devstate_prov_add(const char *label, ast_devstate_prov_cb_type callback)
 {
+	struct devstate_prov *devcb;
 	struct devstate_prov *devprov;
 
 	if (!callback || !(devprov = ast_calloc(1, sizeof(*devprov))))
@@ -406,6 +407,14 @@
 	ast_copy_string(devprov->label, label, sizeof(devprov->label));
 
 	AST_RWLIST_WRLOCK(&devstate_provs);
+	AST_RWLIST_TRAVERSE(&devstate_provs, devcb, list) {
+		if (!strcasecmp(devcb->label, label)) {
+			ast_log(LOG_WARNING, "Device state provider '%s' already registered\n", label);
+			ast_free(devprov);
+			AST_RWLIST_UNLOCK(&devstate_provs);
+			return -1;
+		}
+	}
 	AST_RWLIST_INSERT_HEAD(&devstate_provs, devprov, list);
 	AST_RWLIST_UNLOCK(&devstate_provs);
 
-- 
To view, visit https://gerrit.asterisk.org/784
To unsubscribe, visit https://gerrit.asterisk.org/settings
Gerrit-MessageType: merged
Gerrit-Change-Id: I4a418a12280b7b6e4960bd44f302e27cd036ceb2
Gerrit-PatchSet: 2
Gerrit-Project: asterisk
Gerrit-Branch: 13
Gerrit-Owner: Matt Jordan <mjordan at digium.com>
Gerrit-Reviewer: Anonymous Coward #1000019
Gerrit-Reviewer: Joshua Colp <jcolp at digium.com>
Gerrit-Reviewer: Matt Jordan <mjordan at digium.com>
    
    
More information about the asterisk-commits
mailing list