Summary: | Sylph-claws dumps core when editing displayed headers | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
Product: | Sisyphus | Reporter: | avm <avm> | ||||||||
Component: | claws-mail | Assignee: | Mikhail Efremov <sem> | ||||||||
Status: | CLOSED FIXED | QA Contact: | qa-sisyphus | ||||||||
Severity: | normal | ||||||||||
Priority: | P2 | CC: | at, cas, crux, ender, lav, ldv, mike, qa_viy, sem, shaba, viy | ||||||||
Version: | unstable | ||||||||||
Hardware: | all | ||||||||||
OS: | Linux | ||||||||||
Attachments: |
|
Description
avm
2006-09-26 19:52:28 MSD
Воспроизводится на claws-mail 2.6.1.cvs37-alt1. Воспроизводится на claws-mail-3.0.2cvs57. Апстрим-то знает? неа. я и сам то забыл, честно говоря. хотя собирался починить ещё в стародавние времена. руки дойдут, сделаю. По-прежнему воспроизводится на claws-mail-3.7.1-alt1... Created attachment 3646 [details]
local fix. probably incorrect ?
локально у себя я лично решил эту проблему таким образом. с ходу не соображу насколько это корректно, правда.
хотя, наверное, было бы правильнее в случае нажатия ESC или кнопки cancel вызывать static void prefs_display_header_cancel(void) { gtk_widget_hide(dispheader.window); } а в случае вызова prefs_display_header_deleted, звать static void prefs_display_header_delete(void) { prefs_display_header_read_config(); gtk_widget_hide(dispheader.window); } хмхм. в общем сейчас попробую сделать ещё патч. Created attachment 3647 [details]
патч, похожий на корректный.
Фиксить надо причину, а не следствие и не в этом месте. Я немного посмотрел код. Там проблема в том, что при перетаскивании и возврате на месте поля в список prefs_common.disphdr_list вставляется тот же указатель еще раз. Соответсвенно при повторном вызове display_header_prop_free() на тот же адрес имеем segfault. Нужно не допустить вставки в лист того же самого значения. Точнее там похоже не удаляется указатель из списка при... эээ... начале перетаскивания. Надо поглубже посмотреть код. Может чуть позже дойдут руки, и сделаю патч. (В ответ на комментарий №8) > Может чуть позже дойдут руки, и сделаю патч. Спасибо заранее. Патч обещаю протолкнуть в апстрим. Created attachment 3658 [details]
claws-mail-alt-display-header.patch
Выкинул обработчик сигнала row_changed, вместо этого все действия происходят по сигналу drag_end: один черт row_changed посылается даже если порядок элементов списка не изменился. Проблема возникала как раз в нем: при обходе списка с помощью gtk_tree_model_iter_nth_child() (кстати там можно gtk_tree_model_foreach() использовать, ну да ладно) один и тот же адрес возвращается дважды.
Видимо во время этого сигнала существует некое промежуточное состояние - элемент на новое место уже добавился, а со старого еще не удалился.
Является ли это нормальным поведением или это баг в GTK - без понятия. Во всяком случае на такое поведение апстрим claws'a явно не расчитывал.
Попробовал с патчем, вроде исправилось, пошёл толкать в апстрим: http://www.thewildbeast.co.uk/claws-mail/bugzilla/show_bug.cgi?id=1951 Апстрим принял патч, правда, лавры в ChangeLog'е достались мне %-\ У нас оно тоже скоро будет, как только пройдёт shared task 9163. Ловите 3.7.2-alt1 |