Permalink
Browse files

patch 7.4.2301

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.
  • Loading branch information...
1 parent 5c80908 commit 641ad6c7ac7367f95fd927b8efa4bf74ddb9ccf3 @brammool brammool committed Sep 1, 2016
Showing with 33 additions and 21 deletions.
  1. +3 −5 src/os_win32.c
  2. +28 −16 src/testdir/test_channel.vim
  3. +2 −0 src/version.c
View
@@ -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;
@@ -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,19 +617,19 @@ 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")
call ch_sendraw(handle, "doubleerr that\n")
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
View
@@ -764,6 +764,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 2301,
+/**/
2300,
/**/
2299,

0 comments on commit 641ad6c

Please sign in to comment.