Изменить версию Lua с 5.4.1 до 5.4.2

Страницы: 1
RSS
Изменить версию Lua с 5.4.1 до 5.4.2
 
Поскольку известно, что в Lua 5.4.1 есть неприятный баг

https://www.lua.org/bugs.html#5.4.1-1

https://forum.quik.ru/messages/forum10/message51162/topic6053/#message51162

исправленный в Lua 5.4.2, имеет смысл поднять версию внутри QUIK.
 
Заходит пациент в кабинет к доктору.
-- На что жалуетесь?
-- Доктор, меня все игнорируют.
-- Следующий.


https://forum.quik.ru/messages/forum10/message51220/topic6053/#message51220
 
Существует ненулевая вероятность, что сборщик придёт как раз во время обхода таблицы в одном из потоков.
Скрытый текст
 
Этот тест воспроизводит ошибку? Если да, то разработчикам, всё-таки, стоит зарегистрировать пожелание.
 
В Lua 5.3 и Lua 5.4:
Цитата
invalid key to 'next'
 
Старатель, добрый день!

Правильно понимаем, что при работе данного скрипта:
Цитата
Старатель написал:
local p = {}
function OnParam(class_code, sec_code)
 p[sec_code] = class_code
end

local t = {}
function OnAllTrade(alltrade)
 t[alltrade.sec_code] = alltrade.class_code
end

function main()
 while run do
   for k, v in pairs(p) do
     p[k] = nil
   end
   for k, v in pairs(t) do
     t[k] = nil
   end
   sleep(1)
 end
end
С некоторой вероятностью может появиться следующая ошибка?
Цитата
Старатель написал:
invalid key to 'next'
У себя подобного за целый день не увидели, можете предоставить снимки экрана?
 
Цитата
Roman Azarov написал:
С некоторой вероятностью может появиться следующая ошибка?
Верно

Цитата
Roman Azarov написал:
У себя подобного за целый день не увидели
Можете форсировать события:
Скрытый текст
и сделать перезаказ всех обезличенных сделок.
 
Чтобы обход таблицы был более корректным, изменим тестовый скрипт, так, чтобы добавление и удаление полей таблицы осуществлялось в одном потоке:
Скрытый текст

Ошибка "invalid key to 'next'" никуда не делась.
Для форсирования: перезаказать все обезличенные сделки.
 
На самом деле, при использовании в боевом скрипте внутри цикла pairs, ещё много операций, а иначе зачем он нужен?  :lol: Типа:
Код
for sec_code, class_code in pairs(p) do
  p[sec_code] = nil
  local last = tonumber(getParamEx2(class_code, sec_code, "LAST"))
  ...
end
И тогда ошибка возникает практически сразу (без форсирования).
В таком случае, чтобы избежать ошибки, таблицу лучше обходить через next.
Страницы: 1
Читают тему (гостей: 1)
Наверх