Merged revisions 312022 via svnmerge from
https://origsvn.digium.com/svn/asterisk/branches/1.8 ........ r312022 | rmudgett | 2011-03-31 15:11:40 -0500 (Thu, 31 Mar 2011) | 14 lines chan_misdn segfaults when DEBUG_THREADS is enabled. The segfault happens because jb->mutexjb is uninitialized from the ast_malloc(). The internals of ast_mutex_init() were assuming a nonzero value meant mutex tracking initialization had already happened. Recent changes to mutex tracking code to reduce excessive memory consumption exposed this uninitialized value. Converted misdn_jb_init() to use ast_calloc() instead of ast_malloc(). Also eliminated redundant zero initialization code in the routine. (closes issue #18975) Reported by: irroot ........ git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@312023 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
parent
57d979fa26
commit
ee44bf7257
1 changed files with 8 additions and 13 deletions
|
@ -12453,29 +12453,28 @@ int chan_misdn_jb_empty(struct misdn_bchannel *bc, char *buf, int len)
|
||||||
/* allocates the jb-structure and initialize the elements*/
|
/* allocates the jb-structure and initialize the elements*/
|
||||||
struct misdn_jb *misdn_jb_init(int size, int upper_threshold)
|
struct misdn_jb *misdn_jb_init(int size, int upper_threshold)
|
||||||
{
|
{
|
||||||
int i;
|
|
||||||
struct misdn_jb *jb;
|
struct misdn_jb *jb;
|
||||||
|
|
||||||
jb = ast_malloc(sizeof(*jb));
|
jb = ast_calloc(1, sizeof(*jb));
|
||||||
if (!jb) {
|
if (!jb) {
|
||||||
chan_misdn_log(-1, 0, "No free Mem for jb\n");
|
chan_misdn_log(-1, 0, "No free Mem for jb\n");
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
jb->size = size;
|
jb->size = size;
|
||||||
jb->upper_threshold = upper_threshold;
|
jb->upper_threshold = upper_threshold;
|
||||||
jb->wp = 0;
|
//jb->wp = 0;
|
||||||
jb->rp = 0;
|
//jb->rp = 0;
|
||||||
jb->state_full = 0;
|
//jb->state_full = 0;
|
||||||
jb->state_empty = 0;
|
//jb->state_empty = 0;
|
||||||
jb->bytes_wrote = 0;
|
//jb->bytes_wrote = 0;
|
||||||
jb->samples = ast_malloc(size * sizeof(char));
|
jb->samples = ast_calloc(size, sizeof(*jb->samples));
|
||||||
if (!jb->samples) {
|
if (!jb->samples) {
|
||||||
ast_free(jb);
|
ast_free(jb);
|
||||||
chan_misdn_log(-1, 0, "No free Mem for jb->samples\n");
|
chan_misdn_log(-1, 0, "No free Mem for jb->samples\n");
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
jb->ok = ast_malloc(size * sizeof(char));
|
jb->ok = ast_calloc(size, sizeof(*jb->ok));
|
||||||
if (!jb->ok) {
|
if (!jb->ok) {
|
||||||
ast_free(jb->samples);
|
ast_free(jb->samples);
|
||||||
ast_free(jb);
|
ast_free(jb);
|
||||||
|
@ -12483,10 +12482,6 @@ struct misdn_jb *misdn_jb_init(int size, int upper_threshold)
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (i = 0; i < size; i++) {
|
|
||||||
jb->ok[i] = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
ast_mutex_init(&jb->mutexjb);
|
ast_mutex_init(&jb->mutexjb);
|
||||||
|
|
||||||
return jb;
|
return jb;
|
||||||
|
|
Loading…
Reference in a new issue