|
Отвергнутые патчи Патчи, отвергнутые от приёма в GIT |
|
Опции темы | Поиск в этой теме | Опции просмотра |
31.05.2010, 09:34 | #1 |
Ученый
Регистрация: 15.03.2010
Сообщений: 261
Сказал(а) спасибо: 84
Поблагодарили 257 раз(а) в 96 сообщениях
|
[patch] краш на UnloadGrid
Устраняет несколько видов крашей связанных с выгрузкой гридов, вот один из них http://paste2.org/p/856730
Взят отсюда http://github.com/SilverIce/mangos/c...9086ede3e28f9a Автор: SilverIce Код:
diff --git a/src/game/Map.cpp b/src/game/Map.cpp index fc7dab7..be07b5e 100644 --- a/src/game/Map.cpp +++ b/src/game/Map.cpp @@ -624,9 +624,9 @@ void Map::Update(const uint32 &t_diff) CellArea area = Cell::CalculateCellArea(*plr, GetVisibilityDistance()); area.ResizeBorders(begin_cell, end_cell); - for(uint32 x = begin_cell.x_coord; x <= end_cell.x_coord; ++x) + for(uint32 x = begin_cell.x_coord; x < end_cell.x_coord; ++x) { - for(uint32 y = begin_cell.y_coord; y <= end_cell.y_coord; ++y) + for(uint32 y = begin_cell.y_coord; y < end_cell.y_coord; ++y) { // marked cells are those that have been visited // don't visit the same cell twice @@ -672,9 +672,9 @@ void Map::Update(const uint32 &t_diff) begin_cell << 1; begin_cell -= 1; // upper left end_cell >> 1; end_cell += 1; // lower right - for(uint32 x = begin_cell.x_coord; x <= end_cell.x_coord; ++x) + for(uint32 x = begin_cell.x_coord; x < end_cell.x_coord; ++x) { - for(uint32 y = begin_cell.y_coord; y <= end_cell.y_coord; ++y) + for(uint32 y = begin_cell.y_coord; y < end_cell.y_coord; ++y) { // marked cells are those that have been visited // don't visit the same cell twice |
6 пользователя(ей) сказали cпасибо: | Feel the Power (31.05.2010), PSZ (01.06.2010), SilverIce (02.06.2010), sven (01.06.2010), xex (31.05.2010) |
01.06.2010, 17:05 | #2 |
Пользователь
Регистрация: 08.03.2010
Сообщений: 47
Сказал(а) спасибо: 45
Поблагодарили 29 раз(а) в 13 сообщениях
|
У меня наоборот
Без этого патча работал по 2-е суток со средним онлайном около 180. Сегодня уже три раза крашнулся: Код:
004DE7F4 00000000 MapInstanced::RemoveGridMapReference+D4 004DE5F1 00000000 Map::UnloadGrid+311 004DE917 00000000 Map::UnloadAll+87 004D95B5 00000000 Map::~Map+65 004E1B52 00000000 InstanceMap::~InstanceMap+92 004FBBD0 00000000 InstanceMap::`vector deleting destructor'+50 008C07B0 00000000 MapInstanced::DestroyInstance+B0 008BF802 00000000 MapInstanced::Update+C2 006E6160 00000000 MapManager::Update+120 00641375 00000000 World::Update+805 0045663E 00000000 WorldRunnable::run+8E Добавлю: Проблема то ясна - попытка доступа по указателю указывающему в "небо". Почему-то в коде не используется общепринятая практика зануляющая указатели при чистке. Тогда такой проблемы в принципе бы быть не могло... Последний раз редактировалось xex; 01.06.2010 в 17:28. |
02.06.2010, 07:14 | #3 |
MaNGOS Dev
Регистрация: 09.02.2010
Сообщений: 594
Сказал(а) спасибо: 315
Поблагодарили 438 раз(а) в 181 сообщениях
|
Я пере-просмотрел код и не вижу ничего корректного в патче.
Мы вибираем наборы ячеек вокруг конкретной в которой стоит игрок. +- на определенное колличество. Операторы << -= >> += определены так что всегда возвращают номер ячейки не выходящей за пределы (0..LIMIT-1) Соответствеено цикл _должен_ включать правый пограничный номер. Т.е. _должен_ быть в ввиде y <= end_cell.y_coord Иначем у вас нарушается симметрия области. Проблема может быть только если CellArea area = Cell::CalculateCellArea(*plr, GetVisibilityDistance()); вычисляет размеры области некоректно
__________________
Так как устал объяснять знайте ICQ не пользуюсь Последний раз редактировалось Vladimir; 02.06.2010 в 07:16. |
02.06.2010, 07:55 | #4 |
MaNGOS Dev
Регистрация: 14.03.2010
Сообщений: 38
Сказал(а) спасибо: 23
Поблагодарили 49 раз(а) в 16 сообщениях
|
спасибо за рекламу, но это не совсем мой патч..
у меня end_cell получена таким путем, что по ней обращаться к гриду нельзя - иначе краш а ResizeBorders всегда возвращает существущую ячейку хотя может то что мы перестаем обновлять краевые ячейки и это как то и влияет на уменьшения крашей с unload grid, но не прямо.. Последний раз редактировалось SilverIce; 02.06.2010 в 08:02. |
02.06.2010, 09:36 | #5 | |
Ученый
Регистрация: 15.03.2010
Сообщений: 261
Сказал(а) спасибо: 84
Поблагодарили 257 раз(а) в 96 сообщениях
|
Цитата:
С момента использования патча действительно небыло ниодного краша на гридах. Уже 4й день использую... До этого раз в 5-6 часов долбали Последний раз редактировалось Insider42; 02.06.2010 в 10:14. |
|
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Краш в Map.h | PSZ | Баг-репорты | 2 | 01.09.2011 12:39 |
Краш на выгрузке | xex | Баг-репорты | 18 | 03.05.2011 11:53 |
краш | lovepsone | Баг-репорты | 47 | 09.08.2010 03:25 |
Краш при создании ДК | 1099511627776 | Корзина | 1 | 06.07.2010 16:34 |
Краш | xmolex | Баг-репорты | 2 | 04.05.2010 18:37 |