Static thread names.
This commit is contained in:
parent
ca4b4de58b
commit
e19a872c2b
@ -48,6 +48,7 @@ struct cpu;
|
|||||||
|
|
||||||
/* Size of kernel stacks; must be power of 2 */
|
/* Size of kernel stacks; must be power of 2 */
|
||||||
#define STACK_SIZE 4096
|
#define STACK_SIZE 4096
|
||||||
|
#define MAX_NAME_LENGTH 64
|
||||||
|
|
||||||
/* Mask for extracting the stack base address of a kernel stack pointer */
|
/* Mask for extracting the stack base address of a kernel stack pointer */
|
||||||
#define STACK_MASK (~(vaddr_t)(STACK_SIZE-1))
|
#define STACK_MASK (~(vaddr_t)(STACK_SIZE-1))
|
||||||
@ -70,7 +71,16 @@ struct thread {
|
|||||||
* These go up front so they're easy to get to even if the
|
* These go up front so they're easy to get to even if the
|
||||||
* debugger is messed up.
|
* debugger is messed up.
|
||||||
*/
|
*/
|
||||||
char *t_name; /* Name of this thread */
|
|
||||||
|
/*
|
||||||
|
* Name of this thread. Used to be dynamically allocated using kmalloc, but
|
||||||
|
* this can cause small changes in the amount of available memory due to the
|
||||||
|
* fact that it was cleaned up in exorcise. This produces more predictable
|
||||||
|
* behavior at the cost of a small amount of memory overhead and the
|
||||||
|
* inability to give threads huge names.
|
||||||
|
*/
|
||||||
|
|
||||||
|
char t_name[MAX_NAME_LENGTH];
|
||||||
const char *t_wchan_name; /* Name of wait channel, if sleeping */
|
const char *t_wchan_name; /* Name of wait channel, if sleeping */
|
||||||
threadstate_t t_state; /* State this thread is in */
|
threadstate_t t_state; /* State this thread is in */
|
||||||
|
|
||||||
|
@ -66,10 +66,7 @@ fakethread_create(const char *name)
|
|||||||
}
|
}
|
||||||
/* ignore most of the fields, zero everything for tidiness */
|
/* ignore most of the fields, zero everything for tidiness */
|
||||||
bzero(t, sizeof(*t));
|
bzero(t, sizeof(*t));
|
||||||
t->t_name = kstrdup(name);
|
strcpy(t->t_name, name);
|
||||||
if (t->t_name == NULL) {
|
|
||||||
panic("threadlisttest: Out of memory\n");
|
|
||||||
}
|
|
||||||
t->t_stack = FAKE_MAGIC;
|
t->t_stack = FAKE_MAGIC;
|
||||||
threadlistnode_init(&t->t_listnode, t);
|
threadlistnode_init(&t->t_listnode, t);
|
||||||
return t;
|
return t;
|
||||||
@ -84,7 +81,6 @@ fakethread_destroy(struct thread *t)
|
|||||||
{
|
{
|
||||||
KASSERT(t->t_stack == FAKE_MAGIC);
|
KASSERT(t->t_stack == FAKE_MAGIC);
|
||||||
threadlistnode_cleanup(&t->t_listnode);
|
threadlistnode_cleanup(&t->t_listnode);
|
||||||
kfree(t->t_name);
|
|
||||||
kfree(t);
|
kfree(t);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -119,17 +119,16 @@ thread_create(const char *name)
|
|||||||
struct thread *thread;
|
struct thread *thread;
|
||||||
|
|
||||||
DEBUGASSERT(name != NULL);
|
DEBUGASSERT(name != NULL);
|
||||||
|
if (strlen(name) > MAX_NAME_LENGTH) {
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
thread = kmalloc(sizeof(*thread));
|
thread = kmalloc(sizeof(*thread));
|
||||||
if (thread == NULL) {
|
if (thread == NULL) {
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
thread->t_name = kstrdup(name);
|
strcpy(thread->t_name, name);
|
||||||
if (thread->t_name == NULL) {
|
|
||||||
kfree(thread);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
thread->t_wchan_name = "NEW";
|
thread->t_wchan_name = "NEW";
|
||||||
thread->t_state = S_READY;
|
thread->t_state = S_READY;
|
||||||
|
|
||||||
@ -280,7 +279,6 @@ thread_destroy(struct thread *thread)
|
|||||||
/* sheer paranoia */
|
/* sheer paranoia */
|
||||||
thread->t_wchan_name = "DESTROYED";
|
thread->t_wchan_name = "DESTROYED";
|
||||||
|
|
||||||
kfree(thread->t_name);
|
|
||||||
kfree(thread);
|
kfree(thread);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -795,7 +793,7 @@ thread_exit(void)
|
|||||||
thread_checkstack(cur);
|
thread_checkstack(cur);
|
||||||
|
|
||||||
/* Interrupts off on this processor */
|
/* Interrupts off on this processor */
|
||||||
splhigh();
|
splhigh();
|
||||||
thread_switch(S_ZOMBIE, NULL, NULL);
|
thread_switch(S_ZOMBIE, NULL, NULL);
|
||||||
panic("braaaaaaaiiiiiiiiiiinssssss\n");
|
panic("braaaaaaaiiiiiiiiiiinssssss\n");
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user