MantisBT - VCMI
View Issue Details
0000995VCMIOtherpublic2012-06-07 17:352012-06-11 09:56
Risto 
Ivan 
highcrashsometimes
closedduplicate 
LinuxLubuntu12.04
0.89 
 
0000995: The names of the sprites and data files in any given case.
The names of the sprites and data files in any given case, which leads to systematic errors when searching for files on Unix-systems and, consequently, the failure game. Required to bring all the file names to lower case, or (preferably) to organize a case-insensitive search, and returns an error, while in the directory two or more of the same name files.
No tags attached.
duplicate of 0000994closed Tow Failed to rewrite autosave. 
? PortraitsLarge.json (7,246) 2012-06-09 17:43
https://bugs.vcmi.eu/file_download.php?file_id=957&type=bug
? PortraitsSmall.json (7,246) 2012-06-09 17:43
https://bugs.vcmi.eu/file_download.php?file_id=958&type=bug
Issue History
2012-06-07 17:35RistoNew Issue
2012-06-07 17:50IvanNote Added: 0002620
2012-06-07 17:53RistoNote Added: 0002621
2012-06-07 18:02RistoNote Added: 0002622
2012-06-07 18:36RistoNote Edited: 0002621bug_revision_view_page.php?bugnote_id=2621#r1689
2012-06-07 18:37RistoNote Edited: 0002621bug_revision_view_page.php?bugnote_id=2621#r1690
2012-06-07 18:37RistoNote Deleted: 0002622
2012-06-07 19:01IvanNote Added: 0002623
2012-06-07 19:25RistoNote Added: 0002624
2012-06-07 19:26RistoNote Edited: 0002624bug_revision_view_page.php?bugnote_id=2624#r1692
2012-06-07 19:43RistoNote Added: 0002625
2012-06-07 20:19RistoNote Deleted: 0002625
2012-06-07 20:29RistoNote Added: 0002626
2012-06-07 20:31RistoNote Edited: 0002626bug_revision_view_page.php?bugnote_id=2626#r1694
2012-06-07 21:31IvanNote Added: 0002628
2012-06-07 22:32RistoNote Added: 0002629
2012-06-07 22:55RistoNote Edited: 0002629bug_revision_view_page.php?bugnote_id=2629#r1696
2012-06-08 20:16RistoNote Edited: 0002629bug_revision_view_page.php?bugnote_id=2629#r1705
2012-06-09 10:05IvanNote Added: 0002638
2012-06-09 11:39RistoNote Added: 0002639
2012-06-09 17:36IvanNote Added: 0002641
2012-06-09 17:43RistoFile Added: PortraitsLarge.json
2012-06-09 17:43RistoFile Added: PortraitsSmall.json
2012-06-09 19:57RistoNote Added: 0002644
2012-06-09 20:43RistoNote Added: 0002645
2012-06-11 09:56IvanRelationship addedduplicate of 0000994
2012-06-11 09:56IvanNote Added: 0002653
2012-06-11 09:56IvanStatusnew => closed
2012-06-11 09:56IvanAssigned To => Ivan
2012-06-11 09:56IvanResolutionopen => duplicate

Notes
(0002620)
Ivan   
2012-06-07 17:50   
Files in Data/ and Sprites/ directories are case-insensitive so sprites\data files should be OK.

Can you name files that causing this problem?

I'm on Linux and don't have any case-sensitivity issues with VCMI.
(0002621)
Risto   
2012-06-07 17:53   
(edited on: 2012-06-07 18:37)
Example:

Error in file reading: /usr/local/share/vcmi/Data/ZVS/LIB1.RES/E_SPBLIND
XIO: fatal IO error 0 (Success) on X server ":0.0"
      after 1410 requests (1410 known processed) with 0 events remaining.
