When a privileged thread exits, we have to use the kernel alloctor to free memory; when an unprivileged thread exits, we don't have to do anything... heap memory will be cleaned up when the address environment is torn down
This commit is contained in:
parent
44499ed46c
commit
fc35e35165
@ -194,7 +194,6 @@ if [ $answer = y ]; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
echo "EXTERN(up_initialize)" >>ld-locked.inc
|
echo "EXTERN(up_initialize)" >>ld-locked.inc
|
||||||
echo "EXTERN(lib_initialize)" >>ld-locked.inc
|
|
||||||
echo "EXTERN(sched_setupidlefiles)" >>ld-locked.inc
|
echo "EXTERN(sched_setupidlefiles)" >>ld-locked.inc
|
||||||
echo "EXTERN(task_create)" >>ld-locked.inc
|
echo "EXTERN(task_create)" >>ld-locked.inc
|
||||||
|
|
||||||
|
@ -65,10 +65,11 @@ extern "C"
|
|||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
* Public Function Prototypes
|
* Public Function Prototypes
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
/* Hook for library initialization. No is needed now, however */
|
||||||
|
|
||||||
/* Functions contained in lib_init.c ****************************************/
|
#define lib_initialize()
|
||||||
|
|
||||||
void weak_function lib_initialize(void);
|
/* Functions contained in lib_streams.c *************************************/
|
||||||
|
|
||||||
#if CONFIG_NFILE_STREAMS > 0
|
#if CONFIG_NFILE_STREAMS > 0
|
||||||
struct task_group_s;
|
struct task_group_s;
|
||||||
|
@ -69,18 +69,6 @@
|
|||||||
* Public Functions
|
* Public Functions
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
/****************************************************************************
|
|
||||||
* Name: lib_initialize
|
|
||||||
*
|
|
||||||
* Description:
|
|
||||||
* General library initialization hook
|
|
||||||
*
|
|
||||||
****************************************************************************/
|
|
||||||
|
|
||||||
void weak_const_function lib_initialize(void)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
* Name: lib_stream_initialize
|
* Name: lib_stream_initialize
|
||||||
*
|
*
|
||||||
@ -174,7 +162,24 @@ void lib_stream_release(FAR struct task_group_s *group)
|
|||||||
|
|
||||||
if (list->sl_streams[i].fs_bufstart)
|
if (list->sl_streams[i].fs_bufstart)
|
||||||
{
|
{
|
||||||
|
#ifndef CONFIG_ARCH_ADDRENV
|
||||||
|
/* Release memory from the user heap */
|
||||||
|
|
||||||
sched_ufree(list->sl_streams[i].fs_bufstart);
|
sched_ufree(list->sl_streams[i].fs_bufstart);
|
||||||
|
#else
|
||||||
|
/* If the exiting group is unprivileged, then it has an address
|
||||||
|
* environment. Don't bother to release the memory in this case...
|
||||||
|
* There is no point sense the memory lies in the user heap which
|
||||||
|
* will be destroyed anyway. But if this is a privileged group,
|
||||||
|
* when we still have to release the memory using the kernel
|
||||||
|
* allocator.
|
||||||
|
*/
|
||||||
|
|
||||||
|
if ((group->tg_flags & GROUP_FLAG_PRIVILEGED) != 0)
|
||||||
|
{
|
||||||
|
sched_ufree(list->sl_streams[i].fs_bufstart);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -485,16 +485,11 @@ void os_start(void)
|
|||||||
|
|
||||||
up_initialize();
|
up_initialize();
|
||||||
|
|
||||||
/* Initialize the C libraries (if included in the link). This
|
/* Initialize the C libraries. This is done last because the libraries
|
||||||
* is done last because the libraries may depend on the above.
|
* may depend on the above.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifdef CONFIG_HAVE_WEAKFUNCTIONS
|
lib_initialize();
|
||||||
if (lib_initialize != NULL)
|
|
||||||
#endif
|
|
||||||
{
|
|
||||||
lib_initialize();
|
|
||||||
}
|
|
||||||
|
|
||||||
/* IDLE Group Initialization **********************************************/
|
/* IDLE Group Initialization **********************************************/
|
||||||
#ifdef HAVE_TASK_GROUP
|
#ifdef HAVE_TASK_GROUP
|
||||||
|
Loading…
Reference in New Issue
Block a user