diff --git a/channels/chan_dahdi.c b/channels/chan_dahdi.c
index 82b21292aa8a101cd1ca936096c3aaafd2654213..e9cc7539cae76f79a5cc168785a915d640fa71f9 100644
--- a/channels/chan_dahdi.c
+++ b/channels/chan_dahdi.c
@@ -11949,6 +11949,11 @@ static struct dahdi_pvt *handle_init_event(struct dahdi_pvt *i, int event)
 	return NULL;
 }
 
+static void monitor_pfds_clean(void *arg) {
+	struct pollfd **pfds = arg;
+	ast_free(*pfds);
+}
+
 static void *do_monitor(void *data)
 {
 	int count, res, res2, spoint, pollres=0;
@@ -11972,6 +11977,7 @@ static void *do_monitor(void *data)
 #endif
 	pthread_setcancelstate(PTHREAD_CANCEL_DISABLE, NULL);
 
+	pthread_cleanup_push(monitor_pfds_clean, &pfds);
 	for (;;) {
 		/* Lock the interface list */
 		ast_mutex_lock(&iflock);
@@ -12231,6 +12237,7 @@ static void *do_monitor(void *data)
 		ast_mutex_unlock(&iflock);
 	}
 	/* Never reached */
+	pthread_cleanup_pop(1);
 	return NULL;
 
 }
diff --git a/codecs/ilbc/doCPLC.c b/codecs/ilbc/doCPLC.c
index adbfac71a2404ef421035d4b037e27f4b191b4c7..9fa4584fe8dee53efca3d398a936c573a9d10070 100644
--- a/codecs/ilbc/doCPLC.c
+++ b/codecs/ilbc/doCPLC.c
@@ -90,7 +90,7 @@
        int lag=20, randlag;
        float gain, maxcc;
        float use_gain;
-       float gain_comp, maxcc_comp, per, max_per;
+       float gain_comp, maxcc_comp, per, max_per=0;
        int i, pick, use_lag;
        float ftmp, randvec[BLOCKL_MAX], pitchfact, energy;
 
diff --git a/main/app.c b/main/app.c
index 29333b2b990f647f1f08e9fd3829618fb05c29dc..084eb15dfbbeeea3b8228d1b059fbb4cf9593627 100644
--- a/main/app.c
+++ b/main/app.c
@@ -2579,7 +2579,9 @@ int ast_app_parse_timelen(const char *timestr, int *result, enum ast_timelen uni
 		return -1;
 	}
 
-	if ((res = sscanf(timestr, FMT, &amount, u)) == 0) {
+	res = sscanf(timestr, FMT, &amount, u);
+
+	if (res == 0 || res == EOF) {
 #undef FMT
 		return -1;
 	} else if (res == 2) {
diff --git a/main/asterisk.c b/main/asterisk.c
index 1aecf8424b77ddcd31398e35638041585037c3a4..a8b8293df00177fd4d1bff825b6ba761727e02a9 100644
--- a/main/asterisk.c
+++ b/main/asterisk.c
@@ -1836,11 +1836,17 @@ static void really_quit(int num, shutdown_nice_t niceness, int restart)
 		close(ast_socket);
 		ast_socket = -1;
 		unlink(ast_config_AST_SOCKET);
+		pthread_kill(lthread, SIGURG);
+		pthread_join(lthread, NULL);
 	}
 	if (ast_consock > -1)
 		close(ast_consock);
 	if (!ast_opt_remote)
 		unlink(ast_config_AST_PID);
+	if (sig_alert_pipe[0])
+		close(sig_alert_pipe[0]);
+	if (sig_alert_pipe[1])
+		close(sig_alert_pipe[1]);
 	printf("%s", term_quit());
 	if (restart) {
 		int i;
diff --git a/main/data.c b/main/data.c
index 02182ed1bdfc1fabdb9923cf74f3fc59cddaccad..de7b7b6ec9a921e23ad986b8d5168895bc5845d0 100644
--- a/main/data.c
+++ b/main/data.c
@@ -3322,6 +3322,7 @@ static void data_shutdown(void)
 	ao2_t_ref(root_data.container, -1, "Unref root_data.container in data_shutdown");
 	root_data.container = NULL;
 	ast_rwlock_destroy(&root_data.lock);
+	AST_TEST_UNREGISTER(test_data_get);
 }
 
 int ast_data_init(void)
@@ -3339,9 +3340,7 @@ int ast_data_init(void)
 
 	res |= ast_manager_register_xml_core("DataGet", 0, manager_data_get);
 
-#ifdef TEST_FRAMEWORK
 	AST_TEST_REGISTER(test_data_get);
-#endif
 
 	ast_register_atexit(data_shutdown);
 
diff --git a/utils/clicompat.c b/utils/clicompat.c
index 33f90fae167b2eb9561000de71e4e69e3cff8b1c..d46ed897d77e9d58e2cb6ab71b723d0477928e37 100644
--- a/utils/clicompat.c
+++ b/utils/clicompat.c
@@ -9,8 +9,18 @@ void ast_cli(int fd, const char *fmt, ...)
 
 struct ast_cli_entry;
 
+int ast_register_atexit(void (*func)(void));
+int ast_register_atexit(void (*func)(void))
+{
+	return 0;
+}
 int ast_cli_register_multiple(struct ast_cli_entry *e, int len);
 int ast_cli_register_multiple(struct ast_cli_entry *e, int len)
 {
 	return 0;
 }
+int ast_cli_unregister_multiple(struct ast_cli_entry *e, int len);
+int ast_cli_unregister_multiple(struct ast_cli_entry *e, int len)
+{
+	return 0;
+}