Fix tiny memory leaks around rt_task_self()
PATCH 1/1 Fix tiny memory leaks around rt_task_self()
Nothing critical, but when using rt_task_self != NULL as a hint if the caller is Xenomai-mapped or not, this stall malloc can become at least unpleasant. This is also material for stable.
Jan
---
ChangeLog +5 -0
@@ -1,3 +1,8 @@ +2008-04-11 Jan Kiszka <[email protected]> + + * src/skins/native/task.c: Fix tiny memory leaks of the task's + self-reference key. +
2008-04-10 Philippe Gerum <[email protected]>
* src/skins/*: Force minimum stack size to 32k, in order to work
src/skins/native/task.c +0 -0
@@ -52,6 +52,11 @@ static void rt_task_sigharden(int sig)
XENOMAI_SYSCALL1(__xn_sys_migrate, XENOMAI_XENO_DOMAIN); }
+static void rt_task_cleanup_tskey(void *arg)
+{
+ free(pthread_getspecific(__native_tskey));
+}
+
static void *rt_task_trampoline(void *cookie)
{
struct rt_task_iargs *iargs = (struct rt_task_iargs *)cookie;
@@ -92,8 +97,11 @@ static void *rt_task_trampoline(void *co
err = XENOMAI_SYSCALL2(__xn_sys_barrier, &entry, &cookie);
while (err == -EINTR);- if (!err)
+ if (!err) {
+ pthread_cleanup_push(rt_task_cleanup_tskey, NULL); entry(cookie);
+ pthread_cleanup_pop(1);
+ }
fail:
@@ -294,8 +302,10 @@ RT_TASK *rt_task_self(void)
self = (RT_TASK *)malloc(sizeof(*self));
if (!self ||
- XENOMAI_SKINCALL1(__native_muxid, __native_task_self, self) != 0)
+ XENOMAI_SKINCALL1(__native_muxid, __native_task_self, self) != 0) {
+ free(self);
return NULL;+ }
pthread_setspecific(__native_tskey, self);
Quoted 3 lines · Jan Kiszka
Nothing critical, but when using
rt_task_self!= NULL as a hint if the caller is Xenomai-mapped or not, this stall malloc can become at least unpleasant. This is also material for stable.
This looks useless: TSD cleanup routines are automatically called upon thread termination. It is even worse: you risk a double free if you do not re-set pthread_setspecific after having called free.
Signature · 1 line
Gilles.
Quoted 8 lines · Gilles Chanteperdrix
Quoted 3 lines · Jan Kiszka
Nothing critical, but when using
rt_task_self!= NULL as a hint if the caller is Xenomai-mapped or not, this stall malloc can become at least unpleasant. This is also material for stable.This looks useless: TSD cleanup routines are automatically called upon thread termination. It is even worse: you risk a double free if you do not re-set
pthread_setspecificafter having called free.
Ah, I missed the already existing cleanup in init.c. Then we are done with this patch:
ChangeLog +5 -0
@@ -1,3 +1,8 @@ +2008-04-11 Jan Kiszka <[email protected]> + + * src/skins/native/task.c (rt_task_self): Fix tiny memory leak + when being invoked over a non-Xenomai thread. +
2008-04-10 Philippe Gerum <[email protected]>
* src/skins/*: Force minimum stack size to 32k, in order to work
src/skins/native/task.c +0 -0
@@ -294,8 +294,10 @@ RT_TASK *rt_task_self(void)
self = (RT_TASK *)malloc(sizeof(*self));
if (!self ||
- XENOMAI_SKINCALL1(__native_muxid, __native_task_self, self) != 0)
+ XENOMAI_SKINCALL1(__native_muxid, __native_task_self, self) != 0) {
+ free(self);
return NULL;+ }
pthread_setspecific(__native_tskey, self);