summaryrefslogtreecommitdiff
path: root/sim/syscall_emul.cc
diff options
context:
space:
mode:
authorSteve Reinhardt <stever@eecs.umich.edu>2005-11-10 21:08:33 -0500
committerSteve Reinhardt <stever@eecs.umich.edu>2005-11-10 21:08:33 -0500
commit4410876773fa076a2b197cfbaf23ceea73137397 (patch)
tree8af6c6e78f944c8b6f1df34c23ea2e4315f146a3 /sim/syscall_emul.cc
parent99bf6ed0849085588c3d51679218c5b53ab4b9c0 (diff)
downloadgem5-4410876773fa076a2b197cfbaf23ceea73137397.tar.xz
Actually free Process fd_map entries when a file is closed...
amazingly we never did that before. Caused us to run out of file descriptors in twolf. sim/process.cc: Add free_fd() method to free closed target fd in simulator fd map. Rename open_fd() to alloc_fd() for symmetry with free_fd(). sim/process.hh: Add free_fd() method to free closed target fd in simulator fd map. Rename open_fd() to alloc_fd() for symmetry with free_fd(). Crank up MAX_FD while we're at it. sim/syscall_emul.cc: Call free_fd() on process when target closes a file. sim/syscall_emul.hh: Process open_fd() renamed to alloc_fd(). --HG-- extra : convert_revision : d780f4ccfd5a0989230b0afbdbd276212b87550c
Diffstat (limited to 'sim/syscall_emul.cc')
-rw-r--r--sim/syscall_emul.cc7
1 files changed, 5 insertions, 2 deletions
diff --git a/sim/syscall_emul.cc b/sim/syscall_emul.cc
index 4ae2d2631..50650018e 100644
--- a/sim/syscall_emul.cc
+++ b/sim/syscall_emul.cc
@@ -110,8 +110,11 @@ obreakFunc(SyscallDesc *desc, int num, Process *p, ExecContext *xc)
SyscallReturn
closeFunc(SyscallDesc *desc, int num, Process *p, ExecContext *xc)
{
- int fd = p->sim_fd(xc->getSyscallArg(0));
- return close(fd);
+ int target_fd = xc->getSyscallArg(0);
+ int status = close(p->sim_fd(target_fd));
+ if (status >= 0)
+ p->free_fd(target_fd);
+ return status;
}