From: Joshua C. Colp Date: Sun, 18 Nov 2018 23:53:14 +0000 (-0400) Subject: stasis: Remove stringfields and lock from change message. X-Git-Tag: 16.1.0-rc1~13^2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=d05c219aadeeeee24ee2c62ae8ffdfb851223338;p=thirdparty%2Fasterisk.git stasis: Remove stringfields and lock from change message. When a subscribe or unsubscribe occurs a message is published containing this information. This change makes it so that the message no longer uses stringfields or a lock, as both are not really needed for the message. Change-Id: I3f4831931d79f94fd979baf48048738df5dc1632 --- diff --git a/include/asterisk/stasis.h b/include/asterisk/stasis.h index ebd00ee23d..85e78dcd11 100644 --- a/include/asterisk/stasis.h +++ b/include/asterisk/stasis.h @@ -806,11 +806,9 @@ int stasis_subscription_final_message(struct stasis_subscription *sub, struct st * \since 12 */ struct stasis_subscription_change { - AST_DECLARE_STRING_FIELDS( - AST_STRING_FIELD(uniqueid); /*!< The unique ID associated with this subscription */ - AST_STRING_FIELD(description); /*!< The description of the change to the subscription associated with the uniqueid */ - ); - struct stasis_topic *topic; /*!< The topic the subscription is/was subscribing to */ + struct stasis_topic *topic; /*!< The topic the subscription is/was subscribing to */ + char *uniqueid; /*!< The unique ID associated with this subscription */ + char description[0]; /*!< The description of the change to the subscription associated with the uniqueid */ }; /*! diff --git a/main/stasis.c b/main/stasis.c index 93112d98eb..417caaf195 100644 --- a/main/stasis.c +++ b/main/stasis.c @@ -1077,22 +1077,23 @@ static void subscription_change_dtor(void *obj) { struct stasis_subscription_change *change = obj; - ast_string_field_free_memory(change); ao2_cleanup(change->topic); } static struct stasis_subscription_change *subscription_change_alloc(struct stasis_topic *topic, const char *uniqueid, const char *description) { + size_t description_len = strlen(description) + 1; struct stasis_subscription_change *change; - change = ao2_alloc(sizeof(struct stasis_subscription_change), subscription_change_dtor); - if (!change || ast_string_field_init(change, 128)) { - ao2_cleanup(change); + change = ao2_alloc_options(sizeof(*change) + description_len + strlen(uniqueid) + 1, + subscription_change_dtor, AO2_ALLOC_OPT_LOCK_NOLOCK); + if (!change) { return NULL; } - ast_string_field_set(change, uniqueid, uniqueid); - ast_string_field_set(change, description, description); + strcpy(change->description, description); /* SAFE */ + change->uniqueid = change->description + description_len; + strcpy(change->uniqueid, uniqueid); /* SAFE */ ao2_ref(topic, +1); change->topic = topic;