aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorAdam Frisby2007-10-25 15:17:42 +0000
committerAdam Frisby2007-10-25 15:17:42 +0000
commit6804f9affba63e8f39f207769f026e9fcda70d94 (patch)
tree0e6c94f9ed6b58ba0aff545a412de193497f4103
parent* Added XMLRPC Controller Module to OpenSimMain which allows XML-RPC queries ... (diff)
downloadopensim-SC-6804f9affba63e8f39f207769f026e9fcda70d94.zip
opensim-SC-6804f9affba63e8f39f207769f026e9fcda70d94.tar.gz
opensim-SC-6804f9affba63e8f39f207769f026e9fcda70d94.tar.bz2
opensim-SC-6804f9affba63e8f39f207769f026e9fcda70d94.tar.xz
* Added static mutex to terrain load-tile to prevent file IO locking issues.
-rw-r--r--OpenSim/Region/Terrain.BasicTerrain/TerrainEngine.cs51
1 files changed, 31 insertions, 20 deletions
diff --git a/OpenSim/Region/Terrain.BasicTerrain/TerrainEngine.cs b/OpenSim/Region/Terrain.BasicTerrain/TerrainEngine.cs
index d010a03..c8c6e51 100644
--- a/OpenSim/Region/Terrain.BasicTerrain/TerrainEngine.cs
+++ b/OpenSim/Region/Terrain.BasicTerrain/TerrainEngine.cs
@@ -51,6 +51,8 @@ namespace OpenSim.Region.Terrain
51 51
52 public class TerrainEngine 52 public class TerrainEngine
53 { 53 {
54 public static System.Threading.Mutex fileIOLock = new System.Threading.Mutex();
55
54 /// <summary> 56 /// <summary>
55 /// Plugin library for scripts 57 /// Plugin library for scripts
56 /// </summary> 58 /// </summary>
@@ -731,36 +733,45 @@ namespace OpenSim.Region.Terrain
731 /// <param name="lowerboundY">Where do the region coords start for this terrain?</param> 733 /// <param name="lowerboundY">Where do the region coords start for this terrain?</param>
732 public void LoadFromFileF32(string filename, int dimensionX, int dimensionY, int lowerboundX, int lowerboundY) 734 public void LoadFromFileF32(string filename, int dimensionX, int dimensionY, int lowerboundX, int lowerboundY)
733 { 735 {
734 int sectionToLoadX = ((this.offsetX - lowerboundX) * this.w); 736 fileIOLock.WaitOne();
735 int sectionToLoadY = ((this.offsetY - lowerboundY) * this.h); 737 try
738 {
736 739
737 double[,] tempMap = new double[dimensionX, dimensionY]; 740 int sectionToLoadX = ((this.offsetX - lowerboundX) * this.w);
741 int sectionToLoadY = ((this.offsetY - lowerboundY) * this.h);
738 742
739 FileInfo file = new FileInfo(filename); 743 double[,] tempMap = new double[dimensionX, dimensionY];
740 FileStream s = file.Open(FileMode.Open, FileAccess.Read);
741 BinaryReader bs = new BinaryReader(s);
742 744
743 int x, y; 745 FileInfo file = new FileInfo(filename);
744 for (x = 0; x < dimensionX; x++) 746 FileStream s = file.Open(FileMode.Open, FileAccess.Read);
745 { 747 BinaryReader bs = new BinaryReader(s);
746 for (y = 0; y < dimensionY; y++) 748
749 int x, y;
750 for (x = 0; x < dimensionX; x++)
747 { 751 {
748 tempMap[x,y] = (double)bs.ReadSingle(); 752 for (y = 0; y < dimensionY; y++)
753 {
754 tempMap[x, y] = (double)bs.ReadSingle();
755 }
749 } 756 }
750 }
751 757
752 for (y = 0; y < h; y++) 758 for (y = 0; y < h; y++)
753 {
754 for (x = 0; x < w; x++)
755 { 759 {
756 heightmap.Set(x, y, tempMap[x + sectionToLoadX, y + sectionToLoadY]); 760 for (x = 0; x < w; x++)
761 {
762 heightmap.Set(x, y, tempMap[x + sectionToLoadX, y + sectionToLoadY]);
763 }
757 } 764 }
758 }
759 765
760 bs.Close(); 766 bs.Close();
761 s.Close(); 767 s.Close();
762 768
763 tainted++; 769 tainted++;
770 }
771 finally
772 {
773 fileIOLock.ReleaseMutex();
774 }
764 } 775 }
765 776
766 /// <summary> 777 /// <summary>