summaryrefslogtreecommitdiff
path: root/exec.c
diff options
context:
space:
mode:
Diffstat (limited to 'exec.c')
-rw-r--r--exec.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/exec.c b/exec.c
index a85e203..7eaef5b 100644
--- a/exec.c
+++ b/exec.c
@@ -18,8 +18,11 @@ exec(char *path, char **argv)
struct proghdr ph;
pde_t *pgdir, *oldpgdir;
- if((ip = namei(path)) == 0)
+ begin_trans();
+ if((ip = namei(path)) == 0){
+ commit_trans();
return -1;
+ }
ilock(ip);
pgdir = 0;
@@ -47,6 +50,7 @@ exec(char *path, char **argv)
goto bad;
}
iunlockput(ip);
+ commit_trans();
ip = 0;
// Allocate two pages at the next page boundary.
@@ -95,7 +99,9 @@ exec(char *path, char **argv)
bad:
if(pgdir)
freevm(pgdir);
- if(ip)
+ if(ip){
iunlockput(ip);
+ commit_trans();
+ }
return -1;
}