Merge branch 'master' of ssh://melanie@opensimulator.org/var/git/opensim

This commit is contained in:
Melanie
2009-09-03 21:04:06 +01:00
16 changed files with 114 additions and 55 deletions

View File

@@ -210,6 +210,7 @@ namespace OpenSim.Data.MSSQL
{
foreach (SceneObjectPart objectPart in allPrimsWithInventory)
{
command.Parameters.Clear();
command.Parameters.Add(_Database.CreateParameter("@PrimID", objectPart.UUID));
List<TaskInventoryItem> inventory = new List<TaskInventoryItem>();

View File

@@ -1169,5 +1169,27 @@ namespace OpenSim.Framework
return found.ToArray();
}
#region FireAndForget Threading Pattern
public static void FireAndForget(System.Threading.WaitCallback callback)
{
callback.BeginInvoke(null, EndFireAndForget, callback);
}
public static void FireAndForget(System.Threading.WaitCallback callback, object obj)
{
callback.BeginInvoke(obj, EndFireAndForget, callback);
}
private static void EndFireAndForget(IAsyncResult ar)
{
System.Threading.WaitCallback callback = (System.Threading.WaitCallback)ar.AsyncState;
callback.EndInvoke(ar);
ar.AsyncWaitHandle.Close();
}
#endregion FireAndForget Threading Pattern
}
}

View File

@@ -199,6 +199,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver
InventoryFolderImpl inventoryFolder = null;
InventoryItemBase inventoryItem = null;
/*
if (!m_userInfo.HasReceivedInventory)
{
// If the region server has access to the user admin service (by which users are created),
@@ -220,13 +221,15 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver
m_userInfo.FetchInventory();
}
}
*/
bool foundStar = false;
// Eliminate double slashes and any leading / on the path. This might be better done within InventoryFolderImpl
// itself (possibly at a small loss in efficiency).
string[] components
= m_invPath.Split(new string[] { InventoryFolderImpl.PATH_DELIMITER }, StringSplitOptions.RemoveEmptyEntries);
= m_invPath.Split(
new string[] { InventoryFolderImpl.PATH_DELIMITER }, StringSplitOptions.RemoveEmptyEntries);
int maxComponentIndex = components.Length - 1;

View File

@@ -64,6 +64,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver
/// </value>
private Dictionary<UUID, Scene> m_scenes = new Dictionary<UUID, Scene>();
private Scene m_aScene;
/// <value>
/// The comms manager we will use for all comms requests
/// </value>
@@ -110,8 +111,30 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver
InventoryArchiveSaved handlerInventoryArchiveSaved = OnInventoryArchiveSaved;
if (handlerInventoryArchiveSaved != null)
handlerInventoryArchiveSaved(succeeded, userInfo, invPath, saveStream, reportedException);
}
public void ArchiveInventory(string firstName, string lastName, string invPath, Stream saveStream)
{
if (m_scenes.Count > 0)
{
CachedUserInfo userInfo = GetUserInfo(firstName, lastName);
if (userInfo != null)
new InventoryArchiveWriteRequest(this, userInfo, invPath, saveStream).Execute();
}
}
public void ArchiveInventory(string firstName, string lastName, string invPath, string savePath)
{
if (m_scenes.Count > 0)
{
CachedUserInfo userInfo = GetUserInfo(firstName, lastName);
if (userInfo != null)
new InventoryArchiveWriteRequest(this, userInfo, invPath, savePath).Execute();
}
}
public void DearchiveInventory(string firstName, string lastName, string invPath, Stream loadStream)
{
if (m_scenes.Count > 0)
@@ -125,18 +148,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver
UpdateClientWithLoadedNodes(userInfo, request.Execute());
}
}
}
public void ArchiveInventory(string firstName, string lastName, string invPath, Stream saveStream)
{
if (m_scenes.Count > 0)
{
CachedUserInfo userInfo = GetUserInfo(firstName, lastName);
if (userInfo != null)
new InventoryArchiveWriteRequest(this, userInfo, invPath, saveStream).Execute();
}
}
}
public void DearchiveInventory(string firstName, string lastName, string invPath, string loadPath)
{
@@ -151,18 +163,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver
UpdateClientWithLoadedNodes(userInfo, request.Execute());
}
}
}
public void ArchiveInventory(string firstName, string lastName, string invPath, string savePath)
{
if (m_scenes.Count > 0)
{
CachedUserInfo userInfo = GetUserInfo(firstName, lastName);
if (userInfo != null)
new InventoryArchiveWriteRequest(this, userInfo, invPath, savePath).Execute();
}
}
}
/// <summary>
/// Load inventory from an inventory file archive

View File

@@ -272,7 +272,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Asset
if (asset != null)
{
handler.BeginInvoke(id, sender, asset, null, null);
Util.FireAndForget(delegate { handler(id, sender, asset); });
return true;
}

View File

@@ -211,7 +211,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Asset
if (asset != null)
{
handler.BeginInvoke(id, sender, asset, null, null);
Util.FireAndForget(delegate { handler(id, sender, asset); });
return true;
}
@@ -219,8 +219,8 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Asset
{
if ((a != null) && (m_Cache != null))
m_Cache.Cache(a);
handler.BeginInvoke(assetID, s, a, null, null);
Util.FireAndForget(delegate { handler(assetID, s, a); });
});
}

View File

@@ -457,6 +457,8 @@ namespace OpenSim.Region.Framework.Scenes
void SendInventoryComplete(IAsyncResult iar)
{
SendInventoryDelegate d = (SendInventoryDelegate)iar.AsyncState;
d.EndInvoke(iar);
}
/// <summary>
@@ -622,6 +624,8 @@ namespace OpenSim.Region.Framework.Scenes
private void PurgeFolderCompleted(IAsyncResult iar)
{
PurgeFolderDelegate d = (PurgeFolderDelegate)iar.AsyncState;
d.EndInvoke(iar);
}
}
}

View File

@@ -177,7 +177,7 @@ namespace OpenSim.Services.Connectors
}
else
{
handler.BeginInvoke(id, sender, asset, null, null);
Util.FireAndForget(delegate { handler(id, sender, asset); });
}
return true;

View File

@@ -461,6 +461,8 @@ namespace OpenSim.Services.Connectors
private void MoveItemsCompleted(IAsyncResult iar)
{
MoveItemsDelegate d = (MoveItemsDelegate)iar.AsyncState;
d.EndInvoke(iar);
}
public bool MoveItems(string userID, List<InventoryItemBase> items, UUID sessionID)

View File

@@ -232,7 +232,7 @@ namespace OpenSim.Services.InventoryService
m_log.WarnFormat("[INVENTORY SERVICE]: User {0} inventory not available", userID);
}
callback.BeginInvoke(folders, items, null, null);
Util.FireAndForget(delegate { callback(folders, items); });
}
public InventoryCollection GetFolderContent(UUID userID, UUID folderID)