То ли я тупой, то ли гвозди
Apr. 15th, 2016 01:08 pmhttps://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. Возможно, где-то есть горутина, делающая вид, что работает.
Вопрос: если в строке 1110 все навернется - лок ведь останется?
Они считают что должен вернуться err и эта строка упасть не может, но я тут внезапно наткнулся на nil dereferencing в этой строке и программа тупо виснет в дедлоке.
PS: Я нашел откуда nil dereferencing - подключение к БД было передано из одного класса во второй по значению, а не по ссылке и соответственно, получилось две частичных копии состояния подключения, которые в процессе работы разсинхронизировались (после rows.Close() во второй копии накрылась медным тазом первая).
По моему, возможность добиться такого бага извне (!) либы, тупо ее используя - это полный беспредел, уровня рандомных сегфолтов в сишечьке.
PPS: Сделал тестовую прогу с похожим паттерном: https://gist.github.com/metametaclass/a3442966bd02094430496c7e7266d20e
Все вроде падает корректно: fatal error: all goroutines are asleep - deadlock!
Надо вникать, где оно виснет при работе с postgresql. Возможно, где-то есть горутина, делающая вид, что работает.