]> git.ipfire.org Git - thirdparty/vim.git/commitdiff
patch 7.4.1418 v7.4.1418
authorBram Moolenaar <Bram@vim.org>
Thu, 25 Feb 2016 19:56:01 +0000 (20:56 +0100)
committerBram Moolenaar <Bram@vim.org>
Thu, 25 Feb 2016 19:56:01 +0000 (20:56 +0100)
Problem:    job_stop() on MS-Windows does not really stop the job.
Solution:   Make the default to stop the job forcefully. (Ken Takata)
            Make MS-Windows and Unix more similar.

runtime/doc/eval.txt
src/os_unix.c
src/os_win32.c
src/version.c

index 8fc0d1ef050e8175291a1153cacea88695950745..e8462446774e2f66426ca4324eb926c0aa2f5f30 100644 (file)
@@ -4474,21 +4474,27 @@ job_status({job})                                       *job_status()* *E916*
 job_stop({job} [, {how}])                                      *job_stop()*
                Stop the {job}.  This can also be used to signal the job.
 
-               When {how} is omitted or is "term" the job will be terminated
-               normally.  For Unix SIGTERM is sent.  For MS-Windows
-               CTRL_BREAK will be sent.  This goes to the process group, thus
-               children may also be affected.
-
-               Other values for Unix:
-                       "hup"   Unix: SIGHUP
-                       "quit"  Unix: SIGQUIT
-                       "kill"  Unix: SIGKILL (strongest way to stop)
-                       number  Unix: signal with that number
-
-               Other values for MS-Windows:
-                       "int"   Windows: CTRL_C
-                       "kill"  Windows: terminate process forcedly
-                       Others  Windows: CTRL_BREAK
+               When {how} is omitted or is "term" the job will be terminated.
+               For Unix SIGTERM is sent.  On MS-Windows the job will be
+               terminated forcedly (there is no "gentle" way).
+               This goes to the process group, thus children may also be
+               affected.
+
+               Effect for Unix:
+                       "term"   SIGTERM (default)
+                       "hup"    SIGHUP
+                       "quit"   SIGQUIT
+                       "int"    SIGINT
+                       "kill"   SIGKILL (strongest way to stop)
+                       number   signal with that number
+
+               Effect for MS-Windows:
+                       "term"   terminate process forcedly (default)
+                       "hup"    CTRL_BREAK
+                       "quit"   CTRL_BREAK
+                       "int"    CTRL_C
+                       "kill"   terminate process forcedly
+                       Others   CTRL_BREAK
 
                On Unix the signal is sent to the process group.  This means
                that when the job is "sh -c command" it affects both the shell
index cebef645c4798a6a1a8f6e3291b44d980d848c80..3c0b48c355e5867a222e8af2ce1871baec364158 100644 (file)
@@ -5202,12 +5202,14 @@ mch_stop_job(job_T *job, char_u *how)
     int            sig = -1;
     pid_t   job_pid;
 
-    if (STRCMP(how, "hup") == 0)
-       sig = SIGHUP;
-    else if (*how == NUL || STRCMP(how, "term") == 0)
+    if (*how == NUL || STRCMP(how, "term") == 0)
        sig = SIGTERM;
+    else if (STRCMP(how, "hup") == 0)
+       sig = SIGHUP;
     else if (STRCMP(how, "quit") == 0)
        sig = SIGQUIT;
+    else if (STRCMP(how, "int") == 0)
+       sig = SIGINT;
     else if (STRCMP(how, "kill") == 0)
        sig = SIGKILL;
     else if (isdigit(*how))
index e93e6d0181aa91a592730fe77e2e2e82822407fb..b7b393083a70905d0466933e6bc6fa5368a664ad 100644 (file)
@@ -5141,10 +5141,9 @@ mch_job_status(job_T *job)
     int
 mch_stop_job(job_T *job, char_u *how)
 {
-    int ret = 0;
-    int ctrl_c = STRCMP(how, "int") == 0;
+    int ret;
 
-    if (STRCMP(how, "kill") == 0)
+    if (STRCMP(how, "term") == 0 || STRCMP(how, "kill") == 0 || *how == NUL)
     {
        if (job->jv_job_object != NULL)
            return TerminateJobObject(job->jv_job_object, 0) ? OK : FAIL;
@@ -5155,9 +5154,9 @@ mch_stop_job(job_T *job, char_u *how)
     if (!AttachConsole(job->jv_proc_info.dwProcessId))
        return FAIL;
     ret = GenerateConsoleCtrlEvent(
-           ctrl_c ? CTRL_C_EVENT : CTRL_BREAK_EVENT,
-           job->jv_proc_info.dwProcessId)
-       ? OK : FAIL;
+               STRCMP(how, "int") == 0 ? CTRL_C_EVENT : CTRL_BREAK_EVENT,
+               job->jv_proc_info.dwProcessId)
+           ? OK : FAIL;
     FreeConsole();
     return ret;
 }
index 8af0a44cba20e14b2e39d3bfc56564648324f2e0..214b600fd412c26b823333759438ac4842fcd236 100644 (file)
@@ -748,6 +748,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    1418,
 /**/
     1417,
 /**/