Ошибка обновления испорченного кэша компоненты
|
|
sarge061 | Дата: Четверг, 08.08.2024, 17:45 | Сообщение # 1 |
Рядовой
Группа: Пользователи
Сообщений: 8
Репутация: 4
Статус: Оффлайн
|
Ошибка в коде, при испорченном кэше компоненты не происходит обновление суффикса, поскольку флаг КэшКомпонентыИспорчен устанавливается после вызова исключения при попытке создания нового экземпляра компонента.
Сообщение отредактировал sarge061 - Четверг, 08.08.2024, 17:58 |
|
| |
tormozit | Дата: Четверг, 08.08.2024, 19:09 | Сообщение # 2 |
Генералиссимус
Группа: Администраторы
Сообщений: 6457
Репутация: 168
Статус: Оффлайн
| Попробуй начать с описания пользовательской проблемы и предоставления технической информации.
Цитата sarge061 ( ) вызова исключения при попытке создания нового экземпляра компонента В этой ситуации переименование внешней компоненты не приводило к обходу ошибки. Поэтому флаг устанавливается именно после создания объекта компоненты умышленно.
|
|
| |
sarge061 | Дата: Четверг, 08.08.2024, 20:02 | Сообщение # 3 |
Рядовой
Группа: Пользователи
Сообщений: 8
Репутация: 4
Статус: Оффлайн
| Я обнаружил ошибку при использовании многопоточности подбора. Управляющий фоновый поток при попытке поставить паузу уходит в вечный цикл, поскольку исключение происходит на создании нового объекта компоненты, соответственно флаг не сбрасыватся в Истина, а итерации счетчика не происходит. не знаю, как задумывался этот код и флаги, но он некорректно обрабатывает описанную мной ситуацию. Логично перенести итерацию счетчика и флаг испорченного кэша в верхнюю функцию в блок обработки исключения.
|
|
| |
tormozit | Дата: Четверг, 08.08.2024, 20:59 | Сообщение # 4 |
Генералиссимус
Группа: Администраторы
Сообщений: 6457
Репутация: 168
Статус: Оффлайн
| Цитата sarge061 ( ) исключение происходит на создании нового объекта компоненты Какое исключение циклически возникает при создании объекта внешней компоненты? И еще раз прошу предоставить техническую информацию.
|
|
| |
tormozit | Дата: Четверг, 08.08.2024, 21:42 | Сообщение # 5 |
Генералиссимус
Группа: Администраторы
Сообщений: 6457
Репутация: 168
Статус: Оффлайн
| Цитата tormozit ( ) уходит в вечный цикл Возможность вечного цикла подтверждаю https://www.hostedredmine.com/issues/990508
|
|
| |
sarge061 | Дата: Четверг, 08.08.2024, 21:45 | Сообщение # 6 |
Рядовой
Группа: Пользователи
Сообщений: 8
Репутация: 4
Статус: Оффлайн
| Вот здесь исключение. Текста его я не вижу, поскольку в коде описание ошибки не сохраняется в переменную, а увидеть его в отладчике через функцию нельзя.
|
|
| |
tormozit | Дата: Четверг, 08.08.2024, 21:50 | Сообщение # 7 |
Генералиссимус
Группа: Администраторы
Сообщений: 6457
Репутация: 168
Статус: Оффлайн
| Код Если ЗначениеЗаполнено(Суффикс) И Не КэшКомпонентыИспорчен Тогда ВызватьИсключение; КонецЕсли;
Попробуй вставить это сразу после "Исключение"
|
|
| |
sarge061 | Дата: Четверг, 08.08.2024, 22:08 | Сообщение # 8 |
Рядовой
Группа: Пользователи
Сообщений: 8
Репутация: 4
Статус: Оффлайн
| Это не поможет, суффикс всегда будет пустой, т.к. флаг порченного кэша никогда не получает Истина, как и счетчик не двигается.
|
|
| |
tormozit | Дата: Четверг, 08.08.2024, 22:45 | Сообщение # 9 |
Генералиссимус
Группа: Администраторы
Сообщений: 6457
Репутация: 168
Статус: Оффлайн
| Согласен, лучше полный текст сразу
Код Функция НоваяВКОбщаяЛкс(Счетчик = 0) Экспорт Суффикс = ""; Пока Счетчик < 60 Цикл КэшКомпонентыИспорчен = Ложь; Попытка //ВК = Новый ("AddIn.ирОбщая" + Суффикс + ".AddIn"); // При порче кэша тут попытка не срабатывала и исключение шло в вызывающий метод ВК = СоздатьВКОбщая(КэшКомпонентыИспорчен, Суффикс, Счетчик); Прервать; Исключение Если ЗначениеЗаполнено(Суффикс) И Не КэшКомпонентыИспорчен Тогда ВызватьИсключение; КонецЕсли; // https://www.hostedredmine.com/issues/889213 // Занимаем новую ячейку в кэше внутренних компонент рабочего процесса. Суффикс = XMLСтрока(Счетчик); Это64битныйПроцесс = ирКэш.Это64битныйПроцессЛкс(); ИмяМакета = "ВК"; Если Это64битныйПроцесс Тогда ИмяМакета = ИмяМакета + "64"; Иначе ИмяМакета = ИмяМакета + "32"; КонецЕсли; Если ирКэш.ЛиПортативныйРежимЛкс() Тогда ДвоичныеДанные = ирПортативный.ПолучитьМакет(ИмяМакета); АдресКомпоненты = ПолучитьИмяВременногоФайла("dll"); ДвоичныеДанные.Записать(АдресКомпоненты); //АдресКомпоненты = "D:\VC\Native_Comp_RDT\binWin32\AddInNative.dll"; // Для отладки Иначе // https://www.hostedredmine.com/issues/967297 //ДвоичныеДанные = Обработки.ирПортативный.ПолучитьМакет(ИмяМакета); АдресКомпоненты = "Обработка.ирПортативный.Макет." + ИмяМакета; КонецЕсли; Результат = ПодключитьВнешнююКомпоненту(АдресКомпоненты, "ирОбщая" + Суффикс, ТипВнешнейКомпоненты.Native); Если Не Результат Тогда ВызватьИсключение "Не удалось подключить внешнюю компоненту Общая"; КонецЕсли; КонецПопытки; КонецЦикла; Возврат ВК; КонецФункции
|
|
| |
sarge061 | Дата: Пятница, 09.08.2024, 14:42 | Сообщение # 10 |
Рядовой
Группа: Пользователи
Сообщений: 8
Репутация: 4
Статус: Оффлайн
| Добавил обновленный код, но сразу предупрежу, что он в случае исключения попытается зарегистрировать утилиту с постфиксом 0, далее все последующие попытки будут с тем же постфиксом 0, поскольку итерация счетчика на происходит (исключение на попытке создания объекта).
|
|
| |
tormozit | Дата: Пятница, 09.08.2024, 23:17 | Сообщение # 11 |
Генералиссимус
Группа: Администраторы
Сообщений: 6457
Репутация: 168
Статус: Оффлайн
| Цитата sarge061 ( ) все последующие попытки будут с тем же постфиксом 0 Верно. Но ты упустил что таких попыток будет всего одна.
|
|
| |
tormozit | Дата: Воскресенье, 11.08.2024, 22:11 | Сообщение # 12 |
Генералиссимус
Группа: Администраторы
Сообщений: 6457
Репутация: 168
Статус: Оффлайн
| Исправлено в 7.39
|
|
| |