diff --git a/main/channel.c b/main/channel.c
index 75db6d28f37f726e2914175fe4961c7e693c74bf..3b06b266ad37ab6dc17b5a40873e691323036151 100644
--- a/main/channel.c
+++ b/main/channel.c
@@ -1572,7 +1572,8 @@ int ast_hangup(struct ast_channel *chan)
 	}
 	
 	if (chan->generatordata)	/* Clear any tone stuff remaining */
-		chan->generator->release(chan, chan->generatordata);
+		if (chan->generator && chan->generator->release)
+			chan->generator->release(chan, chan->generatordata);
 	chan->generatordata = NULL;
 	chan->generator = NULL;
 	if (chan->cdr) {		/* End the CDR if it hasn't already */