New comments about thread allocation and deallocation.
This commit is contained in:
parent
e19a872c2b
commit
a7526befe4
@ -255,6 +255,9 @@ cpu_create(unsigned hardware_number)
|
|||||||
* Nor can it be called on a running thread.
|
* Nor can it be called on a running thread.
|
||||||
*
|
*
|
||||||
* (Freeing the stack you're actually using to run is ... inadvisable.)
|
* (Freeing the stack you're actually using to run is ... inadvisable.)
|
||||||
|
*
|
||||||
|
* Thread destroy should finish the process of cleaning up a thread started by
|
||||||
|
* thread_exit.
|
||||||
*/
|
*/
|
||||||
static
|
static
|
||||||
void
|
void
|
||||||
@ -263,11 +266,6 @@ thread_destroy(struct thread *thread)
|
|||||||
KASSERT(thread != curthread);
|
KASSERT(thread != curthread);
|
||||||
KASSERT(thread->t_state != S_RUN);
|
KASSERT(thread->t_state != S_RUN);
|
||||||
|
|
||||||
/*
|
|
||||||
* If you add things to struct thread, be sure to clean them up
|
|
||||||
* either here or in thread_exit(). (And not both...)
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* Thread subsystem fields */
|
/* Thread subsystem fields */
|
||||||
KASSERT(thread->t_proc == NULL);
|
KASSERT(thread->t_proc == NULL);
|
||||||
if (thread->t_stack != NULL) {
|
if (thread->t_stack != NULL) {
|
||||||
@ -771,6 +769,13 @@ thread_startup(void (*entrypoint)(void *data1, unsigned long data2),
|
|||||||
* should be cleaned up right away. The rest has to wait until
|
* should be cleaned up right away. The rest has to wait until
|
||||||
* thread_destroy is called from exorcise().
|
* thread_destroy is called from exorcise().
|
||||||
*
|
*
|
||||||
|
* Note that any dynamically-allocated structures that can vary in size from
|
||||||
|
* thread to thread should be cleaned up here, not in thread_destroy. This is
|
||||||
|
* because the last thread left on each core runs the idle loop and does not
|
||||||
|
* get cleaned up until new threads are created. Differences in the amount of
|
||||||
|
* memory used by different threads after thread_exit will make it look like
|
||||||
|
* your kernel in leaking memory and cause some of the test161 checks to fail.
|
||||||
|
*
|
||||||
* Does not return.
|
* Does not return.
|
||||||
*/
|
*/
|
||||||
void
|
void
|
||||||
|
Loading…
x
Reference in New Issue
Block a user