diff --git a/OpenSim/Data/MySQL/MySQLAssetData.cs b/OpenSim/Data/MySQL/MySQLAssetData.cs index 259e186629..fc05d1d45d 100644 --- a/OpenSim/Data/MySQL/MySQLAssetData.cs +++ b/OpenSim/Data/MySQL/MySQLAssetData.cs @@ -44,7 +44,6 @@ namespace OpenSim.Data.MySQL private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); private MySQLManager _dbConnection; - private long TicksToEpoch; #region IPlugin Members @@ -61,8 +60,6 @@ namespace OpenSim.Data.MySQL /// connect string override public void Initialise(string connect) { - TicksToEpoch = new DateTime(1970,1,1).Ticks; - // TODO: This will let you pass in the connect string in // the config, though someone will need to write that. if (connect == String.Empty) @@ -223,7 +220,7 @@ namespace OpenSim.Data.MySQL using (cmd) { // create unix epoch time - int now = (int)((DateTime.Now.Ticks - TicksToEpoch) / 10000000); + int now = (int)Utils.DateTimeToUnixTime(DateTime.UtcNow); cmd.Parameters.AddWithValue("?id", asset.ID); cmd.Parameters.AddWithValue("?name", assetName); cmd.Parameters.AddWithValue("?description", assetDescription); @@ -248,6 +245,9 @@ namespace OpenSim.Data.MySQL private void UpdateAccessTime(AssetBase asset) { + // Writing to the database every time Get() is called on an asset is killing us. Seriously. -jph + return; + lock (_dbConnection) { _dbConnection.CheckConnection(); @@ -262,7 +262,7 @@ namespace OpenSim.Data.MySQL using (cmd) { // create unix epoch time - int now = (int)((DateTime.Now.Ticks - TicksToEpoch) / 10000000); + int now = (int)Utils.DateTimeToUnixTime(DateTime.UtcNow); cmd.Parameters.AddWithValue("?id", asset.ID); cmd.Parameters.AddWithValue("?access_time", now); cmd.ExecuteNonQuery(); diff --git a/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs b/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs index 0cb56822ed..c44c4c7940 100644 --- a/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs +++ b/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs @@ -2402,11 +2402,11 @@ namespace OpenSim.Region.Framework.Scenes InventoryItemBase item = new InventoryItemBase(itemID, remoteClient.AgentId); item = InventoryService.GetItem(item); presence.Appearance.SetAttachment((int)AttachmentPt, itemID, item.AssetID /*att.UUID*/); - IAvatarFactory ava = RequestModuleInterface(); - if (ava != null) + + if (m_AvatarFactory != null) { m_log.InfoFormat("[SCENE INVENTORY]: Saving avatar attachment. AgentID:{0} ItemID:{1} AttachmentPoint:{2}", remoteClient.AgentId, itemID, AttachmentPt); - ava.UpdateDatabase(remoteClient.AgentId, presence.Appearance); + m_AvatarFactory.UpdateDatabase(remoteClient.AgentId, presence.Appearance); } } } diff --git a/OpenSim/Region/Framework/Scenes/Scene.cs b/OpenSim/Region/Framework/Scenes/Scene.cs index 14e4534d97..d3d397dde2 100644 --- a/OpenSim/Region/Framework/Scenes/Scene.cs +++ b/OpenSim/Region/Framework/Scenes/Scene.cs @@ -2481,7 +2481,7 @@ namespace OpenSim.Region.Framework.Scenes if (aCircuit == null || aCircuit.child == false) { sp.IsChildAgent = false; - sp.RezAttachments(); + Util.FireAndForget(delegate(object o) { sp.RezAttachments(); }); } } diff --git a/OpenSim/Region/Framework/Scenes/ScenePresence.cs b/OpenSim/Region/Framework/Scenes/ScenePresence.cs index 15fb11f19b..2a06f9eb9a 100644 --- a/OpenSim/Region/Framework/Scenes/ScenePresence.cs +++ b/OpenSim/Region/Framework/Scenes/ScenePresence.cs @@ -3841,6 +3841,9 @@ namespace OpenSim.Region.Framework.Scenes List attPoints = m_appearance.GetAttachedPoints(); foreach (int p in attPoints) { + if (m_isDeleted) + return; + UUID itemID = m_appearance.GetAttachedItem(p); UUID assetID = m_appearance.GetAttachedAsset(p); @@ -3866,9 +3869,7 @@ namespace OpenSim.Region.Framework.Scenes { m_log.ErrorFormat("[ATTACHMENT]: Unable to rez attachment: {0}", e.ToString()); } - } - } } }