aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/Framework
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Region/Framework')
-rw-r--r--OpenSim/Region/Framework/Scenes/SceneObjectPartInventory.cs63
1 files changed, 43 insertions, 20 deletions
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectPartInventory.cs b/OpenSim/Region/Framework/Scenes/SceneObjectPartInventory.cs
index 57adda7..59ac30d 100644
--- a/OpenSim/Region/Framework/Scenes/SceneObjectPartInventory.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneObjectPartInventory.cs
@@ -784,6 +784,10 @@ namespace OpenSim.Region.Framework.Scenes
784 784
785 private bool CreateInventoryFile() 785 private bool CreateInventoryFile()
786 { 786 {
787// m_log.DebugFormat(
788// "[PRIM INVENTORY]: Creating inventory file for {0} {1} {2}, serial {3}",
789// m_part.Name, m_part.UUID, m_part.LocalId, m_inventorySerial);
790
787 if (m_inventoryFileName == String.Empty || 791 if (m_inventoryFileName == String.Empty ||
788 m_inventoryFileNameSerial < m_inventorySerial) 792 m_inventoryFileNameSerial < m_inventorySerial)
789 { 793 {
@@ -797,6 +801,10 @@ namespace OpenSim.Region.Framework.Scenes
797 { 801 {
798 foreach (TaskInventoryItem item in m_items.Values) 802 foreach (TaskInventoryItem item in m_items.Values)
799 { 803 {
804// m_log.DebugFormat(
805// "[PRIM INVENTORY]: Adding item {0} {1} for serial {2} on prim {3} {4} {5}",
806// item.Name, item.ItemID, m_inventorySerial, m_part.Name, m_part.UUID, m_part.LocalId);
807
800 UUID ownerID = item.OwnerID; 808 UUID ownerID = item.OwnerID;
801 uint everyoneMask = 0; 809 uint everyoneMask = 0;
802 uint baseMask = item.BasePermissions; 810 uint baseMask = item.BasePermissions;
@@ -856,28 +864,43 @@ namespace OpenSim.Region.Framework.Scenes
856 /// <param name="xferManager"></param> 864 /// <param name="xferManager"></param>
857 public void RequestInventoryFile(IClientAPI client, IXfer xferManager) 865 public void RequestInventoryFile(IClientAPI client, IXfer xferManager)
858 { 866 {
859 CreateInventoryFile(); 867 lock (m_items)
860
861 if (m_inventorySerial == 0) // No inventory
862 { 868 {
863 client.SendTaskInventory(m_part.UUID, 0, new byte[0]); 869 CreateInventoryFile();
864 return;
865 }
866
867 // In principle, we should only do the rest if the inventory changed;
868 // by sending m_inventorySerial to the client, it ought to know
869 // that nothing changed and that it doesn't need to request the file.
870 // Unfortunately, it doesn't look like the client optimizes this;
871 // the client seems to always come back and request the Xfer,
872 // no matter what value m_inventorySerial has.
873 870
874 if (m_inventoryFileData.Length > 2) 871 // Don't send a inventory xfer name if there are no items. Doing so causes viewer 3 to crash when rezzing
875 // Add the file for Xfer 872 // a new script if any previous deletion has left the prim inventory empty.
876 xferManager.AddNewFile(m_inventoryFileName, m_inventoryFileData); 873 if (m_items.Count == 0) // No inventory
877 874 {
878 // Tell the client we're ready to Xfer the file 875// m_log.DebugFormat(
879 client.SendTaskInventory(m_part.UUID, (short)m_inventorySerial, 876// "[PRIM INVENTORY]: Not sending inventory data for part {0} {1} {2} for {3} since no items",
880 Util.StringToBytes256(m_inventoryFileName)); 877// m_part.Name, m_part.LocalId, m_part.UUID, client.Name);
878
879 client.SendTaskInventory(m_part.UUID, 0, new byte[0]);
880 return;
881 }
882
883 // In principle, we should only do the rest if the inventory changed;
884 // by sending m_inventorySerial to the client, it ought to know
885 // that nothing changed and that it doesn't need to request the file.
886 // Unfortunately, it doesn't look like the client optimizes this;
887 // the client seems to always come back and request the Xfer,
888 // no matter what value m_inventorySerial has.
889 // FIXME: Could probably be > 0 here rather than > 2
890 if (m_inventoryFileData.Length > 2)
891 {
892 // Add the file for Xfer
893 // m_log.DebugFormat(
894 // "[PRIM INVENTORY]: Adding inventory file {0} (length {1}) for transfer on {2} {3} {4}",
895 // m_inventoryFileName, m_inventoryFileData.Length, m_part.Name, m_part.UUID, m_part.LocalId);
896
897 xferManager.AddNewFile(m_inventoryFileName, m_inventoryFileData);
898 }
899
900 // Tell the client we're ready to Xfer the file
901 client.SendTaskInventory(m_part.UUID, (short)m_inventorySerial,
902 Util.StringToBytes256(m_inventoryFileName));
903 }
881 } 904 }
882 905
883 /// <summary> 906 /// <summary>