]> granicus.if.org Git - vim/commitdiff
patch 7.4.2301 v7.4.2301
authorBram Moolenaar <Bram@vim.org>
Thu, 1 Sep 2016 16:32:11 +0000 (18:32 +0200)
committerBram Moolenaar <Bram@vim.org>
Thu, 1 Sep 2016 16:32:11 +0000 (18:32 +0200)
Problem:    MS-Windows: some files remain after testing.
Solution:   Close the channel output file.  Wait for the file handle to be
            closed before deleting the file.

src/os_win32.c
src/testdir/test_channel.vim
src/version.c

index 0de3d6493e021bf176290ca29ead115e926c825c..0607bd2efe23cb1efb1b86d714c393f4dc27fe48 100644 (file)
@@ -5210,11 +5210,9 @@ mch_start_job(char *cmd, job_T *job, jobopt_T *options)
     job->jv_job_object = jo;
     job->jv_status = JOB_STARTED;
 
-    if (!use_file_for_in)
-       CloseHandle(ifd[0]);
-    if (!use_file_for_out)
-       CloseHandle(ofd[1]);
-    if (!use_out_for_err && !use_file_for_err)
+    CloseHandle(ifd[0]);
+    CloseHandle(ofd[1]);
+    if (!use_out_for_err && !use_null_for_err)
        CloseHandle(efd[1]);
 
     job->jv_channel = channel;
index 0121deb25a2130d65132c0be7c582fd082c1417f..251de600c7276798edf39c0b829cb72991497820 100644 (file)
@@ -533,27 +533,39 @@ func Test_nl_err_to_out_pipe()
     call assert_equal(1, found_send)
     call assert_equal(1, found_recv)
     call assert_equal(1, found_stop)
+    " On MS-Windows need to sleep for a moment to be able to delete the file.
+    sleep 10m
     call delete('Xlog')
   endtry
 endfunc
 
+func Stop_g_job()
+  call job_stop(g:job)
+  if has('win32')
+    " On MS-Windows the server must close the file handle before we are able
+    " to delete the file.
+    call WaitFor('job_status(g:job) == "dead"')
+    sleep 10m
+  endif
+endfunc
+
 func Test_nl_read_file()
   if !has('job')
     return
   endif
   call ch_log('Test_nl_read_file()')
   call writefile(['echo something', 'echoerr wrong', 'double this'], 'Xinput')
-  let job = job_start(s:python . " test_channel_pipe.py",
+  let g:job = job_start(s:python . " test_channel_pipe.py",
        \ {'in_io': 'file', 'in_name': 'Xinput'})
-  call assert_equal("run", job_status(job))
+  call assert_equal("run", job_status(g:job))
   try
-    let handle = job_getchannel(job)
+    let handle = job_getchannel(g:job)
     call assert_equal("something", ch_readraw(handle))
     call assert_equal("wrong", ch_readraw(handle, {'part': 'err'}))
     call assert_equal("this", ch_readraw(handle))
     call assert_equal("AND this", ch_readraw(handle))
   finally
-    call job_stop(job)
+    call Stop_g_job()
     call delete('Xinput')
   endtry
 endfunc
@@ -563,18 +575,18 @@ func Test_nl_write_out_file()
     return
   endif
   call ch_log('Test_nl_write_out_file()')
-  let job = job_start(s:python . " test_channel_pipe.py",
+  let g:job = job_start(s:python . " test_channel_pipe.py",
        \ {'out_io': 'file', 'out_name': 'Xoutput'})
-  call assert_equal("run", job_status(job))
+  call assert_equal("run", job_status(g:job))
   try
-    let handle = job_getchannel(job)
+    let handle = job_getchannel(g:job)
     call ch_sendraw(handle, "echo line one\n")
     call ch_sendraw(handle, "echo line two\n")
     call ch_sendraw(handle, "double this\n")
     call WaitFor('len(readfile("Xoutput")) > 2')
     call assert_equal(['line one', 'line two', 'this', 'AND this'], readfile('Xoutput'))
   finally
-    call job_stop(job)
+    call Stop_g_job()
     call delete('Xoutput')
   endtry
 endfunc
@@ -584,18 +596,18 @@ func Test_nl_write_err_file()
     return
   endif
   call ch_log('Test_nl_write_err_file()')
-  let job = job_start(s:python . " test_channel_pipe.py",
+  let g:job = job_start(s:python . " test_channel_pipe.py",
        \ {'err_io': 'file', 'err_name': 'Xoutput'})
-  call assert_equal("run", job_status(job))
+  call assert_equal("run", job_status(g:job))
   try
-    let handle = job_getchannel(job)
+    let handle = job_getchannel(g:job)
     call ch_sendraw(handle, "echoerr line one\n")
     call ch_sendraw(handle, "echoerr line two\n")
     call ch_sendraw(handle, "doubleerr this\n")
     call WaitFor('len(readfile("Xoutput")) > 2')
     call assert_equal(['line one', 'line two', 'this', 'AND this'], readfile('Xoutput'))
   finally
-    call job_stop(job)
+    call Stop_g_job()
     call delete('Xoutput')
   endtry
 endfunc
@@ -605,11 +617,11 @@ func Test_nl_write_both_file()
     return
   endif
   call ch_log('Test_nl_write_both_file()')
-  let job = job_start(s:python . " test_channel_pipe.py",
+  let g:job = job_start(s:python . " test_channel_pipe.py",
        \ {'out_io': 'file', 'out_name': 'Xoutput', 'err_io': 'out'})
-  call assert_equal("run", job_status(job))
+  call assert_equal("run", job_status(g:job))
   try
-    let handle = job_getchannel(job)
+    let handle = job_getchannel(g:job)
     call ch_sendraw(handle, "echoerr line one\n")
     call ch_sendraw(handle, "echo line two\n")
     call ch_sendraw(handle, "double this\n")
@@ -617,7 +629,7 @@ func Test_nl_write_both_file()
     call WaitFor('len(readfile("Xoutput")) > 5')
     call assert_equal(['line one', 'line two', 'this', 'AND this', 'that', 'AND that'], readfile('Xoutput'))
   finally
-    call job_stop(job)
+    call Stop_g_job()
     call delete('Xoutput')
   endtry
 endfunc
index 7bf6d7c8dce8399bbb44b2bd9a5e7fdd53a1c02f..fbe8d571df4d2b74d5db672edd3fdf1afb6c0304 100644 (file)
@@ -763,6 +763,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    2301,
 /**/
     2300,
 /**/