[ECOS] "Threads on ecos" confirmation needed...

Ivan Horvat ihorvat@xylon.hr
Fri Jan 30 20:53:00 GMT 2004

Hello again.

>Of course, but you can't do that with stacks (well, you can if you use the
>same stack size for each thread).
>Even if you could you'd still need per-thread clean-up code.

Why this can't be done with stacks? The "exit" method is quite simple 
and can be modified
not to use stack variables. Initial creation of stack-frame and saving 
the return address can be
avoided, I think, using "__attribute__" (or similar) gcc directives. Or 
thread->exit() may
be inline... And per-thread clean-up code is ok for me, only if it can 
be done either by the
thread that is about to exit, or by the *exit() function.

> IH> The stack could be freed/cleaned by the exiting thread before calling
> IH> *exit() (I think) and
> IH> the above solution would "free" the space for thread object.
>You're calling the thread->exit() so the return address is placed on the

Of course. But I'm using MIPS, and it doesn't automatically place the 
return address on the stack.
The call to exit() could be performed from "asm" macro, without saving 
the return address.
Thread never returns from thread->exit(), so return address is not 
needed any more.
However, this problem can also be solved by temporarily switching the 
stack of the thread (with
some simple synchronization) to universal "pre-exit stack", which would 
resolve this and the above
(cleaning stacks) issue as well. This would be, of course, platform 
dependent, but still simple.

>You can create a wrapper around the 'thread' object and modify "exit"

Yes, that's the other possibility.

>The "garbage collector" could be included inside the "idle" thread.

Well, this is nice one. Why "idle" should idle, when it can be useful? :-)


Before posting, please read the FAQ: http://sources.redhat.com/fom/ecos
and search the list archive: http://sources.redhat.com/ml/ecos-discuss

More information about the Ecos-discuss mailing list