From 20e058d61071641521a178d209ae4058bfda0fc9 Mon Sep 17 00:00:00 2001 From: Yorick Barbanneau Date: Fri, 17 Dec 2021 00:36:28 +0100 Subject: [PATCH] TD3 II.4 Betten error handling on ForkExec() --- code/userprog/addrspace.cc | 4 +++- code/userprog/userthread.cc | 4 ++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/code/userprog/addrspace.cc b/code/userprog/addrspace.cc index 09cd5bb..758ea18 100644 --- a/code/userprog/addrspace.cc +++ b/code/userprog/addrspace.cc @@ -102,7 +102,9 @@ AddrSpace::AddrSpace (OpenFile * executable) // pageTable[i].physicalPage = i; // for now, phys page # = virtual page # #ifdef CHANGED int newPage = pageProvider->GetEmptyPage(); - ASSERT(newPage != -1); + if (newPage == -1) { + throw std::bad_alloc(); + } pageTable[i].physicalPage = newPage; #endif pageTable[i].valid = TRUE; diff --git a/code/userprog/userthread.cc b/code/userprog/userthread.cc index 8de15db..7a84f43 100644 --- a/code/userprog/userthread.cc +++ b/code/userprog/userthread.cc @@ -99,7 +99,7 @@ void do_ThreadExit(){ void StartUserProc( void * args ){ currentThread->space->InitRegisters(); currentThread->space->RestoreState(); - machine->DumpMem("memory.svg"); + //machine->DumpMem("memory.svg"); machine->Run(); } @@ -119,7 +119,7 @@ int do_ForkExec( const char * c){ try { space = new AddrSpace(file); }catch(const std::bad_alloc& e) { - fprintf(stderr,"no empty space on memory\n"); + fprintf(stderr,"Could not allocate Memory\n"); Exit(1); }