mirror of
https://github.com/neovim/neovim.git
synced 2025-09-08 12:28:18 +00:00
vim-patch:8.0.0737: crash when X11 selection is very big
Problem: Crash when X11 selection is very big.
Solution: Use static items instead of allocating them. Add callbacks.
(Ozaki Kiichi)
cdb7e1b7f9
This commit is contained in:
@@ -136,14 +136,15 @@ endfunc
|
|||||||
" Wait for up to a second for "expr" to become true.
|
" Wait for up to a second for "expr" to become true.
|
||||||
" Return time slept in milliseconds. With the +reltime feature this can be
|
" Return time slept in milliseconds. With the +reltime feature this can be
|
||||||
" more than the actual waiting time. Without +reltime it can also be less.
|
" more than the actual waiting time. Without +reltime it can also be less.
|
||||||
func WaitFor(expr)
|
func WaitFor(expr, ...)
|
||||||
|
let timeout = get(a:000, 0, 1000)
|
||||||
" using reltime() is more accurate, but not always available
|
" using reltime() is more accurate, but not always available
|
||||||
if has('reltime')
|
if has('reltime')
|
||||||
let start = reltime()
|
let start = reltime()
|
||||||
else
|
else
|
||||||
let slept = 0
|
let slept = 0
|
||||||
endif
|
endif
|
||||||
for i in range(100)
|
for i in range(timeout / 10)
|
||||||
try
|
try
|
||||||
if eval(a:expr)
|
if eval(a:expr)
|
||||||
if has('reltime')
|
if has('reltime')
|
||||||
@@ -158,7 +159,7 @@ func WaitFor(expr)
|
|||||||
endif
|
endif
|
||||||
sleep 10m
|
sleep 10m
|
||||||
endfor
|
endfor
|
||||||
return 1000
|
return timeout
|
||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
" Wait for up to a given milliseconds.
|
" Wait for up to a given milliseconds.
|
||||||
|
@@ -87,6 +87,18 @@ func Do_test_quotestar_for_x11()
|
|||||||
" Check that the *-register of this vim instance is changed as expected.
|
" Check that the *-register of this vim instance is changed as expected.
|
||||||
call WaitFor('@* == "yes"', 3000)
|
call WaitFor('@* == "yes"', 3000)
|
||||||
|
|
||||||
|
" Handle the large selection over 262040 byte.
|
||||||
|
let length = 262044
|
||||||
|
let sample = 'a' . repeat('b', length - 2) . 'c'
|
||||||
|
let @* = sample
|
||||||
|
call WaitFor('remote_expr("' . name . '", "len(@*) >= ' . length . '", "", 1)', 3000)
|
||||||
|
let res = remote_expr(name, "@*", "", 2)
|
||||||
|
call assert_equal(length, len(res))
|
||||||
|
" Check length to prevent a large amount of output at assertion failure.
|
||||||
|
if length == len(res)
|
||||||
|
call assert_equal(sample, res)
|
||||||
|
endif
|
||||||
|
|
||||||
if has('unix') && has('gui') && !has('gui_running')
|
if has('unix') && has('gui') && !has('gui_running')
|
||||||
let @* = ''
|
let @* = ''
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user