diff options
author | Justin Clark-Casey (justincc) | 2010-09-15 21:41:42 +0100 |
---|---|---|
committer | Justin Clark-Casey (justincc) | 2010-09-15 21:51:13 +0100 |
commit | 16f296f48932379a89c52f095eae199347f33407 (patch) | |
tree | 083f5e19ff4a5a349d7ddac5055bff1a1fd59cdd /OpenSim/Region/RegionCombinerModule/RegionData.cs | |
parent | Remove long unused Region/Framework/ThreadTracker (diff) | |
download | opensim-SC_OLD-16f296f48932379a89c52f095eae199347f33407.zip opensim-SC_OLD-16f296f48932379a89c52f095eae199347f33407.tar.gz opensim-SC_OLD-16f296f48932379a89c52f095eae199347f33407.tar.bz2 opensim-SC_OLD-16f296f48932379a89c52f095eae199347f33407.tar.xz |
Instead of locking SOG.Children when a group is being removed from the scene, iterate over an unlocked list instead
Previously, deadlock was possible because deleting a group took a SOG.Children lock then an m_entityUpdates.SyncRoot lock in LLClientView
At the same time, a thread starting from LLClientView.ProcessEntityUpdates() could take an m_entityUpdates.SyncRoot lock then later attempt to take a SOG.Children lock in PermissionsModule.GenerateClientFlags() and later on
Taking a children list in SOG appears to be a better solution than changing PermissionsModule to not relook up the prim. Going the permission modules root would require that all downstream modules not take a SOG.Children lock either
Diffstat (limited to 'OpenSim/Region/RegionCombinerModule/RegionData.cs')
0 files changed, 0 insertions, 0 deletions