fix: handle malloc result in init_process_result

This commit is contained in:
2024-11-24 15:09:32 +00:00
parent eed4ce5130
commit e1f0258f8e

View File

@@ -71,7 +71,7 @@ static void kernel_thread (thread_func *, void *aux);
static void idle (void *aux UNUSED);
static struct thread *running_thread (void);
static struct thread *next_thread_to_run (void);
static void init_process_result (struct thread *t);
static bool init_process_result (struct thread *t);
static void init_thread (struct thread *, const char *name, int nice,
int priority, fp32_t recent_cpu);
static bool is_thread (struct thread *) UNUSED;
@@ -252,7 +252,11 @@ thread_create (const char *name, int priority,
struct thread *parent_thread = thread_current ();
init_thread (t, name, parent_thread->nice, priority, parent_thread->recent_cpu);
tid = t->tid = allocate_tid ();
init_process_result (t);
if (!init_process_result (t))
{
palloc_free_page (t);
return TID_ERROR;
}
#ifdef USERPROG
/* Initialize the thread's file descriptor table. */
@@ -668,15 +672,18 @@ is_thread (struct thread *t)
}
/* Allocate and initialise a process result for given thread. */
static void
static bool
init_process_result (struct thread *t)
{
struct process_result *result = malloc (sizeof (struct process_result));
if (result == NULL)
return false;
result->tid = t->tid;
result->exit_status = -1;
lock_init (&result->lock);
sema_init (&result->sema, 0);
t->result = result;
return true;
}
/* Does basic initialization of T as a blocked thread named