Apr. 15th, 2016

metaclass: (Default)
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)
А те, кто пишет в фейсбук про программирование - прокляты будут во веки веков и адские гиены огненные будут лизать их исходный код своими смердящими языками.

Profile

metaclass: (Default)
metaclass

April 2017

S M T W T F S
      1
2345678
9101112 131415
16171819202122
23242526272829
30      

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jun. 6th, 2025 07:45 pm
Powered by Dreamwidth Studios