Требует действийможет затронуть работающую системуДва merge commit не требуют отдельных записей. Merge #554 добавляет THttpServerRequestAbstract.SetOutStream и управление владением/range; merge #572 вносит lazy initialization HTTP API WebSocket, рассмотренную в его non-merge commit. Файлы учёта версии проигнорированы.
Очистка при завершении потока автоматизирована, типы callback изменены
Завершение потоков теперь централизовано в TThreadAbstract; для приложений, которые переопределяют или назначают соответствующие callbacks и методы REST/ORM, изменились несовместимые на уровне исходников сигнатуры. Отдельное исправление не позволяет TWebSocketProtocol.SetEncryptKey молча отключать шифрование при aSettings = nil. Также исправлена конкурентность запуска HTTP API WebSocket в Windows, нескольких общих кэшей и периодических очисток, а слитая функция позволяет HTTP-обработчикам передавать тело ответа из TStream.
Коротко
- TOnNotifyThread теперь принимает TThreadAbstract, TSynLogFamily.OnThreadEnded удалён, связанные виртуальные методы REST/ORM также используют TThreadAbstract.
- TWebSocketProtocol.SetEncryptKey теперь сохраняет шифрование при непустом ключе и aSettings = nil.
- HTTP API WebSocket инициализируется лениво и последовательно; Wine явно не использует неполные пути websocket.dll и http.sys.
- HTTP-обработчики могут возвращать TStream через SetOutStream; socket-серверы передают поток, а http.sys и REST-over-WebSockets буферизуют его в документированных пределах.
- Исправления CAS и блокировок исключают дублирование очисток idle, сессий, кэшей и соединений при конкурентных запросах.
Рекомендации по обновлению
Используйте build 2.4.16737, если применяете WebSocket-шифрование с nil в параметрах, Windows HTTP API WebSocket или затронутые общие кэши. Пересоберите пользовательские callbacks потоков и потомков REST/ORM: TOnNotifyThread и несколько виртуальных методов теперь требуют TThreadAbstract. Прямые вызовы LockedGet32 замените на LockedReset32. В исходном payload нет более поздних замен этих изменений в этой редакции.
33 из 33 записей · 35 коммитов в апстриме
1
Высокий
REST- и ORM-хуки потоков теперь требуют TThreadAbstract
Публичные BeginCurrentThread, EndCurrentThread, OnBeginCurrentThread, OnEndCurrentThread, HttpThreadStart и HttpThreadTerminate в mormot.rest.core, mormot.rest.server, mormot.rest.http.server и mormot.orm теперь принимают TThreadAbstract вместо TThread. Явная очистка семейства логов удалена.
Несовместимые изменения
mormot.orm.core+5
69869f49+33-36
rest/orm: use TOnNotifyThread new definition
Влияние
Пользовательские потомки с override этих методов и методы, назначенные хукам, могут не компилироваться до замены Sender на TThreadAbstract. Очистка во время выполнения затем идёт через новый базовый класс.
Требуется миграция
Найдите override и callbacks BeginCurrentThread, EndCurrentThread, OnBeginCurrentThread, OnEndCurrentThread, HttpThreadStart и HttpThreadTerminate; замените Sender: TThread на Sender: TThreadAbstract и пересоберите.
Публичный API
TRest.BeginCurrentThread / TRest.EndCurrentThreadsignature-changed — Sender изменён с TThread на TThreadAbstract.TRestOrmParent.BeginCurrentThread / TRestOrmParent.EndCurrentThreadsignature-changed — Sender изменён с TThread на TThreadAbstract.
2
Высокий
TOnNotifyThread сужен, callback семейства журналов удалён
mormot.core.threads меняет TOnNotifyThread с procedure(Sender: TThread) на procedure(Sender: TThreadAbstract). Добавлен TThreadAbstract.OnThreadEnded, из mormot.core.log удалён TSynLogFamily.OnThreadEnded, очистка TLoggedThread вынесена из его DoTerminate.
Несовместимые изменения
mormot.core.log+1
f1f8d766+12-13
core: breaking change of TSynLogFamily.OnThreadEnded into TThreadAbstract
Влияние
Существующие callback-методы с Sender: TThread несовместимы с TOnNotifyThread, прямые ссылки на TSynLogFamily.OnThreadEnded не компилируются. Нужна миграция исходников Delphi и FPC.
Требуется миграция
Найдите назначения TOnNotifyThread и обработчики Sender: TThread, замените на Sender: TThreadAbstract; ссылки TSynLogFamily.OnThreadEnded замените на TThreadAbstract.OnThreadEnded или автоматическую очистку TThreadAbstract.
Публичный API
TOnNotifyThreadsignature-changed — Sender теперь TThreadAbstract вместо TThread.TSynLogFamily.OnThreadEndedremoved — Очистка перенесена в TThreadAbstract.TThreadAbstract.OnThreadEndedadded — Обёртка TSynLog.NotifyThreadEnded с новым типом callback.
3
Высокий
LockedGet32 переименован и атомарно устанавливает любое целое
mormot.core.base заменяет публичную функцию LockedGet32(Target) на LockedReset32(Target, New), где New по умолчанию равен нулю. Оба вызова счётчиков пробуждения в mormot.net.async обновлены.
Несовместимые изменения
mormot.core.base+1
bcf834a5+9-9
core: new LockedReset32() wrapper function
Влияние
Код с прямым вызовом LockedGet32 больше не компилируется. LockedReset32 без второго аргумента сохраняет прежний обмен с нулём, новый параметр позволяет задать другое значение.
Требуется миграция
Найдите LockedGet32 и замените каждый вызов на LockedReset32; передавайте New только для значения, отличного от нуля.
Публичный API
LockedGet32removed — Заменена на LockedReset32.LockedReset32added — Атомарно возвращает Target^ и заменяет его на New, по умолчанию ноль.
4
Высокий
nil в настройках WebSocket больше не отключает шифрование
TWebSocketProtocol.SetEncryptKey в mormot.net.ws.core теперь выходит только при пустом ключе, а не при aSettings = nil. Без настроек он пробует ECDHE-файл, полную синтаксическую форму ключа, затем legacy Sha256Weak для AES-CTR-128.
Безопасность
mormot.net.ws.core
57660dac+18-11
net: fixed TWebSocketProtocol.SetEncryptKey() with aSettings = nil
Влияние
Раньше непустой ключ с aSettings = nil очищал fEncryption и выходил, молча оставляя протокол без защиты. Теперь такой вызов включает шифрование с документированными настройками совместимости.
Рекомендуется обновиться
Обновите endpoints, вызывающие SetEncryptKey с непустым ключом и nil settings, затем проверьте одинаковый cipher на обеих сторонах. Для новых паролей задавайте явные PBKDF2-настройки.
Публичный API
TWebSocketProtocol.SetEncryptKeybehaviour-changed — nil в aSettings теперь выбирает настройки совместимости, а не отключает шифрование.
Модули
5
Высокий
Конструктор HTTP API WebSocket безопасно инициализирует websocket.dll
THttpApiWebSocketServer.Create в mormot.net.server вызывает WebSocketApiInitialize до проверки WebSocketApi.WebSocketEnabled. mormot.lib.winhttp загружает DLL и связывает exports под реентерабельной глобальной блокировкой; тесты покрывают первый вызов конструктора и 16 потоков.
Исправления
mormot.lib.winhttp+1
41dbfbba+211-18
fix: initialize HTTP API WebSockets lazily
Влияние
Windows HTTP API WebSocket сервер может быть первым пользователем API в процессе без ложной ошибки 'not supported'; конкурентный первый вызов не увидит частично связанные указатели функций.
Рекомендуется обновиться
Обновите Windows-службы, создающие THttpApiWebSocketServer до любого WinHTTP WebSocket клиента.
Публичный API
THttpApiWebSocketServer.Createbehaviour-changed — Лениво инициализирует WebSocket API до проверки доступности.
6
Средний
Финальная правка не даёт старому результату кэша перезаписать новый
В mormot.core.os TCachedValue.Cache сохраняет результат медленного callback только если TixShr всё ещё равен tick, захваченному до вызова. Также чтение TSynDictionary переведено на VCardinal, код в mormot.rest.server упрощён, в остальных модулях уточнены комментарии.
Исправления
mormot.core.json+4
14d901e8+16-16
all: some refactoring after today's commits
Влияние
Конкурентный старый медленный расчёт больше не перезапишет новое значение кэша. API существующего кода Delphi/FPC этим commit не меняется.
Рекомендуется обновиться
Возьмите эту финальную build, если TCachedValue используется из нескольких потоков.
7
Средний
Кэш времени REST получил атомарное обновление и чтение под блокировкой
TRest.GetServerTimestamp в mormot.rest.core использует LockedExc32, выбирая одно обновление на интервал 512 мс. TLightLock защищает чтение и запись кэшированного TTimeLogBits.
Исправления
mormot.rest.core
ad1dcbf5+18-12
rest: made TRest.GetServerTimestamp atomic
Влияние
Параллельные REST-запросы получают согласованное время, в том числе в 32-битных Delphi/FPC, где 64-битное значение не атомарно. API приложения не меняется.
Рекомендуется обновиться
Обновитесь, если один экземпляр TRest обслуживает конкурентные запросы на 32-битной платформе.
Модули
8
Средний
Повторно используемые слоты журналирования полностью сбрасывают состояние
TSynLog.NotifyThreadEnded в mormot.core.log обнуляет ThreadNumber как одноразовый маркер возврата, а InitThreadNumber сбрасывает RecursionCount и Flags до назначения повторного слота. ThreadBitLo остаётся маркером lazy initialization.
Исправления
mormot.core.log
35d353c9+13-9
core: fixed TSynLog.NotifyThreadEnded threads recycling
Влияние
Короткоживущие потоки при повторном слоте TSynLog не наследуют recursion и per-thread flags предыдущего потока. Это исключает молчаливое подавление записей и устаревшее состояние.
Рекомендуется обновиться
Обновите службы с большим числом коротких logging-потоков или пользовательскими per-thread флагами TSynLog.
Модули
9
Средний
Обновление Kerberos keytab сериализовано без блокировки на время загрузки
TServerSspiKeyTab.TryRefresh в mormot.lib.gssapi через fSafe захватывает двухсекундное окно, затем вызывает SetKeyTab вне блокировки. Tick увеличен на один, чтобы первый интервал не совпал с начальным нулём.
Исправления
mormot.lib.gssapi
6f53f3d7+14-7
lib: optimized TServerSspiKeyTab.TryRefresh thread safety
Влияние
Конкурентные SSPI/GSSAPI-проверки больше не перезагружают один keytab одновременно, а другие вызовы не ждут под блокировкой разбора файла. Публичные API не меняются.
Рекомендуется обновиться
Обновите Kerberos-серверы, которые перечитывают keytab при конкурентных запросах.
Модули
10
Средний
WebSocket DLL проверяется один раз и отключается под Wine
TWebSocketApi получает флаг Tested в mormot.lib.winhttp. WebSocketApiInitialize фиксирует первую попытку под глобальной блокировкой, не повторяет неудачные загрузки и сразу возвращается под Wine, где websocket.dll содержит лишь часть заглушек.
Исправления
mormot.lib.winhttp
2f0cdace+14-6
lib: fixed WebSocketApiInitialize
Влияние
Неподдерживаемые Windows-среды не повторяют проверку DLL, а Wine не считается WebSocket-совместимым лишь из-за заглушек экспорта. Поддерживаемые системы инициализируются один раз.
Рекомендуется обновиться
Для Windows или Wine применяйте вместе с lazy initialization и wsWeakHttpSys.
Публичный API
TWebSocketApi.Testedadded — Показывает, что доступность websocket.dll уже проверена.
Модули
11
Средний
Конкурентные REST-запросы больше не вызывают OnIdle одновременно
TRestServer.Uri в mormot.rest.server заменяет проверку read-then-write fOnIdleLastTix на compare-and-swap LockedExc32. OnIdle вызывает только запрос, продвинувший tick.
Исправления
mormot.rest.server
7df2308e+8-8
rest: fixed TRestServer.OnIdle trigger
Влияние
OnIdle больше не выполняется параллельно только из-за завершения запросов в один tick. Backend с нереентерабельным idle-кодом избегают дублирования и гонок.
Рекомендуется обновиться
Обновитесь, если TRestServer.OnIdle выполняет stateful или нереентерабельное обслуживание.
Публичный API
TRestServer.OnIdlebehaviour-changed — За один tick его вызывает не более одного запроса.
Модули
12
Средний
CAS кэша времени больше не использует одну переменную как ожидаемое значение
FromGlobalTime в mormot.core.datetime копирует GlobalTime.clock в локальную c и передаёт это стабильное ожидаемое значение в LockedExc32. Ранее clock служил и целью, и ожидаемым аргументом.
Исправления
mormot.core.datetime
f7cfb5db+8-5
core: fixed FromGlobalTime() atomicity
Влияние
Конкурентное форматирование времени теперь однозначно выбирает обновляющий поток через CAS перед записью в общий кэш 16 мс. Сигнатура и точность для Delphi/FPC прежние.
Рекомендуется обновиться
Обновите многопоточные серверы, часто форматирующие глобальное или локальное время.
Модули
13
Средний
TLoggedThread освобождает logging-состояние даже без записей
TLoggedThread.DoTerminate в mormot.core.threads удаляет ранний выход при fLog = nil и безусловно вызывает TSynLog.NotifyThreadEnded после inherited DoTerminate, затем очищает fLog.
Исправления
mormot.core.threads
2c03b28a+3-5
core: fixed TLoggedThread.DoTerminate
Влияние
TLoggedThread, получивший thread-local метаданные, но не записавший строку, теперь корректно возвращает слот. Долгоживущие службы не исчерпывают реестр logging-потоков.
Рекомендуется обновиться
Обновите службы с множеством коротких TLoggedThread, включая завершающиеся без записей.
Модули
14
Средний
Предварительно подключённые tunnel workers начинают с успешного результата
TTunnelLocalThread.DoExecute в mormot.net.tunnel устанавливает res := nrOk, когда socket уже подключён главным потоком, до fState := stProcessing. Раньше ветка оставляла res неинициализированным или старым.
Исправления
mormot.net.tunnel
677a3579+5-2
net: fixed TTunnelLocalThread process
Влияние
Tunnel-сессии с socket, подключённым главным потоком, больше не передают неопределённый результат в обработку ошибок или завершения. Процесс и API прежние.
Рекомендуется обновиться
Обновите развёртывания TTunnelLocalThread, где socket подключается главным потоком.
Модули
15
Средний
TCachedValue резервирует обновление до снятия блокировки
TCachedValue.Cache в mormot.core.os записывает Tix32 под Safe до медленного callback Call вне блокировки. Обновление помечается занятым до входа другого потока.
Исправления
mormot.core.os
84ab9449+3-3
core: fixed race in TCachedValue.Cache
Влияние
Несколько вызовов больше не запускают одинаковое дорогое вычисление в одном интервале. Последующий 14d901e также не даёт запоздалому старому расчёту перезаписать новый.
Рекомендуется обновиться
Берите итог редакции, а не этот commit: 14d901e завершает защиту конкурентного обновления кэша.
Модули
16
Средний
TThreadAbstract теперь всегда очищает журнал при завершении
TThreadAbstract.DoTerminate в mormot.core.threads вызывает TSynLog.NotifyThreadEnded после inherited termination и legacy-обновления Finished, подавляя исключения завершения. Очереди и таймеры удаляют явные callbacks, отдельный logging flush TThread сохраняет ручной вызов.
Новые возможности
mormot.core.log+2
8ef4ae1b+30-35
core: TThreadAbstract calls TSynLog.NotifyThreadEnded
Влияние
Каждый потомок, корректно вызывающий inherited DoTerminate, автоматически освобождает per-thread состояние журналирования. Потомки обычного TThread с TSynLog всё ещё должны вызывать TSynLog.NotifyThreadEnded сами.
Стоит взглянуть
Публичный API
TThreadAbstract.DoTerminatebehaviour-changed — Автоматически вызывает TSynLog.NotifyThreadEnded при завершении потока.
17
Средний
TThreadAbstract предоставляет Finished и в Delphi 7/2007
mormot.core.threads добавляет в TThreadAbstract публичное эмулированное Finished и fFinished, если их нет в RTL, устанавливая флаг в DoTerminate. TLoggedThread.ExecuteDone удалён, mormot.net.tftp.server использует Finished.
Компилятор и платформы
mormot.core.threads+1
5678b9d9+31-13
core: emulate TThread.Finished property on Delphi 7/2007
Влияние
Старые Delphi могут проверять TThreadAbstract.Finished так же, как новые Delphi/FPC. Код с публичным TLoggedThread.ExecuteDone должен перейти на Finished.
Требуется миграция
Найдите TLoggedThread.ExecuteDone и замените на унаследованное свойство Finished.
Публичный API
TThreadAbstract.Finishedadded — Эмулируется для Delphi 7/2007; в новых RTL уже существует.TLoggedThread.ExecuteDoneremoved — Используйте Finished.
18
Средний
Wine получил отдельный флаг ненадёжного http.sys
mormot.core.os добавляет wsWeakHttpSys в TWindowsSpecs и устанавливает его при обнаружении Wine. TRestHttpServer.Create в mormot.rest.http.server использует флаг для перехода с HTTP_API_MODES на useHttpAsync.
Компилятор и платформы
mormot.core.os+3
b4238a29+10-8
net: introducing wsWeakHttpSys flag
Влияние
REST-серверы под Wine обходят заведомо неполный http.sys и используют асинхронный socket-сервер. Поведение нативной Windows не меняется.
Рекомендуется обновиться
Обновите Wine-развёртывания с режимом HTTP API и проверьте в журнале переход на useHttpAsync.
Публичный API
TWindowsSpecs.wsWeakHttpSysadded — Отмечает окружения, где не следует выбирать http.sys.
19
Средний
Рабочие потоки HTTP API WebSocket перешли на новый тип callback
mormot.net.server меняет параметры TSynThreadPoolHttpApiWebSocketServer.OnThreadStart и OnThreadTerminate на TThreadAbstract. TSynWebSocketGuard наследуется от TThreadAbstract и удаляет ручной TSynLog.NotifyThreadEnded.
Компилятор и платформы
mormot.net.server
f115b536+7-8
net: follow new TThreadAbstract / TOnNotifyThread definitions
Влияние
WebSocket workers и guard компилируются с новым TOnNotifyThread и получают автоматическую очистку журнала. Пользовательским потомкам с override защищённых callbacks может понадобиться та же смена сигнатуры.
Стоит взглянуть
Модули
20
Низкий
Очистка словаря получила атомарный секундный затвор
TSynDictionary.DeleteDeprecated в mormot.core.json читает общий tick через новое поле TSynVarData.VCardinal и захватывает проверку через LockedExc32. mormot.core.base добавляет это поле variant record.
Производительность
mormot.core.base+1
c7887dc9+35-33
core: ensure TSynDictionary.DeleteDeprecated trigger is atomic
Влияние
Конкурентные пользователи словаря не дублируют очистку в одну секунду. Поведение TSynDictionary сохраняется; код с TSynVarData может использовать новое беззнаковое представление.
Публичный API
TSynVarData.VCardinaladded — 32-битное беззнаковое представление variant record.
21
Низкий
Сканирование устаревших соединений выполняется один раз за интервал
TSqlDBConnectionPropertiesThreadSafe.ThreadSafeConnection в mormot.db.sql заменяет несинхронную запись времени на LockedExc32 перед DeleteDeprecated. ClearConnectionPool атомарно сбрасывает триггер.
Производительность
mormot.db.sql
a6d76aa9+12-9
db: use CAS for TSqlDBConnectionPropertiesThreadSafe.DeleteDeprecated
Влияние
При конкурентной SQL-нагрузке только один поток выполняет необязательную очистку соединений раз в 32 секунды. Поведение backend и публичные API не меняются.
Модули
22
Низкий
Очистка кэша методов MVC выполняется один раз в секунду
Обработка TMvcRunWithViews в mormot.core.mvc теперь захватывает fOnIdlePurgeCacheTix32 через LockedExc32 до PurgeMethodCache. Сам PurgeMethodCache больше не записывает tick.
Производительность
mormot.core.mvc
83f4846b+6-5
mvc: atomic TMvcRunWithViews.PurgeMethodCache
Влияние
Конкурентные MVC-запросы не дублируют полный просмотр кэша в одну секунду. Результаты и прикладные API MVC ведут себя по-прежнему.
Модули
23
Низкий
Устаревшие REST-сессии очищает один запрос за интервал
TRestServerUriContext.Authenticate в mormot.rest.server теперь продвигает fSessionsDeprecatedTix через LockedExc32 до SessionDeleteDeprecated. Отдельная неатомарная запись из очистки удалена.
Производительность
mormot.rest.server
14d5a05d+6-5
rest: use a CAS trigger for TRestServer.SessionDeleteDeprecated
Влияние
На загруженных серверах несколько потоков больше не входят одновременно в ежесекундную проверку истечения сессий. Семантика и публичные API не меняются.
Модули
24
Низкий
Время HTTP-журнала форматирует один поток в секунду
THttpLogger.Append в mormot.net.http применяет LockedExc32 к fTimeTix32 перед SetTimeText. Конкурентные запросы переиспользуют строки ISO-8601 и NCSA вместо параллельного форматирования.
Производительность
mormot.net.http
d7b698d8+6-5
net: optimized THttpLogger.Append time update
Влияние
При интенсивном HTTP-журналировании меньше дублируется преобразование дат, сохраняя секундный кэш. Формат журнала и публичные API не меняются.
Модули
25
Низкий
Объявления StackTrace снова компилируются в Delphi 7
mormot.core.log добавляет static к двум перегрузкам TSynLog.StackTrace только при HASINLINE. Старые Delphi больше не разбирают неподдерживаемую директиву.
Компилятор и платформы
mormot.core.log
332614f5+6-4
code: fixed Delphi 7 compilation
Влияние
Сборки Delphi 7 с mormot.core.log снова компилируются. Новые Delphi и FPC сохраняют API StackTrace и поведение.
Рекомендуется обновиться
Обновитесь, если Delphi 7 останавливался на объявлениях TSynLog.StackTrace.
Модули
26
Низкий
Флаги компилятора теперь отражают наличие TThread.Finished
mormot.defines добавляет HASTTHREADFINISHED для FPC и Unicode Delphi и документирует WINDELPHI перед определением для Delphi в Windows. Условия поддерживают legacy-совместимость TThread.
Компилятор и платформы
mormot.defines
86422854+6-3
core: added missing HASTTHREADFINISHED conditional
Влияние
Фреймворк включает эмуляцию Finished только для Delphi 7/2007, а не для платформ с готовым свойством. Прямого изменения API приложения нет.
Модули
27
Низкий
Правка response streams уточняет очистку и диагностику тестов
После merge SetOutStream mormot.net.http делает OutContentStreamDiscard безопасным для nil и централизованно сбрасывает поля. mormot.net.async уточняет, что AsyncResponse удаляет ожидающий поток; тесты используют RaiseStreamError и игнорируют ожидаемый EStreamError.
Внутреннее устройство
mormot.net.async+1
7627b1ad+20-26
net: some refactoring after #554
Влияние
Owned response streams по-прежнему освобождаются, отложенный async-контент заменяет ожидающий поток. API SetOutStream и ограничения серверов не меняются.
28
Низкий
Стартовые nonce больше не входят рекурсивно в основной Random128
TCryptRandomEntropy.Create в mormot.crypt.secure заполняет 16-байтный nonce приложения через RandomBytes вместо Random128. Комментарии уточняют предотвращение рекурсии Random128 в TAes.EncryptInitRandom и роль системного RNG как fallback seed.
Внутреннее устройство
mormot.core.os.posix+5
a0141ee6+13-23
core: don't call Random128() at startup
Влияние
Инициализация источника энтропии не входит повторно в основной PRNG во время его создания. Nonce остаётся случайным; публичные random API и форматы данных не меняются.
29
Низкий
Кэш времени теперь хранит TSynSystemTime напрямую
mormot.core.datetime меняет поле GlobalTime с TSystemTime на TSynSystemTime и удаляет локальный absolute alias в FromGlobalTime. Padding сохраняет размер записи в 64 байта.
Внутреннее устройство
mormot.core.datetime
6dda432f+12-11
core: simplified FromGlobalTime() implementation
Влияние
Это упрощает внутреннее копирование без изменения публичного контракта FromGlobalTime и точности 16 мс. Код Delphi/FPC не затронут.
Модули
30
Низкий
Watchdog Angelize отказался от ручных callbacks очистки журнала
mormot.app.agl удаляет явные вызовы TSynLog.NotifyThreadEnded и log.Family.OnThreadEnded из TSynAngelizeRunner и создания watchdog. Очистку обеспечивает наследование TThreadAbstract.
Внутреннее устройство
mormot.app.agl
afde3637+4-5
agl: follow new TThreadAbstract feature
Влияние
Поведение Angelize остаётся прежним, но уведомление о завершении централизовано вместо ручных вызовов в каждом классе. API не меняется.
Модули
31
Низкий
Потоки SQLite и PostgreSQL согласованы с централизованной очисткой журнала
mormot.db.sql.postgres удаляет лишний SynDBLog.NotifyThreadEnded из асинхронного потока на TThreadAbstract. Поток резервной копии SQLite остаётся обычным TThread и сохраняет явно документированный SQLite3Log.NotifyThreadEnded.
Внутреннее устройство
mormot.db.raw.sqlite3+1
9a1c1313+4-5
db: adapt to the new TThreadAbstract class
Влияние
Очистка журналов DB-потоков должна выполняться ровно один раз без изменения SQLite backup и PostgreSQL async. Прикладные API базы данных не меняются.
32
Низкий
Тесты и пример журналирования перешли на TThreadAbstract
Демонстрация dmvc-ai и TPipeConsumerThread в test.net.proto теперь наследуются от TThreadAbstract вместо TThread. Реализация фреймворка и публичные объявления не меняются.
Тесты
56660c17+4-4
test: favor TThreadAbstract usage
Влияние
Код приложений не затронут; примеры показывают предпочтительный базовый класс с автоматической очисткой журнала.
33
Низкий
Документация Sha256Weak явно ограничивает его legacy-совместимостью
Комментарии mormot.crypt.core уточняют: Sha256Weak дополняет вход короче 256 байт, нужен только для совместимости mORMot 1 и не должен применяться в новом коде или данных. Рекомендованы TSynSigner.Pbkdf2 и Modular Crypt.
Документация
mormot.crypt.core
8d60e5ed+7-6
crypt: refined Sha256Weak() documentation
Влияние
Поведение и API не меняются. Формулировка помогает security review считать Sha256Weak долгом совместимости, а не допустимой схемой вывода пароля.
Стоит взглянуть
Публичный API
Sha256Weakdeprecated — Документация оставляет его только для совместимости mORMot 1; для новых данных используйте TSynSigner.Pbkdf2 или Modular Crypt.