[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