nataraj: (Default)
[personal profile] nataraj
Любимая мной программа теряет конфиг, если на диске закончилось место.
Полез разбираться...
Проблема по сути в том, что при перезаписи конфига, сим не просекает фишку, что во время записи произошла проблема, стирает старый вариант, а новый, вариант, оказывается неполным. И все... конфига нет.

Читаю код. Из кода узнаю, что в qt у объекта файл есть метод writeBlock который пишет строку в файл, и возвращает кол-во реально записанных байт.

Форматирую небольшой файлик в ext3, монтирую, проверяю на кошечке... Таки да, супер, когда место кончается, writeBlock начинает возвращать 0 когда место заканчивается...

Вставляю оною проверку в сим. (Там они анализировали не статус каждой попытки записать, а статус всего процесса целиком) На выходе имеем хрен: writeBlock уверяет, что все записывается успешно, хотя на разделе нет ни килобайта свободного места. И статус всего рпоцесса записи f.status() -- IO_Ok)

Самое забавное, что с другим конфигом (там их несколько) все проходит нормально. Оно получает статус IO_WriteError и не херит предидущую версию конфига...

В чем разница -- я не понимаю...

Все очень загадочно...

Пойду в форум Лора пожалуюсь, может кто что умное скажет...

UPDATE: Правильный ответ тут: http://shaplov.livejournal.com/302225.html

Date: 2007-07-27 01:08 pm (UTC)
ext_605364: geg MOPO4 (Default)
From: [identity profile] gegmopo4.livejournal.com
Это руки.

Date: 2007-07-27 01:11 pm (UTC)
ext_613079: Default userpic (Default)
From: [identity profile] shaplov.livejournal.com
В каком месте руки? Я всю эту функцию тестовой печатью исписал... Я просто даже не знаю чего еще проверить...

Date: 2007-07-27 01:20 pm (UTC)
ext_605364: geg MOPO4 (Default)
From: [identity profile] gegmopo4.livejournal.com
Может после этого происходит другая запись, уже успешная. Может эта запись таки успешна, и ломается файл позже, в другом месте. Может у QFile какие специальные флаги стояли, кеширование там.

Я-то лично пользуюсь kopete. Очень приятная программа.

Date: 2007-07-27 01:29 pm (UTC)
ext_613079: Default userpic (Default)
From: [identity profile] shaplov.livejournal.com
Может после этого происходит другая запись, уже успешная. Может эта запись таки успешна, и ломается файл позже, в другом месте.
Каждую запись я сопровождаю тестовым выводом. Каждая запись успешная. При этом на разделе ноль свободного места.

Может у QFile какие специальные флаги стояли, кеширование там.
В документации про это ничего не сказано, кроме того в отдельной программе точно так же открытый файл ловит diskfull на ура.

Я-то лично пользуюсь kopete. Очень приятная программа.
Эта информация была особенно полезна, и позволила существенно продвинуться в вопросе изучения функционирования qt вообще и QFile в частности.

Date: 2007-07-27 01:43 pm (UTC)
ext_605364: geg MOPO4 (Default)
From: [identity profile] gegmopo4.livejournal.com
Каждую запись я сопровождаю тестовым выводом. Каждая запись успешная. При этом на разделе ноль свободного места.
Может сам тестовый вывод влияет на диагностику? Может пишется не туда совсем?

Кстати, где стоит тестовый вывод? В самой библиотеке QT, сразу за вызовом writeBlock в процедуре записи конфигурационного файла?

Эта информация была особенно полезна, и позволила существенно продвинуться в вопросе изучения функционирования qt вообще и QFile в частности.
Ну, это я к тому, что лично у меня нет стимула ловить глюки sim-а. А то бы сам покопался в коде.

В итоге скорее всего причина окажется банальной и смешной. Просто глаз замылился.

Profile

nataraj: (Default)
Swami Dhyan Nataraj

July 2024

S M T W T F S
 123456
789 10111213
14151617181920
21222324252627
28293031   

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jan. 20th, 2026 02:30 pm
Powered by Dreamwidth Studios