While working on my current mod (Smashball - www.smashball.tv), I came across a rare server crash in physics.cpp: line 454 (int CCollisionEvent::ShouldCollide function). This function tries to determine if two entities should collide. The physics system has the physics objects for each object along with a pointer to the CBaseEntity that owns the physics objects. Once-in-awhile this function would crash the server, and it appeared that one of the CBaseEntity pointers was dangling/no longer pointing to a valid CBaseEntity. I was watching the server console when one of these crashes occurred, and the last line indicated a player had disconnected. I didn't plan on trying to track down the reason soon due to the rarity of the crash, but tonight, I think I may have found the source of the crash. In hl2mp_player.cpp, the "UpdateOnRemove" function calls "UTIL_RemoveImmediate( m_hRagdoll )" to immediately delete the player's ragdoll. Is this safe to do? I suppose normally the ragdoll doesn't have an associated physics entity on the server, but in Smashball, players do have server ragdolls to sync up the player's position with their ragdoll when they get up from being knocked out. I'm thinking that UTIL_RemoveImmediate deletes the ragdoll entity immediately, but the physics object is left around with the pointer to the entity until the end of the frame. Is that possible?
_______________________________________________ To unsubscribe, edit your list preferences, or view the list archives, please visit: http://list.valvesoftware.com/mailman/listinfo/hlcoders

