Ru-MaNGOS

Вернуться   Ru-MaNGOS > Ядро > Патчи > Отвергнутые патчи

Важная информация

Отвергнутые патчи Патчи, отвергнутые от приёма в GIT

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
Старый 31.05.2010, 09:34   #1
Insider42
Ученый
 
Регистрация: 15.03.2010
Сообщений: 261
Сказал(а) спасибо: 84
Поблагодарили 257 раз(а) в 96 сообщениях
Insider42 Как самоцвет среди гранитаInsider42 Как самоцвет среди гранитаInsider42 Как самоцвет среди гранита
По умолчанию [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
Поднял аптайм моего сервера с максимального 5ч до 20ч (в данный момент)
Insider42 вне форума   Ответить с цитированием
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
xex
Пользователь
 
Регистрация: 08.03.2010
Сообщений: 47
Сказал(а) спасибо: 45
Поблагодарили 29 раз(а) в 13 сообщениях
xex На верном пути
По умолчанию

У меня наоборот
Без этого патча работал по 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.
xex вне форума   Ответить с цитированием
Старый 02.06.2010, 07:14   #3
Vladimir
MaNGOS Dev
 
Регистрация: 09.02.2010
Сообщений: 594
Сказал(а) спасибо: 315
Поблагодарили 438 раз(а) в 181 сообщениях
Vladimir Как свет с небесVladimir Как свет с небесVladimir Как свет с небесVladimir Как свет с небесVladimir Как свет с небесVladimir Как свет с небес
По умолчанию

Я пере-просмотрел код и не вижу ничего корректного в патче.

Мы вибираем наборы ячеек вокруг конкретной в которой стоит игрок.
+- на определенное колличество.

Операторы << -= >> += определены так что всегда возвращают номер ячейки не выходящей за пределы (0..LIMIT-1)

Соответствеено цикл _должен_ включать правый пограничный номер.
Т.е. _должен_ быть в ввиде y <= end_cell.y_coord

Иначем у вас нарушается симметрия области.

Проблема может быть только если
CellArea area = Cell::CalculateCellArea(*plr, GetVisibilityDistance());

вычисляет размеры области некоректно
__________________
Так как устал объяснять знайте ICQ не пользуюсь

Последний раз редактировалось Vladimir; 02.06.2010 в 07:16.
Vladimir вне форума   Ответить с цитированием
2 пользователя(ей) сказали cпасибо:
Insider42 (02.06.2010), SilverIce (02.06.2010)
Старый 02.06.2010, 07:55   #4
SilverIce
MaNGOS Dev
 
Регистрация: 14.03.2010
Сообщений: 38
Сказал(а) спасибо: 23
Поблагодарили 49 раз(а) в 16 сообщениях
SilverIce Скоро придёт к известности
По умолчанию

спасибо за рекламу, но это не совсем мой патч..
у меня end_cell получена таким путем, что по ней обращаться к гриду нельзя - иначе краш
а ResizeBorders всегда возвращает существущую ячейку

хотя может то что мы перестаем обновлять краевые ячейки и это как то и влияет на уменьшения крашей с unload grid, но не прямо..

Последний раз редактировалось SilverIce; 02.06.2010 в 08:02.
SilverIce вне форума   Ответить с цитированием
2 пользователя(ей) сказали cпасибо:
Insider42 (02.06.2010), Vladimir (02.06.2010)
Старый 02.06.2010, 09:36   #5
Insider42
Ученый
 
Регистрация: 15.03.2010
Сообщений: 261
Сказал(а) спасибо: 84
Поблагодарили 257 раз(а) в 96 сообщениях
Insider42 Как самоцвет среди гранитаInsider42 Как самоцвет среди гранитаInsider42 Как самоцвет среди гранита
По умолчанию

Цитата:
Сообщение от Vladimir Посмотреть сообщение
Проблема может быть только если
CellArea area = Cell::CalculateCellArea(*plr, GetVisibilityDistance());

вычисляет размеры области некоректно
Есть способ как-то проверить и по возможности предотвратить это?

Цитата:
Сообщение от SilverIce Посмотреть сообщение
хотя может то что мы перестаем обновлять краевые ячейки и это как то и влияет на уменьшения крашей с unload grid, но не прямо..
С момента использования патча действительно небыло ниодного краша на гридах. Уже 4й день использую... До этого раз в 5-6 часов долбали

Последний раз редактировалось Insider42; 02.06.2010 в 10:14.
Insider42 вне форума   Ответить с цитированием
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Краш в 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


Текущее время: 21:46. Часовой пояс GMT +3.


ru-mangos.ru - Русское сообщество MaNGOS
Главная цель проекта MaNGOS - обучающая, поэтому разрешается использовать исходный код и собранную программу только для образовательных целей.
Вы не можете использовать MaNGOS в коммерческих целях, а также не разрешается устанавливать публичные серверы на базе MaNGOS.
Любое копирование материалов, информации в любом виде без указания источника - форума Ru-MaNGOS будет считаться нарушением авторских прав и нарушением Уголовного Кодекса РФ, ст. 146 ст. 147.
Перевод vBulletin: zCarot