[Asterisk-code-review] main/devicestate: Prevent duplicate registration of device s... (asterisk[master])

Matt Jordan asteriskteam at digium.com
Sat Jul 4 20:31:05 CDT 2015


Matt Jordan has uploaded a new change for review.

  https://gerrit.asterisk.org/785

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, 10 insertions(+), 0 deletions(-)


  git pull ssh://gerrit.asterisk.org:29418/asterisk refs/changes/85/785/1

diff --git a/main/devicestate.c b/main/devicestate.c
index e2cc2f2..bf4928d 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,15 @@
 	ast_copy_string(devprov->label, label, sizeof(devprov->label));
 
 	AST_RWLIST_WRLOCK(&devstate_provs);
+	AST_RWLIST_TRAVERSE_SAFE_BEGIN(&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_TRAVERSE_SAFE_END;
 	AST_RWLIST_INSERT_HEAD(&devstate_provs, devprov, list);
 	AST_RWLIST_UNLOCK(&devstate_provs);
 

-- 
To view, visit https://gerrit.asterisk.org/785
To unsubscribe, visit https://gerrit.asterisk.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I4a418a12280b7b6e4960bd44f302e27cd036ceb2
Gerrit-PatchSet: 1
Gerrit-Project: asterisk
Gerrit-Branch: master
Gerrit-Owner: Matt Jordan <mjordan at digium.com>



More information about the asterisk-code-review mailing list