[asterisk-commits] rmudgett: branch rmudgett/stasis_cache r409702 - in /team/rmudgett/stasis_cac...
SVN commits to the Asterisk project
asterisk-commits at lists.digium.com
Tue Mar 4 20:32:04 CST 2014
Author: rmudgett
Date: Tue Mar 4 20:32:00 2014
New Revision: 409702
URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=409702
Log:
devicestate.c: Store the eid and device name after the struct.
Modified:
team/rmudgett/stasis_cache/include/asterisk/devicestate.h
team/rmudgett/stasis_cache/main/devicestate.c
Modified: team/rmudgett/stasis_cache/include/asterisk/devicestate.h
URL: http://svnview.digium.com/svn/asterisk/team/rmudgett/stasis_cache/include/asterisk/devicestate.h?view=diff&rev=409702&r1=409701&r2=409702
==============================================================================
--- team/rmudgett/stasis_cache/include/asterisk/devicestate.h (original)
+++ team/rmudgett/stasis_cache/include/asterisk/devicestate.h Tue Mar 4 20:32:00 2014
@@ -275,10 +275,20 @@
*/
/* BUGBUG the changes to this struct should only be done on trunk. Back them out for v12 version. */
struct ast_device_state_message {
- const char *device; /*!< The name of the device */
- struct ast_eid *eid; /*!< The EID of the server where this message originated, NULL EID means aggregate state */
- enum ast_device_state state; /*!< The state of the device */
- enum ast_devstate_cache cachable; /*!< Flag designating the cachability of this device state */
+ /*! The name of the device */
+ const char *device;
+ /*!
+ * \brief The EID of the server where this message originated.
+ *
+ * \note A NULL EID means aggregate state.
+ */
+ const struct ast_eid *eid;
+ /*! The state of the device */
+ enum ast_device_state state;
+ /*! Flag designating the cachability of this device state */
+ enum ast_devstate_cache cachable;
+ /*! The device and eid data is stuffed here when the struct is allocated. */
+ struct ast_eid stuff[0];
};
/*!
Modified: team/rmudgett/stasis_cache/main/devicestate.c
URL: http://svnview.digium.com/svn/asterisk/team/rmudgett/stasis_cache/main/devicestate.c?view=diff&rev=409702&r1=409701&r2=409702
==============================================================================
--- team/rmudgett/stasis_cache/main/devicestate.c (original)
+++ team/rmudgett/stasis_cache/main/devicestate.c Tue Mar 4 20:32:00 2014
@@ -526,40 +526,36 @@
return NULL;
}
-static void device_state_dtor(void *obj)
-{
- struct ast_device_state_message *device_state = obj;
-
- ast_free((char *) device_state->device);
- ast_free(device_state->eid);
-}
-
static struct ast_device_state_message *device_state_alloc(const char *device, enum ast_device_state state, enum ast_devstate_cache cachable, const struct ast_eid *eid)
{
struct ast_device_state_message *new_device_state;
+ char *pos;
+ size_t stuff_len;
ast_assert(!ast_strlen_zero(device));
- new_device_state = ao2_alloc_options(sizeof(*new_device_state), device_state_dtor,
+ stuff_len = strlen(device) + 1;
+ if (eid) {
+ stuff_len += sizeof(*eid);
+ }
+ new_device_state = ao2_alloc_options(sizeof(*new_device_state) + stuff_len, NULL,
AO2_ALLOC_OPT_LOCK_NOLOCK);
if (!new_device_state) {
return NULL;
}
- new_device_state->device = ast_strdup(device);
- if (!new_device_state->device) {
- ao2_cleanup(new_device_state);
- return NULL;
- }
if (eid) {
/* non-aggregate device state. */
- new_device_state->eid = ast_malloc(sizeof(*eid));
- if (!new_device_state->eid) {
- ao2_cleanup(new_device_state);
- return NULL;
- }
- *new_device_state->eid = *eid;
- }
+ new_device_state->stuff[0] = *eid;
+ new_device_state->eid = &new_device_state->stuff[0];
+ pos = (char *) &new_device_state->stuff[1];
+ } else {
+ pos = (char *) &new_device_state->stuff[0];
+ }
+
+ strcpy(pos, device);/* Safe */
+ new_device_state->device = pos;
+
new_device_state->state = state;
new_device_state->cachable = cachable;
More information about the asterisk-commits
mailing list