[PATCH] Fix some concurrency issues regarding "inventory" asset transfers.

This commit is contained in:
Eva Comaroski
2020-09-03 05:47:12 +03:00
parent be8523a9e5
commit 9f43185431
4 changed files with 13 additions and 9 deletions

View File

@@ -180,8 +180,9 @@ namespace OpenMetaverse.TestClient
{
Logger.DebugLog(Name + ": timeout on asset " + qdi.AssetID.ToString(), Client);
// submit request again
var transferID = UUID.Random();
Client.Assets.RequestInventoryAsset(
qdi.AssetID, qdi.ItemID, qdi.TaskID, qdi.OwnerID, qdi.Type, true, Assets_OnAssetReceived);
qdi.AssetID, qdi.ItemID, qdi.TaskID, qdi.OwnerID, qdi.Type, true, transferID, Assets_OnAssetReceived);
qdi.WhenRequested = DateTime.Now;
qdi.IsRequested = true;
}
@@ -197,8 +198,9 @@ namespace OpenMetaverse.TestClient
QueuedDownloadInfo qdi = PendingDownloads.Dequeue();
qdi.WhenRequested = DateTime.Now;
qdi.IsRequested = true;
var transferID = UUID.Random();
Client.Assets.RequestInventoryAsset(
qdi.AssetID, qdi.ItemID, qdi.TaskID, qdi.OwnerID, qdi.Type, true, Assets_OnAssetReceived);
qdi.AssetID, qdi.ItemID, qdi.TaskID, qdi.OwnerID, qdi.Type, true, transferID, Assets_OnAssetReceived);
lock (CurrentDownloads) CurrentDownloads.Add(qdi);
}

View File

@@ -170,9 +170,10 @@ namespace OpenMetaverse.TestClient
AutoResetEvent assetDownloadEvent = new AutoResetEvent(false);
byte[] notecardData = null;
string error = "Timeout";
var transferID = UUID.Random();
Client.Assets.RequestInventoryAsset(assetID, itemID, UUID.Zero, Client.Self.AgentID, AssetType.Notecard, true,
delegate(AssetDownload transfer, Asset asset)
Client.Assets.RequestInventoryAsset(assetID, itemID, UUID.Zero, Client.Self.AgentID, AssetType.Notecard, true, transferID,
delegate (AssetDownload transfer, Asset asset)
{
if (transfer.Success)
notecardData = transfer.AssetData;

View File

@@ -49,7 +49,8 @@ namespace OpenMetaverse.TestClient
InventoryItem ii = (InventoryItem)Client.Inventory.Store[note];
// make request for asset
Client.Assets.RequestInventoryAsset(ii, true,
var transferID = UUID.Random();
Client.Assets.RequestInventoryAsset(ii, true, transferID,
delegate(AssetDownload transfer, Asset asset)
{
if (transfer.Success)