From: Mark Michelson Date: Tue, 9 Sep 2008 10:20:58 +0000 (+0000) Subject: Fix a memory leak in chan_oss X-Git-Tag: 1.6.2.0-beta1~1303 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=68bc5b446dcbdb79b7fd14bc0529c899afa239d9;p=thirdparty%2Fasterisk.git Fix a memory leak in chan_oss (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 --- diff --git a/channels/chan_oss.c b/channels/chan_oss.c index a3908a5048..b3c29c0315 100644 --- a/channels/chan_oss.c +++ b/channels/chan_oss.c @@ -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; }