--- Gnu-Mach/kern/task.c 2020/09/02 04:49:56 1.1.1.5 +++ Gnu-Mach/kern/task.c 2020/09/02 04:54:07 1.1.1.7 @@ -63,7 +63,7 @@ ipc_port_t new_task_notification = NULL; void task_init(void) { kmem_cache_init(&task_cache, "task", sizeof(struct task), 0, - NULL, NULL, NULL, 0); + NULL, 0); eml_init(); machine_task_module_init (); @@ -75,6 +75,7 @@ void task_init(void) */ (void) task_create(TASK_NULL, FALSE, &kernel_task); (void) task_set_name(kernel_task, "gnumach"); + vm_map_set_name(kernel_map, kernel_task->name); } kern_return_t task_create( @@ -100,10 +101,23 @@ kern_return_t task_create( } else if (inherit_memory) { new_task->map = vm_map_fork(parent_task->map); } else { - new_task->map = vm_map_create(pmap_create(0), + pmap_t new_pmap = pmap_create((vm_size_t) 0); + if (new_pmap == PMAP_NULL) + new_task->map = VM_MAP_NULL; + else { + new_task->map = vm_map_create(new_pmap, round_page(VM_MIN_ADDRESS), - trunc_page(VM_MAX_ADDRESS), TRUE); + trunc_page(VM_MAX_ADDRESS)); + if (new_task->map == VM_MAP_NULL) + pmap_destroy(new_pmap); + } } + if (new_task->map == VM_MAP_NULL) { + kmem_cache_free(&task_cache, (vm_address_t) new_task); + return KERN_RESOURCE_SHORTAGE; + } + if (child_task != &kernel_task) + vm_map_set_name(new_task->map, new_task->name); simple_lock_init(&new_task->lock); queue_init(&new_task->thread_list); @@ -565,7 +579,7 @@ kern_return_t task_threads( unsigned int actual; /* this many threads */ thread_t thread; thread_t *threads; - int i; + unsigned i; vm_size_t size, size_needed; vm_offset_t addr;