Изоляция codec worker от сбоев
HotPDF может вынести декодирование изображений с высоким риском — DCTDecode, JPXDecode и JBIG2Decode — из хост-процесса
Режимы изоляции
cimAutomatic— по умолчанию; используетHotPDFCodecWorker.exe, если тот лежит рядом с исполняемым файлом хоста, иначе сохраняет совместимый in-process путьcimRequiredотказывает целиком, когда worker отсутствует, не стартует, падает, превышает таймаут, отвергает ввод или выходит за лимит выводаcimDisabledвсегда использует существующие in-process декодеры
Как только доступный worker принял запрос, cimAutomatic не ретраит сбойный или вредоносный ввод в хост-процессе
Граница процесса
Каждый запрос декодирования выполняется в свежем скрытом процессе, назначенном в однопроцессный Windows Job Object
- Job Object завершает worker и любые попытки порождения потомков при закрытии своего handle
CodecWorkerMemoryLimitBytesзадаёт потолок committed-памяти на процесс и по умолчанию равен 512 MiBCodecWorkerTimeoutMillisecondsпо умолчанию 10,000 ms и завершает зависший worker- Закодированный ввод, опциональные JBIG2 globals и вывод BGR24 используют одно случайно именованное shared-memory отображение с версионированным протоколом фиксированной ширины
- Ёмкость декодированного вывода ограничена заявленной геометрией изображения и
DecodeBudgetBytes - Запросы JPEG с низким разрешением несут точные целевые размеры и возвращают reduced-DCT геометрию, не строя полноразмерный raster в worker'е
Конфигурация
PDF.CodecIsolationMode := cimRequired;
PDF.CodecWorkerExecutable :=
'C:\Program Files\MyApp\HotPDFCodecWorker.exe';
PDF.CodecWorkerTimeoutMilliseconds := 5000;
PDF.CodecWorkerMemoryLimitBytes := 256 * 1024 * 1024;
Bitmap := PDF.ExtractLoadedImage(0);
if Bitmap = nil then
begin
PDF.GetLastCodecWorkerInfo(Info);
Writeln(Ord(Info.Status), ': ', Info.ErrorMessage);
end;
Пустой CodecWorkerExecutable разрешается в HotPDFCodecWorker.exe рядом с текущим приложением
Телеметрия
GetLastCodecWorkerInfo сообщает статус, идентификатор процесса, код выхода, прошедшие миллисекунды и ограниченную диагностику на стороне хоста
GetLastJPEGReducedDecodeInfo сообщает геометрию источника, масштабирования, вывода и scanline после изолированного reduced JPEG-запроса
Отдельные статусы покрывают недоступных или незапускаемых worker'ов, таймаут, падение, отказ декодирования, несовпадение протокола и лимиты декодированного вывода
Сборка и развёртывание
build-HotPDF-Codec-Worker.cmd
Команда сборки выдаёт отдельные worker'ы Win32 и Win64 под tools\CodecWorker\<platform>\Release; разворачивайте worker, совпадающий с архитектурой хост-процесса