diff --git a/.nant/local.include b/.nant/local.include index 510bdc66dc..58d1ad1160 100644 --- a/.nant/local.include +++ b/.nant/local.include @@ -34,51 +34,55 @@ + - + - + - + - + - + - + - + - + - - - - - - - - - + + + + + + + + + diff --git a/Makefile b/Makefile index 46ddc2f19e..493cdca619 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,14 @@ -NANT = $(shell if test "$$EMACS" = "t" ; then echo "nant"; else echo "./nant-color"; fi) +# hey, emacs! this is a -*- makefile -*- +# +# OpenSim makefile +# + +RUBY = $(strip $(shell which ruby 2>/dev/null)) +ifeq ($(RUBY),) +NANT = nant +else +NANT = $(shell if test "$$EMACS" = "t" ; then echo "nant"; else echo "./nant-color"; fi) +endif all: prebuild # @export PATH=/usr/local/bin:$(PATH) @@ -14,7 +24,7 @@ prebuild: clean: # @export PATH=/usr/local/bin:$(PATH) - ${NANT} clean + -${NANT} clean test: prebuild ${NANT} test diff --git a/OpenSim/Data/MSSQL/MSSQLRegionData.cs b/OpenSim/Data/MSSQL/MSSQLRegionData.cs index c9e4bfe0c0..adedcce81d 100644 --- a/OpenSim/Data/MSSQL/MSSQLRegionData.cs +++ b/OpenSim/Data/MSSQL/MSSQLRegionData.cs @@ -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 inventory = new List(); diff --git a/OpenSim/Framework/Util.cs b/OpenSim/Framework/Util.cs index bbb0ae2286..58344f30c8 100644 --- a/OpenSim/Framework/Util.cs +++ b/OpenSim/Framework/Util.cs @@ -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 } } diff --git a/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveWriteRequest.cs b/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveWriteRequest.cs index 4ee90e2aa3..f73a7e3844 100644 --- a/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveWriteRequest.cs +++ b/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveWriteRequest.cs @@ -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; diff --git a/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiverModule.cs b/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiverModule.cs index d3ba5fe11f..c495e022ab 100644 --- a/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiverModule.cs +++ b/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiverModule.cs @@ -64,6 +64,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver /// private Dictionary m_scenes = new Dictionary(); private Scene m_aScene; + /// /// The comms manager we will use for all comms requests /// @@ -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(); - } - } + } /// /// Load inventory from an inventory file archive diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Asset/HGAssetBroker.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Asset/HGAssetBroker.cs index 621e9d2855..7b4e374819 100644 --- a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Asset/HGAssetBroker.cs +++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Asset/HGAssetBroker.cs @@ -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; } diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Asset/LocalAssetServiceConnector.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Asset/LocalAssetServiceConnector.cs index b13a116418..fd3aaf4fd1 100644 --- a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Asset/LocalAssetServiceConnector.cs +++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Asset/LocalAssetServiceConnector.cs @@ -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); }); }); } diff --git a/OpenSim/Region/Framework/Scenes/Scene.PacketHandlers.cs b/OpenSim/Region/Framework/Scenes/Scene.PacketHandlers.cs index 55b100b0db..fddba86cbe 100644 --- a/OpenSim/Region/Framework/Scenes/Scene.PacketHandlers.cs +++ b/OpenSim/Region/Framework/Scenes/Scene.PacketHandlers.cs @@ -457,6 +457,8 @@ namespace OpenSim.Region.Framework.Scenes void SendInventoryComplete(IAsyncResult iar) { + SendInventoryDelegate d = (SendInventoryDelegate)iar.AsyncState; + d.EndInvoke(iar); } /// @@ -622,6 +624,8 @@ namespace OpenSim.Region.Framework.Scenes private void PurgeFolderCompleted(IAsyncResult iar) { + PurgeFolderDelegate d = (PurgeFolderDelegate)iar.AsyncState; + d.EndInvoke(iar); } } } diff --git a/OpenSim/Services/Connectors/Asset/AssetServiceConnector.cs b/OpenSim/Services/Connectors/Asset/AssetServiceConnector.cs index d9748d4fd8..ffc8e4ce53 100644 --- a/OpenSim/Services/Connectors/Asset/AssetServiceConnector.cs +++ b/OpenSim/Services/Connectors/Asset/AssetServiceConnector.cs @@ -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; diff --git a/OpenSim/Services/Connectors/Inventory/InventoryServiceConnector.cs b/OpenSim/Services/Connectors/Inventory/InventoryServiceConnector.cs index a2261ba0f4..cef678ddd0 100644 --- a/OpenSim/Services/Connectors/Inventory/InventoryServiceConnector.cs +++ b/OpenSim/Services/Connectors/Inventory/InventoryServiceConnector.cs @@ -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 items, UUID sessionID) diff --git a/OpenSim/Services/InventoryService/InventoryService.cs b/OpenSim/Services/InventoryService/InventoryService.cs index f04754b195..b98e256c06 100644 --- a/OpenSim/Services/InventoryService/InventoryService.cs +++ b/OpenSim/Services/InventoryService/InventoryService.cs @@ -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) diff --git a/README.txt b/README.txt index cdbf011b04..83ac7d6265 100644 --- a/README.txt +++ b/README.txt @@ -1,7 +1,7 @@ Welcome to OpenSim! Version 0.6.x - + == OVERVIEW == OpenSim is a BSD Licensed Open Source project to develop a functioning @@ -90,4 +90,3 @@ project can always be found at http://opensimulator.org. Thanks for trying OpenSim, we hope it is a pleasant experience. - diff --git a/TESTING.txt b/TESTING.txt index 94f58874e9..e0a7748e6f 100644 --- a/TESTING.txt +++ b/TESTING.txt @@ -135,3 +135,4 @@ nunit-console2 OpenSim.Framework.Tests.dll (on linux) nunit-console OpenSim.Framework.Tests.dll (on windows) For more information on testing contact the autor of this testing readme: Daedius Moskvitch ( daedius @@@@ daedius com) + diff --git a/bin/OpenSim.ConsoleClient.ini.example b/bin/OpenSim.ConsoleClient.ini.example index beea7d875b..5223d1d262 100644 --- a/bin/OpenSim.ConsoleClient.ini.example +++ b/bin/OpenSim.ConsoleClient.ini.example @@ -1 +1,14 @@ [Startup] + ; Set here or use the -user command-line switch + ;user = Test + + ; Set here or use the -host command-line switch + ;host = localhost + + ; Set here or use the -port command-line switch + ;port = 8003 + + ; Set here or use the -pass command-line switch + ; Please be aware that this is not secure since the password is in the clear + ; we recommend the use of -pass wherever possible + ;pass = secret diff --git a/nant-color b/nant-color index c4cebb043d..b36898681b 100755 --- a/nant-color +++ b/nant-color @@ -1,5 +1,4 @@ -#!/usr/bin/ruby - +#!/usr/bin/env ruby def main IO.popen("nant #{ARGV.join(' ')}") { |pipe|