This is the mail archive of the newlib@sourceware.org mailing list for the newlib project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: How to destroy _reent structure


On 4/24/2013 7:55 AM, Corinna Vinschen wrote:
On Apr 24 13:10, Sebastian Huber wrote:
Hello Corinna,

On 04/24/2013 12:26 PM, Corinna Vinschen wrote:
On Apr 24 10:04, Sebastian Huber wrote:
Hello,

there is _REENT_INIT_PTR() for initialization, but how can I destroy
a _reent structure.  Is this _wrapup_reent()?
Try _reclaim_reent.  But it's not the same as _REENT_INIT_PTR since
_REENT_INIT_PTR does not allocate any memory.


Corinna

so for initialization we can use:

struct _reent *p = malloc(sizeof(*p));
if (p != NULL) {
   _REENT_INIT_PTR(p);
}

For destruction we can use:

_reclaim_reent(p);
free(p);

What is the purpose of _wrapup_reent()?  Its not called from within
Newlib and I don't find a function that can register an atexit
handler in a non-global _reent structure.  There is also no public
header file for this function.
Sorry, I can't answer this question.  This code predates my involvement
in newlib and I never looked deeper into this.  Cygwin also uses
_reclaim_reent to get rid of the per-pthread reent structure.
We are looking at ancient history code. The RTEMS code that uses our extensions on thread create, delete, restart, and switch for newlib dates back to the 1992-3
time frame.

My vague recollection is that newlib had leaks. Looking at the comments in
reent.c, my impression is that the code and comments don't match.
_wrapup_reent() has a comment being run at "task exit" but task is undefined
in POSIX. For RTEMS task is synonymous with thread but this routine is
invoking atexit() methods.

_reclaim_reent() frees a lot and also invokes the atexit() but has comments
like this that indicate it is at process exit():

/* Malloc memory not reclaimed; no good way to return memory anyway. */

Looking at this again, I still don't see a clear indication of what should be invoked
at thread exit and what should be invoked at process exit.

What does Cygwin do at thread exit and process exit?

Any other insight? Except that the names don't add insight. :)


Corinna



--
Joel Sherrill, Ph.D.             Director of Research & Development
joel.sherrill@OARcorp.com        On-Line Applications Research
Ask me about RTEMS: a free RTOS  Huntsville AL 35805
Support Available                (256) 722-9985


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]