segfault persistent Haskell
Отписываюсь про вчерашние изыскания моего сегфолта в персистенте.
Сегфолт возникает в функции sqlite3_reset, когда withConnection запускается внутри ResourceT, а не наоборот, как и должно быть. Сегфолт вызывается ошибкой конвертирования данных из PersistValue в целевой тип во время селекта, вернее не самой этой ошибкой, конечно, а происходит при возникновении этой ошибки. При чем, если внутри ResourceT просто вручную сделать error "blabla", то ошибка не вызывает сегфолта.
Сам сегфолт возникает в функции sqlite3_reset (биндинг), скорее всего из-за того, что соединение закрывается раньше, чем финализируется Statement (ведь ResourceT снаружи WithConnection, правда финализация все равно должна происходить в bracketP). Другое предположение: Statement финализируется дважды, один раз, при возникновении ошибки внутри bracketP, второй раз в runResourceT по каким — то мистическим причинам. Только не ясно при чем сдесь тогда withConnection.
Короче до конца еще не разобрался, кому интересно вот
github.com код. В ветке fixedval мой код поверх Сноймановского master.
Есть предложения как отлаживать кроме отладочной печати ?