2016-04-15

metaclass: (Default)
2016-04-15 01:08 pm

То ли я тупой, то ли гвозди

https://golang.org/src/database/sql/sql.go#L1108

Вопрос: если в строке 1110 все навернется - лок ведь останется?
Они считают что должен вернуться err и эта строка упасть не может, но я тут внезапно наткнулся на nil dereferencing в этой строке и программа тупо виснет в дедлоке.

PS: Я нашел откуда nil dereferencing - подключение к БД было передано из одного класса во второй по значению, а не по ссылке и соответственно, получилось две частичных копии состояния подключения, которые в процессе работы разсинхронизировались (после rows.Close() во второй копии накрылась медным тазом первая).
По моему, возможность добиться такого бага извне (!) либы, тупо ее используя - это полный беспредел, уровня рандомных сегфолтов в сишечьке.

PPS: Сделал тестовую прогу с похожим паттерном: https://gist.github.com/metametaclass/a3442966bd02094430496c7e7266d20e
Все вроде падает корректно: fatal error: all goroutines are asleep - deadlock!
Надо вникать, где оно виснет при работе с postgresql. Возможно, где-то есть горутина, делающая вид, что работает.
metaclass: (Default)
2016-04-15 02:12 pm

ἀνάθεμα ἀνάθεμα ἀνάθεμα

А те, кто пишет в фейсбук про программирование - прокляты будут во веки веков и адские гиены огненные будут лизать их исходный код своими смердящими языками.