From 99a682e7a72f43af20003b50f2593d2d26ef1ee2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Beat=20K=C3=BCng?= Date: Tue, 3 May 2016 16:15:56 +0200 Subject: [PATCH] fix px4_task_spawn_cmd: memory leak, if one of the pthread_* calls fails --- src/platforms/posix/px4_layer/px4_posix_tasks.cpp | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/platforms/posix/px4_layer/px4_posix_tasks.cpp b/src/platforms/posix/px4_layer/px4_posix_tasks.cpp index 50be2b0ccc..88b1e0a728 100644 --- a/src/platforms/posix/px4_layer/px4_posix_tasks.cpp +++ b/src/platforms/posix/px4_layer/px4_posix_tasks.cpp @@ -170,6 +170,7 @@ px4_task_t px4_task_spawn_cmd(const char *name, int scheduler, int priority, int if (rv != 0) { PX4_WARN("px4_task_spawn_cmd: failed to init thread attrs"); + free(taskdata); return (rv < 0) ? rv : -rv; } @@ -183,6 +184,7 @@ px4_task_t px4_task_spawn_cmd(const char *name, int scheduler, int priority, int if (rv != 0) { PX4_ERR("pthread_attr_setstacksize to %d returned error (%d)", stack_size, rv); + free(taskdata); return (rv < 0) ? rv : -rv; } @@ -192,6 +194,7 @@ px4_task_t px4_task_spawn_cmd(const char *name, int scheduler, int priority, int if (rv != 0) { PX4_WARN("px4_task_spawn_cmd: failed to set inherit sched"); + free(taskdata); return (rv < 0) ? rv : -rv; } @@ -199,6 +202,7 @@ px4_task_t px4_task_spawn_cmd(const char *name, int scheduler, int priority, int if (rv != 0) { PX4_WARN("px4_task_spawn_cmd: failed to set sched policy"); + free(taskdata); return (rv < 0) ? rv : -rv; } @@ -208,6 +212,7 @@ px4_task_t px4_task_spawn_cmd(const char *name, int scheduler, int priority, int if (rv != 0) { PX4_WARN("px4_task_spawn_cmd: failed to set sched param"); + free(taskdata); return (rv < 0) ? rv : -rv; } @@ -235,10 +240,12 @@ px4_task_t px4_task_spawn_cmd(const char *name, int scheduler, int priority, int if (rv != 0) { PX4_ERR("px4_task_spawn_cmd: failed to create thread %d %d\n", rv, errno); taskmap[taskid].isused = false; + free(taskdata); return (rv < 0) ? rv : -rv; } } else { + free(taskdata); return (rv < 0) ? rv : -rv; } }