mirror of
https://github.com/neovim/neovim.git
synced 2025-09-06 03:18:16 +00:00
vim-patch:8.2.2044: MS-Windows: swap file test sometimes fails
Problem: MS-Windows: swap file test sometimes fails.
Solution: Use a more reliable way to change the process ID. When "timeout"
fails use "ping" to wait up to ten minutes. (Ken Takata,
closes vim/vim#7365)
5ee0981fb5
This commit is contained in:
@@ -421,6 +421,39 @@ func Test_swap_symlink()
|
|||||||
call delete('Xswapdir', 'rf')
|
call delete('Xswapdir', 'rf')
|
||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
|
func s:get_unused_pid(base)
|
||||||
|
if has('job')
|
||||||
|
" Execute 'echo' as a temporary job, and return its pid as an unused pid.
|
||||||
|
if has('win32')
|
||||||
|
let cmd = 'cmd /c echo'
|
||||||
|
else
|
||||||
|
let cmd = 'echo'
|
||||||
|
endif
|
||||||
|
let j = job_start(cmd)
|
||||||
|
while job_status(j) ==# 'run'
|
||||||
|
sleep 10m
|
||||||
|
endwhile
|
||||||
|
if job_status(j) ==# 'dead'
|
||||||
|
return job_info(j).process
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
" Must add four for MS-Windows to see it as a different one.
|
||||||
|
return a:base + 4
|
||||||
|
endfunc
|
||||||
|
|
||||||
|
func s:blob_to_pid(b)
|
||||||
|
return a:b[3] * 16777216 + a:b[2] * 65536 + a:b[1] * 256 + a:b[0]
|
||||||
|
endfunc
|
||||||
|
|
||||||
|
func s:pid_to_blob(i)
|
||||||
|
let b = 0z
|
||||||
|
let b[0] = and(a:i, 0xff)
|
||||||
|
let b[1] = and(a:i / 256, 0xff)
|
||||||
|
let b[2] = and(a:i / 65536, 0xff)
|
||||||
|
let b[3] = and(a:i / 16777216, 0xff)
|
||||||
|
return b
|
||||||
|
endfunc
|
||||||
|
|
||||||
func Test_swap_auto_delete()
|
func Test_swap_auto_delete()
|
||||||
" Create a valid swapfile by editing a file with a special extension.
|
" Create a valid swapfile by editing a file with a special extension.
|
||||||
split Xtest.scr
|
split Xtest.scr
|
||||||
@@ -434,9 +467,9 @@ func Test_swap_auto_delete()
|
|||||||
" Forget about the file, recreate the swap file, then edit it again. The
|
" Forget about the file, recreate the swap file, then edit it again. The
|
||||||
" swap file should be automatically deleted.
|
" swap file should be automatically deleted.
|
||||||
bwipe!
|
bwipe!
|
||||||
" Change the process ID to avoid the "still running" warning. Must add four
|
" Change the process ID to avoid the "still running" warning.
|
||||||
" for MS-Windows to see it as a different one.
|
let swapfile_bytes[24:27] = s:pid_to_blob(s:get_unused_pid(
|
||||||
let swapfile_bytes[24] = swapfile_bytes[24] + 4
|
\ s:blob_to_pid(swapfile_bytes[24:27])))
|
||||||
call writefile(swapfile_bytes, swapfile_name)
|
call writefile(swapfile_bytes, swapfile_name)
|
||||||
edit Xtest.scr
|
edit Xtest.scr
|
||||||
" will end up using the same swap file after deleting the existing one
|
" will end up using the same swap file after deleting the existing one
|
||||||
|
Reference in New Issue
Block a user