Hi, for a certain time I've been having access violation errors that seemed to be caused by some kind of race condition with a custom entity, based on the hl2 buggy code. I presumed it was a race condition induced error, since it was intermittent and happened during the spawn/precache phase when loading a map with the entity on it, and because the vehicle is 3 separate entities (server vehicle, driveable vehicle, and physics ) . The call stack indicates the access violation occurs in tier0, and the last method of the server in the stack is the new operator for the KeyValues class.
tier0.dll!00234a10() > [Frames below may be incorrect and/or missing, no symbols loaded for > tier0.dll] > tier0.dll!00234bac() > tier0.dll!00234caf() > tier0.dll!00234f3a() > > server.dll!KeyValues::operator new(unsigned int iAllocSize=32, int > nBlockUse=1, const char * pFileName=0x163012c0, int nLine=329) Line 2350 > C++ > server.dll!CBaseProp::ParsePropData() Line 329 + 0x17 bytes C++ > server.dll!CBaseProp::Spawn() Line 193 + 0x8 bytes C++ > server.dll!CPropSFRVehicle::Spawn() Line 93 C++ > server.dll!CFighterVehicleDriveable::Spawn() Line 167 C++ > server.dll!CArwing::Spawn() Line 146 C++ > server.dll!DispatchSpawn(CBaseEntity * pEntity=0x0c46e800) Line > 1881 C++ > server.dll!SpawnAllEntities(int nEntities=3, HierarchicalSpawn_t * > pSpawnList=0x16d5da48, bool bActivateEntities=false) Line 270 + 0x9 > bytes C++ > server.dll!SpawnHierarchicalList(int nEntities=3, HierarchicalSpawn_t > * pSpawnList=0x16d5da48, bool bActivateEntities=false) Line 510 + 0x12 > bytes C++ > server.dll!MapEntity_ParseAllEntities(const char * > pMapData=0x00000000, IMapEntityFilter * pFilter=0x0018e19c, bool > bActivateEntities=false) Line 484 + 0x12 bytes C++ > server.dll!CServerGameDLL::LevelInit(const char * pMapName=0x10495548, > const char * pMapEntities=0x0b84e000, const char * pOldLevel=0x00000000, > const char * pLandmarkName=0x00000000, bool loadGame=false, bool > background=false) Line 971 + 0xf bytes C++ > engine.dll!1026a07f() > engine.dll!101573fa() > engine.dll!10165b28() > engine.dll!10166219() > engine.dll!10166332() > engine.dll!101af191() > engine.dll!101ae36e() > engine.dll!101ae47e() > engine.dll!1036865e() > engine.dll!101aeb5e() > engine.dll!101aec4e() > launcher.dll!1000c8ee() > launcher.dll!1000c8ee() > launcher.dll!10005039() > KernelBase.dll!772511c4() > hl2.exe!004011cc() > ntdll.dll!7776e65f() > ntdll.dll!77770058() > ntdll.dll!7776fd0f() > KernelBase.dll!77250dae() > ntdll.dll!7775faaa() > usp10.dll!76726553() > usp10.dll!76726553() > hl2.exe!004096aa() > hl2.exe!004098c7() > hl2.exe!00406888() > ntdll.dll!7775fbda() > kernel32.dll!753a890a() > ntdll.dll!7775fada() > ntdll.dll!77779d4c() > kernel32.dll!753a886b() > hl2.exe!004093dd() > hl2.exe!00408938() > hl2.exe!0040108a() > hl2.exe!00401847() > kernel32.dll!753a33ca() > ntdll.dll!77779ed2() > ntdll.dll!77779ea5() > I thought it may be a debug build bug, so I cleaned and rebuilded in release but the same thing happened. here are my method from the call stack, if it's something I've missed : void CArwing::Spawn( void ) > { > Precache(); > //SetModel( "models/airboat.mdl" ); > // Setup vehicle as a real-wheels car. > SetVehicleType( VEHICLE_TYPE_CAR_WHEELS ); > SetCollisionGroup( COLLISION_GROUP_VEHICLE ); > BaseClass::Spawn(); > //m_flMinimumSpeedToEnterExit = LOCK_SPEED; > > m_nBulletType = GetAmmoDef()->Index("GaussEnergy"); > > CAmmoDef *pAmmoDef = GetAmmoDef(); > m_nAmmoType = pAmmoDef->Index("GaussEnergy"); > > AddSolidFlags( FSOLID_NOT_STANDABLE ); > } > void CFighterVehicleDriveable::Spawn( void ) > { > // Has to be created before Spawn is called (since that causes Precache > to be called) > DestroyServerVehicle(); > CreateServerVehicle(); > > // Initialize our vehicle via script > //m_pServerVehicle->Initialize( STRING(m_vehicleScript) ); > if ( m_pServerVehicle->Initialize( STRING(m_vehicleScript) ) == false ) > { > Warning( "Vehicle (%s) unable to properly initialize due to script > error in (%s)!\n", GetEntityName().ToCStr(), STRING( m_vehicleScript ) ); > SetThink( &CBaseEntity::SUB_Remove ); > SetNextThink( gpGlobals->curtime + 0.1f ); > return; > } > > BaseClass::Spawn(); > > m_flMinimumSpeedToEnterExit = 0; > m_takedamage = DAMAGE_EVENTS_ONLY; > m_bEngineLocked = false; > } > void CPropSFRVehicle::Spawn( ) > { > CServerFighterVehicle *pServerVehicle = > dynamic_cast<CServerFighterVehicle*>(GetServerVehicle()); > m_VehiclePhysics.SetOuter( this, pServerVehicle ); > > // NOTE: The model has to be set before we can spawn vehicle physics > BaseClass::Spawn(); > > > m_VehiclePhysics.Spawn(); > if (!m_VehiclePhysics.Initialize( STRING(m_vehicleScript), > m_nVehicleType )) > return; > SetNextThink( gpGlobals->curtime ); > > SetCollisionGroup( COLLISION_GROUP_VEHICLE ); > > m_vecSmoothedVelocity.Init(); > } >
_______________________________________________ To unsubscribe, edit your list preferences, or view the list archives, please visit: http://list.valvesoftware.com/mailman/listinfo/hlcoders