metaclass (metaclass) wrote,
metaclass
metaclass

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

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. Возможно, где-то есть горутина, делающая вид, что работает.
Subscribe
  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

  • 16 comments