Size: a a a

2021 March 18

D

Dmitriy in pro.cxx
Constantine Drozdov
ЭЭЭ подождите, destroy_node и create_data_node совпадают?
Да
источник

CD

Constantine Drozdov in pro.cxx
но это просто невозможно, перед единственным выходом по return true в pop стоит destroy_node
источник

CD

Constantine Drozdov in pro.cxx
значит, остальные destroy_node вызывал деструктор
источник

D

Dmitriy in pro.cxx
Constantine Drozdov
значит, остальные destroy_node вызывал деструктор
До деструктора очереди дело дойти не могло
Во-первых, у меня отладчик ядра - могу приостановить выполнение всего, во-вторых, для выгрузки и вызова деструктора нужно завершить все IRP, а они утекли... В брейкпойнт, расположенный в деструкторе, не попадает

Но я ошибся в предыдущем сообщении: счетчики в очереди равны выходному кол-ву (0xBF), а не входному (0xC1)
источник

CD

Constantine Drozdov in pro.cxx
Dmitriy
До деструктора очереди дело дойти не могло
Во-первых, у меня отладчик ядра - могу приостановить выполнение всего, во-вторых, для выгрузки и вызова деструктора нужно завершить все IRP, а они утекли... В брейкпойнт, расположенный в деструкторе, не попадает

Но я ошибся в предыдущем сообщении: счетчики в очереди равны выходному кол-ву (0xBF), а не входному (0xC1)
Но это опять же невозможно, любой вызов push вызывает безусловно create_data_node
источник

D

Dmitriy in pro.cxx
Constantine Drozdov
Но это опять же невозможно, любой вызов push вызывает безусловно create_data_node
Кажется, я догадался, и сейчас проверю. Счетчик инкрементится после аллокации - может выброситься исключение
источник

CD

Constantine Drozdov in pro.cxx
Вот так всегда - проверяешь 200 строк сложного кода, а ошибка в вводе/выводе :)
источник

D

Dmitriy in pro.cxx
Constantine Drozdov
Вот так всегда - проверяешь 200 строк сложного кода, а ошибка в вводе/выводе :)
Да!
источник

D

Dmitriy in pro.cxx
Я оказался прав, и ошибка довольно глупая
источник

D

Dmitriy in pro.cxx
Специфика ядра. unique_ptr с кастомным удалителем защищал IRP на случай выброса исключения, но пакет завершался с неким статусом после вызова IoMarkIrpPending() (которую, конечно, приходилось вызывать перед вставкой в очередь), а сама процедура драйвера, как и положено, возвращала STATUS_PENDING
источник

D

Dmitriy in pro.cxx
Любопытно, что Driver Verifier, обычно позволяющий отлавливать подобные случае, молчал как рыба об лед
источник

IZ

Ilia Zviagin in pro.cxx
Dmitriy
Вопрос по lockfree-очереди. Реализовал её по алгоритму Майкла-Скотта + с оглядкой на бустовскую и примеры в интернете.
Как и полагается, спустя месяц пришли к выводу, что время от времени падает именно она.

Как дебажить?
Санитайзеров на платформе нет, имеющиеся средства анализа не вылавливают ошибку, однако удалось создать +- повторяемые условия её проявления.
Класс!
источник

IZ

Ilia Zviagin in pro.cxx
Dmitriy
Вопрос по lockfree-очереди. Реализовал её по алгоритму Майкла-Скотта + с оглядкой на бустовскую и примеры в интернете.
Как и полагается, спустя месяц пришли к выводу, что время от времени падает именно она.

Как дебажить?
Санитайзеров на платформе нет, имеющиеся средства анализа не вылавливают ошибку, однако удалось создать +- повторяемые условия её проявления.
Один вопрос: зачем вам lock free queue?
источник

D

Dmitriy in pro.cxx
Ilia Zviagin
Один вопрос: зачем вам lock free queue?
Честно?
Больше развлечения ради))
Бутылочным горлышком в том коде очередь не была
источник

IZ

Ilia Zviagin in pro.cxx
Dmitriy
Честно?
Больше развлечения ради))
Бутылочным горлышком в том коде очередь не была
Спасибо за честный ответ!
Но зато у вас теперь жизнь такая интересная!
источник

D

Dmitriy in pro.cxx
Ilia Zviagin
Спасибо за честный ответ!
Но зато у вас теперь жизнь такая интересная!
Забавнее то, что сама очередь оказалась вообще не при делах - косяк по невнимательности в другом месте
источник

D

Dmitriy in pro.cxx
Классика жанра :)
источник

AS

Anatoly Shirokov in pro.cxx
зато у запорожца эмблема от теслы :)
источник

D

Dmitriy in pro.cxx
Единственное, мне пока совершенно непонятно, как при наличии мьютекса резко снижалась вероятность фейла аллокации памяти
источник

DF

Dollar Føølish in pro.cxx
Dmitriy
Единственное, мне пока совершенно непонятно, как при наличии мьютекса резко снижалась вероятность фейла аллокации памяти
Мутекс мог триггернуть resched
источник