Rev 1460 | Rev 1573 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 1460 | Rev 1468 | ||
---|---|---|---|
Line 105... | Line 105... | ||
105 | 105 | ||
106 | mutex_initialize(&ta->futexes_lock); |
106 | mutex_initialize(&ta->futexes_lock); |
107 | btree_create(&ta->futexes); |
107 | btree_create(&ta->futexes); |
108 | 108 | ||
109 | ipl = interrupts_disable(); |
109 | ipl = interrupts_disable(); |
- | 110 | ||
- | 111 | /* |
|
- | 112 | * Increment address space reference count. |
|
- | 113 | * TODO: Reconsider the locking scheme. |
|
- | 114 | */ |
|
- | 115 | mutex_lock(&as->lock); |
|
- | 116 | as->refcount++; |
|
- | 117 | mutex_unlock(&as->lock); |
|
- | 118 | ||
110 | spinlock_lock(&tasks_lock); |
119 | spinlock_lock(&tasks_lock); |
111 | 120 | ||
112 | ta->taskid = ++task_counter; |
121 | ta->taskid = ++task_counter; |
113 | btree_insert(&tasks_btree, (btree_key_t) ta->taskid, (void *) ta, NULL); |
122 | btree_insert(&tasks_btree, (btree_key_t) ta->taskid, (void *) ta, NULL); |
114 | 123 | ||
Line 137... | Line 146... | ||
137 | as = as_create(0); |
146 | as = as_create(0); |
138 | ASSERT(as); |
147 | ASSERT(as); |
139 | 148 | ||
140 | rc = elf_load((elf_header_t *) program_addr, as); |
149 | rc = elf_load((elf_header_t *) program_addr, as); |
141 | if (rc != EE_OK) { |
150 | if (rc != EE_OK) { |
142 | as_free(as); |
151 | as_destroy(as); |
143 | return NULL; |
152 | return NULL; |
144 | } |
153 | } |
145 | 154 | ||
146 | kernel_uarg = (uspace_arg_t *) malloc(sizeof(uspace_arg_t), 0); |
155 | kernel_uarg = (uspace_arg_t *) malloc(sizeof(uspace_arg_t), 0); |
147 | kernel_uarg->uspace_entry = (void *) ((elf_header_t *) program_addr)->e_entry; |
156 | kernel_uarg->uspace_entry = (void *) ((elf_header_t *) program_addr)->e_entry; |