From 1fa510d26dcc3b1e223b068ea8fafdae45ac6a40 Mon Sep 17 00:00:00 2001 From: Tedd Hansen Date: Sat, 2 Feb 2008 05:14:50 +0000 Subject: And one more patch before sleep This annoying sleep during startup-problem still sometimes causes exceptions, so added some retry... --- OpenSim/Framework/Data.MySQL/MySQLDataStore.cs | 71 ++++++++++++++++---------- 1 file changed, 43 insertions(+), 28 deletions(-) (limited to 'OpenSim/Framework') diff --git a/OpenSim/Framework/Data.MySQL/MySQLDataStore.cs b/OpenSim/Framework/Data.MySQL/MySQLDataStore.cs index 478816c..6523105 100644 --- a/OpenSim/Framework/Data.MySQL/MySQLDataStore.cs +++ b/OpenSim/Framework/Data.MySQL/MySQLDataStore.cs @@ -418,41 +418,56 @@ namespace OpenSim.Framework.Data.MySQL { MainLog.Instance.Verbose("DATASTORE", "Tedds temp fix: Waiting 3 seconds for stuff to catch up. (Someone please fix! :))"); System.Threading.Thread.Sleep(3000); - - lock (m_dataSet) - { - DataTable land = m_landTable; - DataTable landaccesslist = m_landAccessListTable; - DataRow landRow = land.Rows.Find(Util.ToRawUuidString(parcel.landData.globalID)); - if (landRow == null) - { - landRow = land.NewRow(); - fillLandRow(landRow, parcel.landData, regionUUID); - land.Rows.Add(landRow); - } - else + int loopCount = 0; + while (true) + { + loopCount++; + try { - fillLandRow(landRow, parcel.landData, regionUUID); - } + lock (m_dataSet) + { + DataTable land = m_landTable; + DataTable landaccesslist = m_landAccessListTable; - using ( - MySqlCommand cmd = - new MySqlCommand("delete from landaccesslist where LandUUID=?LandUUID", m_connection)) - { - cmd.Parameters.Add(new MySqlParameter("?LandUUID", Util.ToRawUuidString(parcel.landData.globalID))); - cmd.ExecuteNonQuery(); - } + DataRow landRow = land.Rows.Find(Util.ToRawUuidString(parcel.landData.globalID)); + if (landRow == null) + { + landRow = land.NewRow(); + fillLandRow(landRow, parcel.landData, regionUUID); + land.Rows.Add(landRow); + } + else + { + fillLandRow(landRow, parcel.landData, regionUUID); + } - foreach (ParcelManager.ParcelAccessEntry entry in parcel.landData.parcelAccessList) + using ( + MySqlCommand cmd = + new MySqlCommand("delete from landaccesslist where LandUUID=?LandUUID", m_connection)) + { + cmd.Parameters.Add( + new MySqlParameter("?LandUUID", Util.ToRawUuidString(parcel.landData.globalID))); + cmd.ExecuteNonQuery(); + } + + foreach (ParcelManager.ParcelAccessEntry entry in parcel.landData.parcelAccessList) + { + DataRow newAccessRow = landaccesslist.NewRow(); + fillLandAccessRow(newAccessRow, entry, parcel.landData.globalID); + landaccesslist.Rows.Add(newAccessRow); + } + } + Commit(); + break; + } + catch (Exception ex) { - DataRow newAccessRow = landaccesslist.NewRow(); - fillLandAccessRow(newAccessRow, entry, parcel.landData.globalID); - landaccesslist.Rows.Add(newAccessRow); + System.Console.WriteLine("Tedds temp fix exception, will repeat taks: " + ex.ToString()); + if (loopCount > 3) + throw (ex); } } - - Commit(); } public List LoadLandObjects(LLUUID regionUUID) -- cgit v1.1