Killing console... zsh: segmentation fault vcmiclient
vcmiserver: /usr/include/boost/thread/pthread/condition_variable_fwd.hpp:46: boost::condition_variable::~condition_variable(): Assertion `!pthread_mutex_destroy(&internal_mutex)' failed.
Aborted

There is a file /usr/local/share/vcmi/Data/zvs/Lib1.res/E_SPBLIND.bmp As you can see, the wrong case and dropped the file extension.

Error in file reading: /usr/local/share/vcmi/Sprites/PORTRAITSSMALL
zsh: segmentation fault vcmiclient

There is a file /usr/local/share/vcmi/Sprites/PortraitsSmall.json

File CreWin1.pcx requested by the client, as CreWin1.pcx and CREWIN1.PCX. The regularity of this bug to track failed.

Аналогичная проблема и с прочими файлами данных, к примеру, -- с mp3. Переименование проблемных файлов, конечно, решает вопрос, но, во-первых, ВСЕ файлы прописаны в совершенно произвольном регистре, иногда без расширения, а во-вторых, как я написал выше, клиент иногда ищет один и тот же файл в разном регистре. Так что проблему надо решать кардинально.

(0002623)
Ivan   
2012-06-07 19:01   
С mp3 это вполне возможно. Там файлы должны быть в определенном регистре.

Со всем, что в папках Data и Sprites проблем быть не должно. При запуске клиент запоминает имена всех файлов в папке и их реестр/расширение.

"Error in file reading" может возникнуть:
1) после запуска клиента этот файл переименовали или переместили
2) файл недоступен для чтения (стоит проверить права доступа)

Если файл не найден, то ошибка выдается другая ("Failed to find file"). Тут файл при запуске нашелся, но прочитать из него ничего не вышло.
(0002624)
Risto   
2012-06-07 19:25   
(edited on: 2012-06-07 19:26)
Проблема в том, что после переименования файла, связанный с ним баг исчезает. Проверено на PortraitsSmall.json и PortraitsLarge.json (имена файлов переведены в верхний регистр, расширение отброшено). Если мне скажут, где в сырцах искать кусок, отвечающий за запоминание -- могу посмотреть, возможно пойму, от чего глюк.

Справедливости ради стоит отметить, что первая ошибка (которая XIO: fatal IO error) всплывает и в официальной Linux-версии Героев, от Lokigames (только имя файла другое).

(0002626)
Risto   
2012-06-07 20:29   
(edited on: 2012-06-07 20:31)
Только что воспроизвёл баг. Вылезает в момент окончания боя. Для чистоты эксперимента все три раза нападал на один и тот же отряд. Клиент запускал под рутом, чтобы исключить любые проблемы с правами.

Первая попытка:
Error in file reading: /usr/local/share/vcmi/Sprites/PORTRAITSLARGE
Connection has been requested to be closed.
Sent closing signal to the server

Вторая попытка:
Error in file reading: /usr/local/share/vcmi/Sprites/PORTRAITSLARGE
XIO: fatal IO error 11 (Resource temporarily unavailable) on X server ":0.0"
      after 195 requests (195 known processed) with 1 events remaining.
Killing console... [xcb] Unknown sequence number while processing queue
[xcb] Most likely this is a multi-threaded client and XInitThreads has not been called
[xcb] Aborting, sorry about that.
vcmiclient: ../../src/xcb_io.c:273: poll_for_event: Assertion `!xcb_xlib_threads_sequence_lost' failed.

Третья попытка:
sudo mv /usr/local/share/vcmi/Sprites/PortraitsLarge.json /usr/local/share/vcmi/Sprites/PORTRAITSLARGE #Переименовываю файл

LoadFrame error: Request for frame not present in CAnimation!
    File name: PORTRAITSLARGE Group: 0 Frame: 12
GetImage error: Request for frame not present in CAnimation!
    File name: PORTRAITSLARGE Group: 0 Frame: 12
Warning: Cannot open /usr/local/share/vcmi/Mp3/Win Battle.mp3: Couldn't read from '/usr/local/share/vcmi/Mp3/Win Battle.mp3'
Unable to play music (music parameter was NULL)
GetImage error: Request for frame not present in CAnimation!
    File name: PORTRAITSLARGE Group: 0 Frame: 12
CStupidAI [0xa98b6528]: battleEnd called
Warning: an orphaned child!
battleGetStacks called when there is no battle!
GetImage error: Request for frame not present in CAnimation!
    File name: PORTRAITSLARGE Group: 0 Frame: 12
