Информация об изменениях

Сообщение Re[4]: Минутка WTF-15: never mind от 18.01.2017 7:49

Изменено 19.01.2017 11:51 Sinix

Re[4]: Минутка WTF-15: never mind
Здравствуйте, vasmann, Вы писали:

V>Ну если уж совсем быть точным, то зависит от настройки сборки, если вместе /checked собрана, то не вечно — упадет с OverflowException-ом.

V>Я закончил


Ок, добиваем.

Во-первых, коварность этой ошибки в том, что она не воспроизводится ни на отладочных сборках, ни в релизных с подключённым отладчиком (пока в настройках не снята галочка "Suppress JIT optimization on module load"), ни в отдельных environments (пруф с mono).

Мораль: интеграционные тесты таки стоит запускать и в отладочной, и в релизной версиях. И на тех рантаймах, где код будет работать.


Во-вторых, ссылки.
Собственно вопрос.
Короткое объяснение матчасти (и таки да, явный Thread.MemoryBarrier(); внутри while работает. Внезапно.)
Оно же, но подробнее

Ну и наконец, разбор собственно вопроса и ответ от roslyn team.
Re[4]: Минутка WTF-15: never mind
Здравствуйте, vasmann, Вы писали:

V>Ну если уж совсем быть точным, то зависит от настройки сборки, если вместе /checked собрана, то не вечно — упадет с OverflowException-ом.

V>Я закончил


Ок, добиваем.

Во-первых, коварность этой ошибки в том, что она не воспроизводится ни на отладочных сборках, ни в релизных с подключённым отладчиком (пока в настройках не снята галочка "Suppress JIT optimization on module load"), ни в отдельных environments (пруф с mono).

UPD, с подачи ув. Sharov: всё ещё забавней. Конкретно этот код отрабатывает нормально с x86 JIT. А вот вариант с SO — нет.

Мораль: интеграционные тесты таки стоит запускать и в отладочной, и в релизной версиях. И на тех рантаймах, где код будет работать.


Во-вторых, ссылки.
Собственно вопрос.
Короткое объяснение матчасти (и таки да, явный Thread.MemoryBarrier(); внутри while работает. Внезапно.)
Оно же, но подробнее

Ну и наконец, разбор собственно вопроса и ответ от roslyn team.