Fixes pthread thread0 initialization
authorBarret Rhoden <brho@cs.berkeley.edu>
Wed, 10 Aug 2011 22:34:26 +0000 (15:34 -0700)
committerKevin Klues <klueska@cs.berkeley.edu>
Thu, 3 Nov 2011 00:36:06 +0000 (17:36 -0700)
Need to have thread0 be a full pthread.  Previously, we'd have issues if
we had that thread exit while the program was still running (it'd try to
free its stack and get messed up, among other things).

user/pthread/pthread.c
user/pthread/pthread.h

index dd3309e..29f29a4 100644 (file)
@@ -125,6 +125,11 @@ struct uthread *pth_init(void)
        pthread_t t = (pthread_t)calloc(1, sizeof(struct pthread_tcb));
        assert(t);
        t->id = get_next_pid();
+       t->stacksize = USTACK_NUM_PAGES * PGSIZE;
+       t->stacktop = (void*)USTACKTOP;
+       t->detached = TRUE;
+       t->flags = 0;
+       t->finished = 0;
        assert(t->id == 0);
        /* Put the new pthread on the active queue */
        mcs_lock_notifsafe(&queue_lock, &local_qn);
index 6902cbf..4951956 100644 (file)
@@ -23,9 +23,9 @@ struct pthread_tcb {
        bool detached;
        uint32_t id;
        uint32_t stacksize;
+       void *stacktop;
        void *(*start_routine)(void*);
        void *arg;
-       void *stacktop;
        void *retval;
 };
 typedef struct pthread_tcb* pthread_t;