To: vim_dev@googlegroups.com Subject: Patch 8.2.2044 Fcc: outbox From: Bram Moolenaar Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ------------ Patch 8.2.2044 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 #7365) Files: .github/workflows/ci-windows.yaml, src/testdir/test_swap.vim *** ../vim-8.2.2043/.github/workflows/ci-windows.yaml 2020-10-22 17:33:12.469081986 +0200 --- .github/workflows/ci-windows.yaml 2020-11-25 12:38:09.349357732 +0100 *************** *** 215,221 **** :: Wait about 10 minutes. for /L %%i in (1,1,60) do ( if exist done.txt goto exitloop ! timeout 10 ) set timeout=1 :exitloop --- 215,222 ---- :: Wait about 10 minutes. for /L %%i in (1,1,60) do ( if exist done.txt goto exitloop ! timeout 10 > NUL 2>&1 ! if ERRORLEVEL 1 ping -n 11 localhost > NUL ) set timeout=1 :exitloop *** ../vim-8.2.2043/src/testdir/test_swap.vim 2020-11-20 09:10:11.427730168 +0100 --- src/testdir/test_swap.vim 2020-11-25 12:38:09.349357732 +0100 *************** *** 403,408 **** --- 403,441 ---- call delete('Xswapdir', 'rf') 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() " Create a valid swapfile by editing a file with a special extension. split Xtest.scr *************** *** 416,424 **** " Forget about the file, recreate the swap file, then edit it again. The " swap file should be automatically deleted. bwipe! ! " Change the process ID to avoid the "still running" warning. Must add four ! " for MS-Windows to see it as a different one. ! let swapfile_bytes[24] = swapfile_bytes[24] + 4 call writefile(swapfile_bytes, swapfile_name) edit Xtest.scr " will end up using the same swap file after deleting the existing one --- 449,457 ---- " Forget about the file, recreate the swap file, then edit it again. The " swap file should be automatically deleted. bwipe! ! " Change the process ID to avoid the "still running" warning. ! let swapfile_bytes[24:27] = s:pid_to_blob(s:get_unused_pid( ! \ s:blob_to_pid(swapfile_bytes[24:27]))) call writefile(swapfile_bytes, swapfile_name) edit Xtest.scr " will end up using the same swap file after deleting the existing one *** ../vim-8.2.2043/src/version.c 2020-11-25 12:25:42.919981195 +0100 --- src/version.c 2020-11-25 12:41:32.029008035 +0100 *************** *** 752,753 **** --- 752,755 ---- { /* Add new patch number below this line */ + /**/ + 2044, /**/ -- GUARD #1: What, ridden on a horse? ARTHUR: Yes! GUARD #1: You're using coconuts! ARTHUR: What? GUARD #1: You've got two empty halves of coconut and you're bangin' 'em together. The Quest for the Holy Grail (Monty Python) /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ /// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ \\\ an exciting new programming language -- http://www.Zimbu.org /// \\\ help me help AIDS victims -- http://ICCF-Holland.org ///