|
Баг-репорты Описываем проблемы и ошибки работы ядра |
|
Опции темы | Поиск в этой теме | Опции просмотра |
05.05.2010, 14:12 | #1 |
Ученый
Регистрация: 15.03.2010
Сообщений: 261
Сказал(а) спасибо: 84
Поблагодарили 257 раз(а) в 96 сообщениях
|
краш с пулами
Краш появился примерно после перехода на 3.3.2.
Сейчас стоит ревизия 9835. Присутствует и на чистом мангосе. База YTDB 543 Код:
#0 0x0061f410 in __kernel_vsyscall () No symbol table info available. #1 0x004d8df0 in raise () from /lib/libc.so.6 No symbol table info available. #2 0x004da701 in abort () from /lib/libc.so.6 No symbol table info available. #3 0x004d226b in __assert_fail () from /lib/libc.so.6 No symbol table info available. #4 0x08390723 in PoolGroup<Creature>::SpawnObject (this=0x988e0e8, spawns=@0xd3715a4, limit=1, triggerFrom=119807, instantly=false) at ../../../src/game/PoolManager.cpp:279 obj = (PoolObject *) 0xa50c0b0 i = 0 lastDespawned = 0 count = 1 __PRETTY_FUNCTION__ = "void PoolGroup<T>::SpawnObject(SpawnedPoolData&, uint32, uint32, bool) [with T = Creature]" __FUNCTION__ = "SpawnObject" #5 0x0838d201 in PoolManager::SpawnPoolGroup<Creature> (this=0xd371528, pool_id=5676, db_guid=119807, instantly=false) at ../../../src/game/PoolManager.cpp:726 No locals. #6 0x08390b3c in PoolManager::UpdatePool<Creature> (this=0xd371528, pool_id=5676, db_guid_or_pool_id=119807) at ../../../src/game/PoolManager.cpp:787 motherpoolid = <value optimized out> #7 0x081aff15 in Creature::Update (this=0x273f9bd8, diff=129) at ../../../src/game/Creature.cpp:407 poolid = 5676 #8 0x0829b07a in VisitorHelper<MaNGOS::ObjectUpdater, Creature> ( v=@0xaa6ee280, c=@0x251c8384) at ../../../src/game/GridNotifiersImpl.h:48 No locals. #9 0x0829cbd1 in VisitorHelper<MaNGOS::ObjectUpdater, Creature, TypeList<DynamicObject, TypeList<Corpse, TypeNull> > > (v=@0xaa6ee280, c=@0x251c8384) at ../../../src/game/../framework/GameSystem/TypeContainerVisitor.h:57 No locals. #10 0x08296c3d in Map::Update (this=0x14cbb8b8, t_diff=@0xaa6ee2b8) at ../../../src/game/../framework/GameSystem/TypeContainerVisitor.h:80 plr = <value optimized out> area = {right_offset = 1, left_offset = 2, upper_offset = 1, lower_offset = 2} updater = {i_timeDiff = 129} __FUNCTION__ = "Update" __PRETTY_FUNCTION__ = "virtual void Map::Update(const uint32&)" #11 0x082a8a35 in MapManager::Update (this=0x130b8140, diff=32) at ../../../src/game/MapManager.cpp:262 Код:
ASSERT(spawns.IsSpawnedObject<T>(obj->guid)); |
2 пользователя(ей) сказали cпасибо: | LordJZ (05.05.2010) |
05.05.2010, 14:31 | #2 |
Супер-модератор
Регистрация: 07.03.2010
Сообщений: 647
Сказал(а) спасибо: 100
Поблагодарили 252 раз(а) в 123 сообщениях
|
Подтверждаю, падает часто.
|
05.05.2010, 15:10 | #3 |
Гость
Сообщений: n/a
|
Подтверждаю, Очень часто!
|
06.05.2010, 08:50 | #4 |
Гость
Сообщений: n/a
|
собственно поэтому пришлось вообще отрубить пулы
|
06.05.2010, 11:00 | #5 |
Ученый
Регистрация: 15.03.2010
Сообщений: 261
Сказал(а) спасибо: 84
Поблагодарили 257 раз(а) в 96 сообщениях
|
давайте лучше разбираться в том как это работает и из-за чего происходит... вот например переменная db_guid_or_pool_id - почему такое название? Ведь у нас уже есть pool_id.
Что означает triggerFrom? Суть самого ассерта ASSERT(spawns.IsSpawnedObject<T>(obj->guid)); прибивать сервер если не смог заспавнить объект типа <T> (ГО либо кричеры) с текущим гуидом? Тогда должны быть какие-то причины, по которым он не смог этого сделать. В общем то, что пока разобрал: Код:
int count = limit - spawns.GetSpawnedObjects(poolId); Код:
if (triggerFrom) ++count; Код:
i = 0 Код:
PoolObject* obj = RollOne(spawns,triggerFrom); if (!obj) continue; Код:
if (obj->guid == lastDespawned) continue; Код:
if (obj->guid == triggerFrom) Код:
ASSERT(spawns.IsSpawnedObject<T>(obj->guid)); Кстати, пока что краши были только с пулами где max_limit=1. Поэтому у меня идея куда-нибудь воткнуть проверку на limit, дабы не проходить это место Есть ещё идеи? Кто-то хочет поправить мою теорию? Если есть хоть малейшие догадки - пишите. Не давайте мне вести монолог И ещё, создается впечатление что это попросту напутано и должно быть так Код:
if (obj->guid == triggerFrom) { ReSpawn1Object(obj); ASSERT(spawns.IsSpawnedObject<T>(obj->guid)); ASSERT(spawns.GetSpawnedObjects(poolId) > 0); triggerFrom = 0; continue; } Код:
diff --git a/src/game/PoolManager.cpp b/src/game/PoolManager.cpp index d94381d..cef9ab9 100644 --- a/src/game/PoolManager.cpp +++ b/src/game/PoolManager.cpp @@ -276,9 +276,9 @@ void PoolGroup<T>::SpawnObject(SpawnedPoolData& spawns, uint32 limit, uint32 tri if (obj->guid == triggerFrom) { + ReSpawn1Object(obj); ASSERT(spawns.IsSpawnedObject<T>(obj->guid)); ASSERT(spawns.GetSpawnedObjects(poolId) > 0); - ReSpawn1Object(obj); triggerFrom = 0; continue; } Последний раз редактировалось Insider42; 06.05.2010 в 14:26. |
09.05.2010, 10:47 | #6 |
Ученый
Регистрация: 15.03.2010
Сообщений: 261
Сказал(а) спасибо: 84
Поблагодарили 257 раз(а) в 96 сообщениях
|
Всё таки крашнулось, опять с тем же дампом. Интересно!
Он таки прошёл Код:
ReSpawn1Object(obj); Код:
ASSERT(spawns.IsSpawnedObject<T>(obj->guid)); Никто даже представления не имеет в чем может быть проблема? |
09.05.2010, 11:10 | #7 |
Супер-модератор
Регистрация: 07.03.2010
Сообщений: 647
Сказал(а) спасибо: 100
Поблагодарили 252 раз(а) в 123 сообщениях
|
Я думаю об этом знают только авторы системы, насколько я помню, это Neo2003 и кто-то еще из команды UDB, ну и, конечно, Vladimir.
|
09.05.2010, 12:23 | #9 |
Ученый
Регистрация: 15.03.2010
Сообщений: 261
Сказал(а) спасибо: 84
Поблагодарили 257 раз(а) в 96 сообщениях
|
Этот assert был добавлен в 9260 ревизии http://github.com/mangos/mangos/comm...1be4787f58a264 , затем было ещё одно изменение http://github.com/mangos/mangos/comm...e7476682879da8
То, что об этом знают только конкретные люди не значит что мы должны "сложа ручки" сидеть и ждать Возможно от краша поможет частичный откат изменений 9260, а конкретно изменений в этой функции где наш assert. Последний раз редактировалось Insider42; 09.05.2010 в 12:41. |
Пользователь сказал cпасибо: | Lurker (12.05.2010) |
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Краш в Map.h | PSZ | Баг-репорты | 2 | 01.09.2011 12:39 |
Краш на выгрузке | xex | Баг-репорты | 18 | 03.05.2011 11:53 |
Краш в ObjectGridLoader.cpp | Most | Баг-репорты | 0 | 01.12.2010 17:47 |
краш | lovepsone | Баг-репорты | 47 | 09.08.2010 03:25 |
Краш | xmolex | Баг-репорты | 2 | 04.05.2010 18:37 |