diff --git a/7.1.288 b/7.1.288 new file mode 100644 index 0000000..63467f2 --- /dev/null +++ b/7.1.288 @@ -0,0 +1,117 @@ +To: vim-dev@vim.org +Subject: Patch 7.1.288 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.1.288 (after 7.1.281) +Problem: Cscope still leaves behind temp files when using gvim. +Solution: When getting the ECHILD error loop for a while until cscope exits. + (Dominique Pelle) +Files: if_cscope.c + + +*** ../vim-7.1.287/src/if_cscope.c Sun Mar 16 16:02:47 2008 +--- src/if_cscope.c Tue Mar 25 21:34:23 2008 +*************** +*** 2130,2135 **** +--- 2130,2136 ---- + } + #if defined(UNIX) + { ++ int waitpid_errno; + int pstat; + pid_t pid; + +*************** +*** 2145,2150 **** +--- 2146,2152 ---- + + /* Block until cscope exits or until timer expires */ + pid = waitpid(csinfo[i].pid, &pstat, 0); ++ waitpid_errno = errno; + + /* cancel pending alarm if still there and restore signal */ + alarm(0); +*************** +*** 2158,2163 **** +--- 2160,2166 ---- + for (waited = 0; waited < 40; ++waited) + { + pid = waitpid(csinfo[i].pid, &pstat, WNOHANG); ++ waitpid_errno = errno; + if (pid != 0) + break; /* break unless the process is still running */ + mch_delay(50, FALSE); /* sleep 50 ms */ +*************** +*** 2170,2177 **** + */ + if (pid < 0 && csinfo[i].pid > 1) + { +! kill(csinfo[i].pid, SIGKILL); +! (void)waitpid(csinfo[i].pid, &pstat, 0); + } + } + #else /* !UNIX */ +--- 2173,2212 ---- + */ + if (pid < 0 && csinfo[i].pid > 1) + { +! # ifdef ECHILD +! int alive = TRUE; +! +! if (waitpid_errno == ECHILD) +! { +! /* +! * When using 'vim -g', vim is forked and cscope process is +! * no longer a child process but a sibling. So waitpid() +! * fails with errno being ECHILD (No child processes). +! * Don't send SIGKILL to cscope immediately but wait +! * (polling) for it to exit normally as result of sending +! * the "q" command, hence giving it a chance to clean up +! * its temporary files. +! */ +! int waited; +! +! sleep(0); +! for (waited = 0; waited < 40; ++waited) +! { +! /* Check whether cscope process is still alive */ +! if (kill(csinfo[i].pid, 0) != 0) +! { +! alive = FALSE; /* cscope process no longer exists */ +! break; +! } +! mch_delay(50, FALSE); /* sleep 50ms */ +! } +! } +! if (alive) +! # endif +! { +! kill(csinfo[i].pid, SIGKILL); +! (void)waitpid(csinfo[i].pid, &pstat, 0); +! } + } + } + #else /* !UNIX */ +*** ../vim-7.1.287/src/version.c Tue Apr 1 13:10:45 2008 +--- src/version.c Tue Apr 1 14:28:42 2008 +*************** +*** 668,669 **** +--- 668,671 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 288, + /**/ + +-- +hundred-and-one symptoms of being an internet addict: +204. You're being audited because you mailed your tax return to the IRC. + + /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ +/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ +\\\ download, build and distribute -- http://www.A-A-P.org /// + \\\ help me help AIDS victims -- http://ICCF-Holland.org ///