Files
rtems/cpukit/libcsupport/src/malloc_deferred.c
Joel Sherrill 635865aefd 2008-01-09 Joel Sherrill <joel.sherrill@oarcorp.com>
* libcsupport/Makefile.am, libcsupport/include/rtems/malloc.h,
	libcsupport/src/free.c, libcsupport/src/malloc.c,
	libcsupport/src/malloc_deferred.c,
	libcsupport/src/malloc_initialize.c, libcsupport/src/malloc_p.h,
	libcsupport/src/malloc_sbrk_helpers.c,
	libcsupport/src/posix_memalign.c: Place all deferred free code and
	place it in subroutines. Add plugin for dirtying allocated memory to
	assist in debugging. Clean up comments and spacing as needed.
	* libcsupport/src/malloc_dirtier.c: New file.
2008-01-09 21:08:36 +00:00

61 lines
1.1 KiB
C

/*
* Process free requests deferred because they were from ISR
* or other critical section.
*
* COPYRIGHT (c) 1989-2007.
* On-Line Applications Research Corporation (OAR).
*
* The license and distribution terms for this file may be
* found in the file LICENSE in this distribution or at
* http://www.rtems.com/license/LICENSE.
*
* $Id$
*/
#if HAVE_CONFIG_H
#include "config.h"
#endif
#ifdef RTEMS_NEWLIB
#include <stdlib.h>
#include <errno.h>
#include "malloc_p.h"
Chain_Control RTEMS_Malloc_GC_list;
boolean malloc_is_system_state_OK(void)
{
if ( _Thread_Dispatch_disable_level > 0 )
return FALSE;
if ( _ISR_Nest_level > 0 )
return FALSE;
return TRUE;
}
void malloc_deferred_frees_initialize(void)
{
Chain_Initialize_empty(&RTEMS_Malloc_GC_list);
}
void malloc_deferred_frees_process(void)
{
Chain_Node *to_be_freed;
/*
* If some free's have been deferred, then do them now.
*/
while ((to_be_freed = Chain_Get(&RTEMS_Malloc_GC_list)) != NULL)
free(to_be_freed);
}
void malloc_deferred_free(
void *pointer
)
{
Chain_Append(&RTEMS_Malloc_GC_list, (Chain_Node *)pointer);
}
#endif