fix a memory leak in device state
authorTzafrir Cohen <tzafrir.cohen@xorcom.com>
Mon, 21 Feb 2011 13:58:18 +0000 (13:58 +0000)
committerTzafrir Cohen <tzafrir.cohen@xorcom.com>
Mon, 21 Feb 2011 13:58:18 +0000 (13:58 +0000)
The callback handle_statechange (pbx.c) fails to release its data
pointer, leaking memory in the process.

Reported by: tzafrir
Patches:
      18735_pbx_free_callback.diff uploaded by tzafrir (license 46)

Review: https://reviewboard.asterisk.org/r/1110/

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

main/pbx.c

index fe52ea2..6b75c77 100644 (file)
@@ -4348,9 +4348,11 @@ static int handle_statechange(void *datap)
        struct ao2_iterator cb_iter;
 
        if (ao2_container_count(hintdevices) == 0) {
        struct ao2_iterator cb_iter;
 
        if (ao2_container_count(hintdevices) == 0) {
+               ast_free(sc);
                return 0;
        }
        if (!(cmpdevice = ast_malloc(sizeof(*cmpdevice) + strlen(sc->dev)))) {
                return 0;
        }
        if (!(cmpdevice = ast_malloc(sizeof(*cmpdevice) + strlen(sc->dev)))) {
+               ast_free(sc);
                return -1;
        }
        strcpy(cmpdevice->hintdevice, sc->dev);
                return -1;
        }
        strcpy(cmpdevice->hintdevice, sc->dev);
@@ -4414,6 +4416,7 @@ static int handle_statechange(void *datap)
        if (cmpdevice) {
                ast_free(cmpdevice);
        }
        if (cmpdevice) {
                ast_free(cmpdevice);
        }
+       ast_free(sc);
        return 0;
 }
 
        return 0;
 }