In threaded processes, destroy the mutex atexit_mutex when we've

finished using it.  This allows the mutex's allocated memory to be
freed.

This is one sense a rather silly change, since at this point we're
less than a microsecond away from calling _exit; but fixing this
memory leak is likely to make life easier for anyone trying to
track down other memory leaks.
This commit is contained in:
Colin Percival 2010-06-13 01:13:36 +00:00
parent 27d1c65e8e
commit ff847ecb82

View File

@ -54,6 +54,7 @@ static pthread_mutex_t atexit_mutex = PTHREAD_MUTEX_INITIALIZER;
#define _MUTEX_LOCK(x) if (__isthreaded) _pthread_mutex_lock(x)
#define _MUTEX_UNLOCK(x) if (__isthreaded) _pthread_mutex_unlock(x)
#define _MUTEX_DESTROY(x) if (__isthreaded) _pthread_mutex_destroy(x)
struct atexit {
struct atexit *next; /* next in list */
@ -182,4 +183,6 @@ __cxa_finalize(void *dso)
}
}
_MUTEX_UNLOCK(&atexit_mutex);
if (dso == NULL)
_MUTEX_DESTROY(&atexit_mutex);
}