From: Ben Gras Date: Tue, 11 Dec 2012 01:53:25 +0000 (+0100) Subject: vfs: fix clobbering fd_nr X-Git-Tag: v3.2.1~154 X-Git-Url: http://zhaoyanbai.com/repos//%22http:/www.isc.org/%22?a=commitdiff_plain;h=8aeac26999904f62808fe4a0b12220551387947f;p=minix.git vfs: fix clobbering fd_nr dumpcore: fd_nr can be in use as blocking fd but will then be clobbered by common_open, causing disaster for exiting unpause(). --- diff --git a/servers/vfs/misc.c b/servers/vfs/misc.c index 3e4730dec..a52abe05f 100644 --- a/servers/vfs/misc.c +++ b/servers/vfs/misc.c @@ -726,6 +726,12 @@ int pm_dumpcore(endpoint_t proc_e, int csig, vir_bytes exe_name) okendpt(proc_e, &slot); fp = &fproc[slot]; + /* if a process is blocked, scratch(fp).file.fd_nr holds the fd it's blocked + * on. free it up for use by common_open(). + */ + if (fp_is_blocked(fp)) + unpause(fp->fp_endpoint); + /* open core file */ snprintf(core_path, PATH_MAX, "%s.%d", CORE_NAME, fp->fp_pid); core_fd = common_open(core_path, O_WRONLY | O_CREAT | O_TRUNC, CORE_MODE);