plug a couple of memleaks in chan_skinny.
authorMichiel van Baak <michiel@vanbaak.info>
Sun, 14 Sep 2008 22:16:34 +0000 (22:16 +0000)
committerMichiel van Baak <michiel@vanbaak.info>
Sun, 14 Sep 2008 22:16:34 +0000 (22:16 +0000)
(closes issue #13452)
Reported by: pj
Patches:
      memleak5.diff uploaded by wedhorn (license 30)
Tested by: wedhorn, pj, mvanbaak

(closes issue #13294)
Reported by: pj

git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@143082 65c4cc65-6c06-0410-ace0-fbb531ad65f3

channels/chan_skinny.c

index b25d492..6eb2c59 100644 (file)
@@ -1851,7 +1851,7 @@ static int transmit_response(struct skinny_device *d, struct skinny_req *req)
        memcpy(s->outbuf+skinny_header_size, &req->data, letohl(req->len));
 
        res = write(s->fd, s->outbuf, letohl(req->len)+8);
-
+       
        if (res != letohl(req->len)+8) {
                ast_log(LOG_WARNING, "Transmit: write only sent %d out of %d bytes: %s\n", res, letohl(req->len)+8, strerror(errno));
                if (res == -1) {
@@ -1862,6 +1862,7 @@ static int transmit_response(struct skinny_device *d, struct skinny_req *req)
                
        }
        
+       ast_free(req);
        ast_mutex_unlock(&s->lock);
        return 1;
 }
@@ -1963,9 +1964,11 @@ static void transmit_tone(struct skinny_device *d, int tone, int instance, int r
                req->data.stoptone.reference = htolel(reference);
        }
 
-       if (tone > 0) {
-               req->data.starttone.tone = htolel(tone);
-       }
+       //Bad, tone is already set so this is redundant and a change to the if above
+       //may lead to issues where we try to set a tone to a stop_tone_message
+       //if (tone > 0) {
+       //      req->data.starttone.tone = htolel(tone);
+       //}
        transmit_response(d, req);
 }
 
@@ -2029,8 +2032,10 @@ static void transmit_displaymessage(struct skinny_device *d, const char *text, i
                if (!(req = req_alloc(0, CLEAR_DISPLAY_MESSAGE)))
                        return;
 
-               req->data.clearpromptstatus.lineInstance = instance;
-               req->data.clearpromptstatus.callReference = reference;
+               //what do we want hear CLEAR_DISPLAY_MESSAGE or CLEAR_PROMPT_STATUS???
+               //if we are clearing the display, it appears there is no instance and refernece info (size 0)
+               //req->data.clearpromptstatus.lineInstance = instance;
+               //req->data.clearpromptstatus.callReference = reference;
 
                if (skinnydebug)
                        ast_verb(1, "Clearing Display\n");
@@ -3549,6 +3554,7 @@ static int skinny_hangup(struct ast_channel *ast)
                sub->rtp = NULL;
        }
        ast_mutex_unlock(&sub->lock);
+       ast_free(sub);
        return 0;
 }