03-31-2013, 04:20 AM
What? how?
|
Random Chitchat 2012-2016
|
|
03-31-2013, 04:20 AM
What? how?
well i was strip-mining in survival and when i came up i saw all the pickups at the surface.
03-31-2013, 04:47 AM
Ah, finally a description that makes sense. I suppose that would be because I fiddled with the cTracer code - it had been throwing asserts at me.
I think for now the best thing to do is put it in the bug tracker, I'm working on other things right now so can't fix bugs.
03-31-2013, 04:52 AM
added to the bug tracker: http://www.mc-server.org/support/index.p...&sort=desc
04-01-2013, 12:50 AM
i found a bug in the OnPlayerPlacingBlock/OnPlayerPlacedBlock hook. it doesn't get fired if you place: a water bucket, a lava bucket or flint & steel.
04-01-2013, 02:27 AM
Because that's not exactly placement, it's item use. So you need to use the OnPlayerUsingItem / OnPlayerUsedItem hooks.
04-01-2013, 08:27 PM
Just found a deadlock. Maybe that's the cause of all those reports of server not responding after a while.
Thread 1 callstack: Code: MCServer_debug.exe!cCSLock::cCSLock(cCriticalSection & a_CS={...}) Line 127 C++
MCServer_debug.exe!cChunkMap::GetBlock(int a_BlockX=0x0000000f, int a_BlockY=0x00000007, int a_BlockZ=0x0000000f) Line 955 + 0xc bytes C++
MCServer_debug.exe!cWorld::GetBlock(int a_X=0x0000005f, int a_Y=0x00000007, int a_Z=0xffffffcf) Line 1095 C++
MCServer_debug.exe!cPickup::HandlePhysics(float a_Dt=0.10000000) Line 113 + 0x21 bytes C++
MCServer_debug.exe!cEntity::Tick(float a_Dt=100.00000, MTRand & a_TickRandom={...}) Line 257 + 0x16 bytes C++
MCServer_debug.exe!cPickup::Tick(float a_Dt=100.00000, MTRand & a_TickRandom={...}) Line 66 C++
MCServer_debug.exe!cWorld::Tick(float a_Dt=100.00000) Line 494 + 0x33 bytes C++
MCServer_debug.exe!cRoot::TickWorlds(float a_Dt=100.00000) Line 354 + 0x17 bytes C++Thread 2 callstack: Code: MCServer_debug.exe!cCSLock::cCSLock(cCriticalSection & a_CS={...}) Line 127 C++
MCServer_debug.exe!cWorld::AddEntity(cEntity * a_Entity=0x20aa2680) Line 2092 + 0x11 bytes C++
MCServer_debug.exe!cEntity::Initialize(cWorld * a_World=0x02860040) Line 122 C++
MCServer_debug.exe!cPickup::Initialize(cWorld * a_World=0x02860040) Line 46 C++
MCServer_debug.exe!cChunk::SetAllData(const unsigned char * a_BlockTypes=0x0318fdb4, const unsigned char * a_BlockMeta=0x03187dac, const unsigned char * a_BlockLight=0x00000000, const unsigned char * a_BlockSkyLight=0x00000000, ...) Line 302 + 0x26 bytes C++
MCServer_debug.exe!cChunkMap::SetChunkData(int a_ChunkX=0xfffffff6, int a_ChunkY=0x00000000, int a_ChunkZ=0xfffffff7, ...) Line 758 C++
MCServer_debug.exe!cWorld::SetChunkData(int a_ChunkX=0xfffffff6, int a_ChunkY=0x00000000, int a_ChunkZ=0xfffffff7, ...) Line 1611 C++
MCServer_debug.exe!cWSSAnvil::LoadChunkFromNBT(const cChunkCoords & a_Chunk={...}, const cParsedNBT & a_NBT={...}) Line 371 C++
MCServer_debug.exe!cWSSAnvil::LoadChunkFromData(const cChunkCoords & a_Chunk={...}, ...) Line 243 + 0x13 bytes C++
MCServer_debug.exe!cWSSAnvil::LoadChunk(const cChunkCoords & a_Chunk={...}) Line 104 + 0x10 bytes C++
MCServer_debug.exe!cWorldStorage::LoadChunk(int a_ChunkX=0xfffffff6, int a_ChunkY=0x00000000, int a_ChunkZ=0xfffffff7) Line 382 + 0x21 bytes C++Thread 1 has the cWorld::m_CSEntities critical section locked and is requesting cWorld::m_ChunkMap::m_CS (via cWorld::GetBlock()) Thread 2 has the cWorld::m_ChunkMap::m_CS critical section locked and is requesting cWorld::m_CSEntities (via cWorld::AddEntity())
04-01-2013, 10:55 PM
Is that committed now?
04-01-2013, 11:24 PM
No, I haven't fixed that deadlock yet. I have thought about a hotfix which would probably work, but I'd prefer a more systematic solution, so I'll keep it in my head for a bit longer.
04-02-2013, 06:20 AM
Hotfix didn't work (as expected), so I'm implementing a proper fix. It's proving to be rather big, however. It requires me to rewrite how entities are handled by MCServer.
Right now the cWorld object has a list of all entities and each chunk has a copy of that list that contains that chunk's entities. I need to get rid of cWorld's global list and make the chunks' lists the one and only true list of entities. Ouch! |
|
« Next Oldest | Next Newest »
|