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

Reply via email to