diff --git a/http.c b/http.c
index fca076327736e05a7ead995a99af05c5ca20f400..cdcde76a882b0089bca6830ecc918b47ef208d74 100644
--- a/http.c
+++ b/http.c
@@ -297,23 +297,21 @@ static void *http_root(void *data)
 				ast_log(LOG_WARNING, "Accept failed: %s\n", strerror(errno));
 			continue;
 		}
-		ser = calloc(1, sizeof(*ser));
-		if (ser) {
-			ser->fd = fd;
-			if ((ser->f = fdopen(ser->fd, "w+"))) {
-				if (ast_pthread_create(&launched, NULL, ast_httpd_helper_thread, ser)) {
-					ast_log(LOG_WARNING, "Unable to launch helper thread: %s\n", strerror(errno));
-					fclose(ser->f);
-					free(ser);
-				}
-			} else {
-				ast_log(LOG_WARNING, "fdopen failed!\n");
-				close(ser->fd);
+		if (!(ser = ast_calloc(1, sizeof(*ser)))) {
+			close(fd);
+			continue;
+		}
+		ser->fd = fd;
+		if ((ser->f = fdopen(ser->fd, "w+"))) {
+			if (ast_pthread_create(&launched, NULL, ast_httpd_helper_thread, ser)) {
+				ast_log(LOG_WARNING, "Unable to launch helper thread: %s\n", strerror(errno));
+				fclose(ser->f);
 				free(ser);
 			}
 		} else {
-			ast_log(LOG_WARNING, "Out of memory!\n");
-			close(fd);
+			ast_log(LOG_WARNING, "fdopen failed!\n");
+			close(ser->fd);
+			free(ser);
 		}
 	}
 	return NULL;