@@ -364,13 +364,16 @@ function m.searchRefsByID(status, suri, expect, mode)
364
364
local brejectMap = setmetatable ({}, uriMapMT )
365
365
local slockMap = setmetatable ({}, uriMapMT )
366
366
local elockMap = setmetatable ({}, uriMapMT )
367
+ local ecallMap = setmetatable ({}, uriMapMT )
367
368
368
- local function lockExpanding (elock , id , field )
369
+ local function lockExpanding (elock , ecall , id , field )
369
370
if not field then
370
371
field = ' '
371
372
end
373
+ local call = callStack [# callStack ]
372
374
local locked = elock [id ]
373
- if locked and field then
375
+ local called = ecall [id ]
376
+ if locked and called == call then
374
377
if # locked <= # field then
375
378
if ssub (field , -# locked ) == locked then
376
379
footprint (status , ' elocked:' , id , locked , field )
@@ -379,11 +382,13 @@ function m.searchRefsByID(status, suri, expect, mode)
379
382
end
380
383
end
381
384
elock [id ] = field
385
+ ecall [id ] = call
382
386
return true
383
387
end
384
388
385
- local function releaseExpanding (elock , id , field )
389
+ local function releaseExpanding (elock , ecall , id , field )
386
390
elock [id ] = nil
391
+ ecall [id ] = nil
387
392
end
388
393
389
394
local function search (uri , id , field )
@@ -812,15 +817,16 @@ function m.searchRefsByID(status, suri, expect, mode)
812
817
end
813
818
814
819
local elock = global and elockMap [' @global' ] or elockMap [uri ]
820
+ local ecall = global and ecallMap [' @global' ] or ecallMap [uri ]
815
821
816
- if lockExpanding (elock , id , field ) then
822
+ if lockExpanding (elock , ecall , id , field ) then
817
823
if noders .forward [id ] then
818
824
checkForward (uri , id , field )
819
825
end
820
826
if noders .backward [id ] then
821
827
checkBackward (uri , id , field )
822
828
end
823
- releaseExpanding (elock , id , field )
829
+ releaseExpanding (elock , ecall , id , field )
824
830
end
825
831
826
832
local source = noders .source [id ]
0 commit comments