Author: mikej Date: Thu Mar 29 13:37:42 2007 New Revision: 4794 Modified: freeswitch/trunk/src/include/switch_utils.h freeswitch/trunk/src/switch_core.c freeswitch/trunk/src/switch_ivr.c Log: switch_malloc and switch_zmalloc macros that are fatal if malloc fails both in debug and release modes, switch_zmalloc includes a companion memset for the malloc'd block. Modified: freeswitch/trunk/src/include/switch_utils.h ============================================================================== --- freeswitch/trunk/src/include/switch_utils.h (original) +++ freeswitch/trunk/src/include/switch_utils.h Thu Mar 29 13:37:42 2007 @@ -247,6 +247,16 @@ #define SWITCH_READ_ACCEPTABLE(status) (status == SWITCH_STATUS_SUCCESS || status == SWITCH_STATUS_BREAK) SWITCH_DECLARE(size_t) switch_url_encode(char *url, char *buf, size_t len); SWITCH_DECLARE(char *) switch_url_decode(char *s); + +/* malloc or DIE macros */ +#ifdef NDEBUG +#define switch_malloc(ptr, len) (void)( (!!(ptr = malloc(len))) || (fprintf(stderr,"ABORT! Malloc failure at: %s:%s", __FILE__, __LINE__),abort(), 0), ptr ) +#define switch_zmalloc(ptr, len) (void)( (!!(ptr = malloc(len))) || (fprintf(stderr,"ABORT! Malloc failure at: %s:%s", __FILE__, __LINE__),abort(), 0), memset(ptr, 0, len)) +#else +#define switch_malloc(ptr, len) (void)(assert(((ptr) = malloc((len)))),ptr) +#define switch_zmalloc(ptr, len) (void)(assert((ptr = malloc(len))),memset(ptr, 0, len)) +#endif + SWITCH_END_EXTERN_C #endif Modified: freeswitch/trunk/src/switch_core.c ============================================================================== --- freeswitch/trunk/src/switch_core.c (original) +++ freeswitch/trunk/src/switch_core.c Thu Mar 29 13:37:42 2007 @@ -377,8 +377,7 @@ switch_core_scheduler_task_container_t *container, *tp; switch_mutex_lock(runtime.task_mutex); - assert((container = malloc(sizeof(*container)))); - memset(container, 0, sizeof(*container)); + switch_zmalloc(container, sizeof(*container)); assert(func); container->func = func; time(&container->task.created); Modified: freeswitch/trunk/src/switch_ivr.c ============================================================================== --- freeswitch/trunk/src/switch_ivr.c (original) +++ freeswitch/trunk/src/switch_ivr.c Thu Mar 29 13:37:42 2007 @@ -3281,8 +3281,7 @@ struct hangup_helper *helper; size_t len = sizeof(*helper); - assert((helper = malloc(len))); - memset(helper, 0, len); + switch_zmalloc(helper, len); switch_copy_string(helper->uuid_str, uuid, sizeof(helper->uuid_str)); helper->cause = cause; @@ -3332,9 +3331,8 @@ len += strlen(context) + 1; } - assert((helper = malloc(len))); - memset(helper, 0, len); - + switch_zmalloc(helper, len); + switch_copy_string(helper->uuid_str, uuid, sizeof(helper->uuid_str)); cur = (char *) helper + sizeof(*helper); @@ -3380,9 +3378,8 @@ struct broadcast_helper *helper; size_t len = sizeof(*helper) + strlen(path) + 1; - assert((helper = malloc(len))); - memset(helper, 0, len); - + switch_zmalloc(helper, len); + switch_copy_string(helper->uuid_str, uuid, sizeof(helper->uuid_str)); helper->flags = flags; helper->path = (char *) helper + sizeof(*helper);