fix: handle malloc result in init_process_result
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user