Fix a memory leak in chan_oss
authorMark Michelson <mmichelson@digium.com>
Tue, 9 Sep 2008 10:20:58 +0000 (10:20 +0000)
committerMark Michelson <mmichelson@digium.com>
Tue, 9 Sep 2008 10:20:58 +0000 (10:20 +0000)
(closes issue #13311)
Reported by: eliel
Patches:
      chan_oss.c.patch uploaded by eliel (license 64)

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

channels/chan_oss.c

index a3908a5..b3c29c0 100644 (file)
@@ -1464,18 +1464,22 @@ static int load_module(void)
 
 static int unload_module(void)
 {
-       struct chan_oss_pvt *o;
+       struct chan_oss_pvt *o, *next;
 
        ast_channel_unregister(&oss_tech);
        ast_cli_unregister_multiple(cli_oss, sizeof(cli_oss) / sizeof(struct ast_cli_entry));
 
-       for (o = oss_default.next; o; o = o->next) {
+       o = oss_default.next;
+       while (o) {
                close(o->sounddev);
                if (o->owner)
                        ast_softhangup(o->owner, AST_SOFTHANGUP_APPUNLOAD);
                if (o->owner)                   /* XXX how ??? */
                        return -1;
-               /* XXX what about the memory allocated ? */
+               next = o->next;
+               ast_free(o->name);
+               ast_free(o);
+               o = next;
        }
        return 0;
 }