Warning: Cannot open /usr/local/share/vcmi/Mp3/ROUGH.MP3: Couldn't read from '/usr/local/share/vcmi/Mp3/ROUGH.MP3'

Бой завершился.

(0002628)
Ivan   
2012-06-07 21:31   
Где глянуть? Большая часть тут - lib/CLodHandler.*
Затем например картинки загружаются через client/CBitmapHandler.*

Удалять расширения - плохая идея. Они используются чтобы определить тип файла (музыка, картинка, анимация, текст...). В итоге получаем структурку вида { string fileID, int filetype, string realFilename}
Сделано для того, что бы избежать конфликтов. Например в ресурсах игры есть garrison.txt и garrison.pcx, а последний еще можно загрузить как garrison.bmp


Warning: Cannot open /usr/local/share/vcmi/Mp3/ROUGH.MP3: Couldn't read from '/usr/local/share/vcmi/Mp3/ROUGH.MP3'

А вот это уже интересно. У меня этот файл с таким же расширением, таким же регистром и вполне работает (Ubuntu 12.04 x64). Да и "Couldn't read" больше на ошибку чтения чем проблема с путями смахивает.
(0002629)
Risto   
2012-06-07 22:32   
(edited on: 2012-06-08 20:16)
sudo mv /usr/local/share/vcmi/Sprites/PortraitsLarge.json /usr/local/share/vcmi/Sprites/PORTRAITSLARGE.json # Переименовываю с сохранением расширения.

Error in file reading: /usr/local/share/vcmi/Sprites/PORTRAITSLARGE
zsh: segmentation fault vcmiclient # Фиг вам, всё равно падает.

ls -l /usr/local/share/vcmi/Sprites/PORTRAITSLARGE.json
-rw-rw-r-- 1 risto risto 7246 июля 31 2011 /usr/local/share/vcmi/Sprites/PORTRAITSLARGE.json # Файл доступен для чтения всем. К тому же, под рутом баг повторился.

Так что баг фиксится исключительно таким переименованием: sudo mv /usr/local/share/vcmi/Sprites/PortraitsLarge.json /usr/local/share/vcmi/Sprites/PORTRAITSLARGE # Третья попытка, ага. Тогда всё работает.

ls -l /usr/local/share/vcmi/Mp3/ROUGH.MP3
-rw-r--r-- 1 root root 2159643 июня 7 10:29 /usr/local/share/vcmi/Mp3/ROUGH.MP3 # Существует именно под таким названием, доступен для чтения всем. Под рутом баг повторяется. Аналогичный баг при перезаписи автосейва, в начале хода игрока (см. 0000994).

(0002638)
Ivan   
2012-06-09 10:05   
>> /usr/local/share/vcmi/Mp3/ROUGH.MP3 # Существует именно под таким названием, доступен для чтения всем. Под рутом баг повторяется.

Вот поэтому мне кажется что ошибка где-то в системе - файл найден но при открытии или чтении система выдает ошибку.

У меня этот размер этого файла 2,2 МБ (2.159.643 байта) - может немного отличатся
Стоит попробовать открыть его через плеер (Mp3, длительность - 2:14)
(0002639)
Risto   
2012-06-09 11:39   
Блин! С Mp3 действительно сам накосячил: Там пустые файлы. ctorrent их создал, но не загрузил, так как закачка была выборочной. Но со спрайтами и файлами данных картина бага другая.
(0002641)
Ivan   
2012-06-09 17:36   
точно? Например portraitsLarge должен выглядеть так: https://vcmi.svn.sourceforge.net/svnroot/vcmi/trunk/Sprites/PortraitsLarge.json [^]
(0002644)
Risto   
2012-06-09 19:57   
Так и выглядит, поскольку взят с svn. Смотри аттачи.
(0002645)
Risto   
2012-06-09 20:43   
После удаления шести с половиной тысяч карт баг пропал (по крайней мере, перестал воспроизводиться в обычных местах). Проблемы с кешированием?
(0002653)
Ivan   
2012-06-11 09:56   
Похоже наткнулись на лимит открытых файлов. Должно быть исправлено в ревизии 2746.
Закрываю как дубликат.

Closed as dublicate.