diff --git a/test/vinyl/ddl.result b/test/vinyl/ddl.result index 67a6eecad48ff8df4b97d30b22b4c5bfa6087fe0..ca95542ab6c2ce22495c84ebd0d15c62682db9b4 100644 --- a/test/vinyl/ddl.result +++ b/test/vinyl/ddl.result @@ -469,3 +469,70 @@ test_run:cmd("setopt delimiter ''"); s:drop() --- ... +-- gh-2342 cursors after death of index +create_iterator = require('utils').create_iterator +--- +... +s = box.schema.space.create('test', { engine = 'vinyl' }) +--- +... +pk = s:create_index('primary', { parts = { 1, 'uint' } }) +--- +... +sk = s:create_index('sec', { parts = { 2, 'uint' } }) +--- +... +s:replace{1, 2, 3} +--- +- [1, 2, 3] +... +s:replace{4, 5, 6} +--- +- [4, 5, 6] +... +s:replace{7, 8, 9} +--- +- [7, 8, 9] +... +itr = create_iterator(s, {}) +--- +... +f, ctx, state = s.index.sec:pairs({5}, { iterator='LE' }) +--- +... +itr.next() +--- +- [1, 2, 3] +... +f(ctx, state) +--- +- <iterator state> +- [4, 5, 6] +... +s:drop() +--- +... +itr.next() +--- +- null +... +f(ctx, state) +--- +- null +... +f = nil +--- +... +ctx = nil +--- +... +state = nil +--- +... +itr = nil +--- +... +collectgarbage('collect') +--- +- 0 +... diff --git a/test/vinyl/ddl.test.lua b/test/vinyl/ddl.test.lua index f3d30e38be225df2394e9aeae0835dc05f299119..747b9a8a31644d7314c9faf43dab366befcb2441 100644 --- a/test/vinyl/ddl.test.lua +++ b/test/vinyl/ddl.test.lua @@ -196,3 +196,25 @@ end ; test_run:cmd("setopt delimiter ''"); s:drop() + +-- gh-2342 cursors after death of index +create_iterator = require('utils').create_iterator +s = box.schema.space.create('test', { engine = 'vinyl' }) +pk = s:create_index('primary', { parts = { 1, 'uint' } }) +sk = s:create_index('sec', { parts = { 2, 'uint' } }) +s:replace{1, 2, 3} +s:replace{4, 5, 6} +s:replace{7, 8, 9} +itr = create_iterator(s, {}) +f, ctx, state = s.index.sec:pairs({5}, { iterator='LE' }) +itr.next() +f(ctx, state) +s:drop() +itr.next() +f(ctx, state) +f = nil +ctx = nil +state = nil +itr = nil +collectgarbage('collect') +