0
0
mirror of https://github.com/vim/vim.git synced 2025-10-02 05:04:20 -04:00

updated for version 7.1-279

This commit is contained in:
Bram Moolenaar
2008-03-15 11:41:07 +00:00
parent 39858af5d5
commit 7dc767c8d5
2 changed files with 60 additions and 15 deletions

View File

@@ -2096,6 +2096,18 @@ cs_read_prompt(i)
return CSCOPE_SUCCESS; return CSCOPE_SUCCESS;
} }
#if defined(UNIX) && defined(SIGALRM)
/*
* Used to catch and ignore SIGALRM below.
*/
/* ARGSUSED */
static RETSIGTYPE
sig_handler SIGDEFARG(sigarg)
{
/* do nothing */
SIGRETURN;
}
#endif
/* /*
* PRIVATE: cs_release_csp * PRIVATE: cs_release_csp
@@ -2108,9 +2120,6 @@ cs_release_csp(i, freefnpp)
int i; int i;
int freefnpp; int freefnpp;
{ {
#if defined(UNIX)
int pstat;
#else
/* /*
* Trying to exit normally (not sure whether it is fit to UNIX cscope * Trying to exit normally (not sure whether it is fit to UNIX cscope
*/ */
@@ -2119,6 +2128,52 @@ cs_release_csp(i, freefnpp)
(void)fputs("q\n", csinfo[i].to_fp); (void)fputs("q\n", csinfo[i].to_fp);
(void)fflush(csinfo[i].to_fp); (void)fflush(csinfo[i].to_fp);
} }
#if defined(UNIX)
{
int pstat;
pid_t pid;
# if defined(HAVE_SIGACTION)
struct sigaction sa, old;
/* Use sigaction() to limit the waiting time to two seconds. */
sa.sa_handler = sig_handler;
sa.sa_flags = SA_NODEFER;
sigaction(SIGALRM, &sa, &old);
alarm(2); /* 2 sec timeout */
/* Block until cscope exits or until timer expires */
pid = waitpid(csinfo[i].pid, &pstat, 0);
/* cancel pending alarm if still there and restore signal */
alarm(0);
sigaction(SIGALRM, &old, NULL);
# else
int waited;
/* Can't use sigaction(), loop for two seconds. First yield the CPU
* to give cscope a chance to exit quickly. */
sleep(0);
for (waited = 0; waited < 40; ++waited)
{
pid = waitpid(csinfo[i].pid, &pstat, WNOHANG);
if (pid != 0)
break; /* break unless the process is still running */
mch_delay(50, FALSE); /* sleep 50 ms */
}
# endif
/*
* If the cscope process is still running: kill it.
* Safety check: If the PID would be zero here, the entire X session
* would be killed. -1 and 1 are dangerous as well.
*/
if (pid < 0 && csinfo[i].pid > 1)
{
kill(csinfo[i].pid, SIGTERM);
(void)waitpid(csinfo[i].pid, &pstat, 0);
}
}
#else /* !UNIX */
if (csinfo[i].hProc != NULL) if (csinfo[i].hProc != NULL)
{ {
/* Give cscope a chance to exit normally */ /* Give cscope a chance to exit normally */
@@ -2133,18 +2188,6 @@ cs_release_csp(i, freefnpp)
if (csinfo[i].to_fp != NULL) if (csinfo[i].to_fp != NULL)
(void)fclose(csinfo[i].to_fp); (void)fclose(csinfo[i].to_fp);
/*
* Safety check: If the PID would be zero here, the entire X session would
* be killed. -1 and 1 are dangerous as well.
*/
#if defined(UNIX)
if (csinfo[i].pid > 1)
{
kill(csinfo[i].pid, SIGTERM);
(void)waitpid(csinfo[i].pid, &pstat, 0);
}
#endif
if (freefnpp) if (freefnpp)
{ {
vim_free(csinfo[i].fname); vim_free(csinfo[i].fname);

View File

@@ -666,6 +666,8 @@ static char *(features[]) =
static int included_patches[] = static int included_patches[] =
{ /* Add new patch number below this line */ { /* Add new patch number below this line */
/**/
279,
/**/ /**/
278, 278,
/**/ /**/