diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\320\276\320\264\320\265\320\273\320\272\320\260.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\320\276\320\264\320\265\320\273\320\272\320\260.os" index bb74775..c008e18 100644 --- "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\320\276\320\264\320\265\320\273\320\272\320\260.os" +++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\320\276\320\264\320\265\320\273\320\272\320\260.os" @@ -293,7 +293,7 @@ Если Желудь = Неопределено Тогда Попытка Семафор = Семафоры.Получить(Имя); - Семафор.Захватить(); + ЗахватитьСемафор(Семафор); Желудь = ИнициализированныеЖелудиОдиночки.Получить(Имя); Если Желудь = Неопределено Тогда @@ -303,9 +303,12 @@ Семафор.Освободить(); Исключение - Лог.Ошибка("Не удалось инициализировать желудь %1", Имя); - Лог.Ошибка(ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + ТекстСообщения = СтрШаблон("Не удалось инициализировать желудь %1", Имя); + ТекстОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + Лог.Ошибка(ТекстСообщения); + Лог.Ошибка(ТекстОшибки); Семафор.Освободить(); + ВызватьИсключение СтрШаблон("%1; %2", ТекстСообщения, ТекстОшибки); КонецПопытки; КонецЕсли; @@ -313,6 +316,14 @@ КонецФункции +Процедура ЗахватитьСемафор(Семафор) + Попытка + Семафор.Захватить(50); + Исключение + ВызватьИсключение "Циклическое внедрение пластилина"; + КонецПопытки; +КонецПроцедуры + Процедура ПроверитьСостояниеИнициализация() Если НЕ СостояниеПриложения = СостоянияПриложения.Инициализация() Тогда diff --git "a/tests/\320\236\321\210\320\270\320\261\320\276\321\207\320\275\321\213\320\265\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\273\320\260\321\201\321\201\321\213/\320\222\321\202\320\276\321\200\320\276\320\271\320\226\320\265\320\273\321\203\320\264\321\214\320\241\320\246\320\270\320\272\320\273\320\270\321\207\320\275\321\213\320\271\320\227\320\260\320\262\320\270\321\201\320\270\320\274\320\276\321\201\321\202\321\214\321\216.os" "b/tests/\320\236\321\210\320\270\320\261\320\276\321\207\320\275\321\213\320\265\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\273\320\260\321\201\321\201\321\213/\320\222\321\202\320\276\321\200\320\276\320\271\320\226\320\265\320\273\321\203\320\264\321\214\320\241\320\246\320\270\320\272\320\273\320\270\321\207\320\275\321\213\320\271\320\227\320\260\320\262\320\270\321\201\320\270\320\274\320\276\321\201\321\202\321\214\321\216.os" new file mode 100644 index 0000000..9ec03b9 --- /dev/null +++ "b/tests/\320\236\321\210\320\270\320\261\320\276\321\207\320\275\321\213\320\265\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\273\320\260\321\201\321\201\321\213/\320\222\321\202\320\276\321\200\320\276\320\271\320\226\320\265\320\273\321\203\320\264\321\214\320\241\320\246\320\270\320\272\320\273\320\270\321\207\320\275\321\213\320\271\320\227\320\260\320\262\320\270\321\201\320\270\320\274\320\276\321\201\321\202\321\214\321\216.os" @@ -0,0 +1,5 @@ +&Пластилин Перем ПервыйЖелудьСЦикличныйЗависимостью; + +&Желудь +Процедура ПриСозданииОбъекта() +КонецПроцедуры \ No newline at end of file diff --git "a/tests/\320\236\321\210\320\270\320\261\320\276\321\207\320\275\321\213\320\265\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\320\265\321\200\320\262\321\213\320\271\320\226\320\265\320\273\321\203\320\264\321\214\320\241\320\246\320\270\320\272\320\273\320\270\321\207\320\275\321\213\320\271\320\227\320\260\320\262\320\270\321\201\320\270\320\274\320\276\321\201\321\202\321\214\321\216.os" "b/tests/\320\236\321\210\320\270\320\261\320\276\321\207\320\275\321\213\320\265\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\320\265\321\200\320\262\321\213\320\271\320\226\320\265\320\273\321\203\320\264\321\214\320\241\320\246\320\270\320\272\320\273\320\270\321\207\320\275\321\213\320\271\320\227\320\260\320\262\320\270\321\201\320\270\320\274\320\276\321\201\321\202\321\214\321\216.os" new file mode 100644 index 0000000..59b5a5d --- /dev/null +++ "b/tests/\320\236\321\210\320\270\320\261\320\276\321\207\320\275\321\213\320\265\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\320\265\321\200\320\262\321\213\320\271\320\226\320\265\320\273\321\203\320\264\321\214\320\241\320\246\320\270\320\272\320\273\320\270\321\207\320\275\321\213\320\271\320\227\320\260\320\262\320\270\321\201\320\270\320\274\320\276\321\201\321\202\321\214\321\216.os" @@ -0,0 +1,5 @@ +&Пластилин Перем ВторойЖелудьСЦикличныйЗависимостью; + +&Желудь +Процедура ПриСозданииОбъекта() +КонецПроцедуры \ No newline at end of file diff --git "a/tests/\320\237\320\276\320\264\320\265\320\273\320\272\320\260.os" "b/tests/\320\237\320\276\320\264\320\265\320\273\320\272\320\260.os" index 79894b3..993263b 100644 --- "a/tests/\320\237\320\276\320\264\320\265\320\273\320\272\320\260.os" +++ "b/tests/\320\237\320\276\320\264\320\265\320\273\320\272\320\260.os" @@ -993,3 +993,20 @@ КонецПроцедуры + +&Тест +Процедура ПроверкаИсключенияНаЦикличномВнедрении() Экспорт + // Дано + Поделка = Новый Поделка(); + Поделка.ДобавитьЖелудь(Тип("ПервыйЖелудьСЦикличныйЗависимостью")); + Поделка.ДобавитьЖелудь(Тип("ВторойЖелудьСЦикличныйЗависимостью")); + Поделка.ЗапуститьПриложение(); + + // Когда + Параметры = Новый Массив(); + Параметры.Добавить("ПервыйЖелудьСЦикличныйЗависимостью"); + + // Тогда + Ожидаем.Что(Поделка).Метод("НайтиЖелудь", Параметры).ВыбрасываетИсключение("Циклическое внедрение пластилина"); + +КонецПроцедуры \ No newline at end of file