diff options
author | Sean Dague | 2009-04-23 17:53:18 +0000 |
---|---|---|
committer | Sean Dague | 2009-04-23 17:53:18 +0000 |
commit | 7943ae48f506f23ac89fdcc0593c296c2cbf6540 (patch) | |
tree | 176dbb3601db3f58707768001ac901a11e680081 /OpenSim/Framework/Communications | |
parent | based on recent unit test output, put some extra checking in the (diff) | |
download | opensim-SC-7943ae48f506f23ac89fdcc0593c296c2cbf6540.zip opensim-SC-7943ae48f506f23ac89fdcc0593c296c2cbf6540.tar.gz opensim-SC-7943ae48f506f23ac89fdcc0593c296c2cbf6540.tar.bz2 opensim-SC-7943ae48f506f23ac89fdcc0593c296c2cbf6540.tar.xz |
move the lock out a bit further in the ProccessAssetCache loop to reduce
the number of times we are going to take this lock in a row (which is
just wasted resource), and to keep us from attempting to array access a
list which might be changing right now. Extremely curious if this helps
prevent some of our mono segfaults.
Diffstat (limited to 'OpenSim/Framework/Communications')
-rw-r--r-- | OpenSim/Framework/Communications/Cache/AssetCache.cs | 34 |
1 files changed, 18 insertions, 16 deletions
diff --git a/OpenSim/Framework/Communications/Cache/AssetCache.cs b/OpenSim/Framework/Communications/Cache/AssetCache.cs index f214e19..7d25ca9 100644 --- a/OpenSim/Framework/Communications/Cache/AssetCache.cs +++ b/OpenSim/Framework/Communications/Cache/AssetCache.cs | |||
@@ -515,7 +515,10 @@ namespace OpenSim.Framework.Communications.Cache | |||
515 | req.Params = transferRequest.TransferInfo.Params; | 515 | req.Params = transferRequest.TransferInfo.Params; |
516 | req.AssetInf = new AssetInfo(asset); | 516 | req.AssetInf = new AssetInfo(asset); |
517 | req.NumPackets = CalculateNumPackets(asset.Data); | 517 | req.NumPackets = CalculateNumPackets(asset.Data); |
518 | lock (AssetRequests) AssetRequests.Add(req); | 518 | lock (AssetRequests) |
519 | { | ||
520 | AssetRequests.Add(req); | ||
521 | } | ||
519 | } | 522 | } |
520 | 523 | ||
521 | /// <summary> | 524 | /// <summary> |
@@ -536,26 +539,25 @@ namespace OpenSim.Framework.Communications.Cache | |||
536 | AssetRequest req; | 539 | AssetRequest req; |
537 | AssetRequestToClient req2 = new AssetRequestToClient(); | 540 | AssetRequestToClient req2 = new AssetRequestToClient(); |
538 | 541 | ||
539 | for (int i = 0; i < num; i++) | 542 | lock (AssetRequests) |
540 | { | 543 | { |
541 | lock (AssetRequests) | 544 | for (int i = 0; i < num; i++) |
542 | { | 545 | { |
543 | req = AssetRequests[0]; | 546 | req = AssetRequests[0]; |
544 | AssetRequests.RemoveAt(0); | 547 | AssetRequests.RemoveAt(0); |
548 | req2.AssetInf = req.AssetInf; | ||
549 | req2.AssetRequestSource = req.AssetRequestSource; | ||
550 | req2.DataPointer = req.DataPointer; | ||
551 | req2.DiscardLevel = req.DiscardLevel; | ||
552 | req2.ImageInfo = req.ImageInfo; | ||
553 | req2.IsTextureRequest = req.IsTextureRequest; | ||
554 | req2.NumPackets = req.NumPackets; | ||
555 | req2.PacketCounter = req.PacketCounter; | ||
556 | req2.Params = req.Params; | ||
557 | req2.RequestAssetID = req.RequestAssetID; | ||
558 | req2.TransferRequestID = req.TransferRequestID; | ||
559 | req.RequestUser.SendAsset(req2); | ||
545 | } | 560 | } |
546 | |||
547 | req2.AssetInf = req.AssetInf; | ||
548 | req2.AssetRequestSource = req.AssetRequestSource; | ||
549 | req2.DataPointer = req.DataPointer; | ||
550 | req2.DiscardLevel = req.DiscardLevel; | ||
551 | req2.ImageInfo = req.ImageInfo; | ||
552 | req2.IsTextureRequest = req.IsTextureRequest; | ||
553 | req2.NumPackets = req.NumPackets; | ||
554 | req2.PacketCounter = req.PacketCounter; | ||
555 | req2.Params = req.Params; | ||
556 | req2.RequestAssetID = req.RequestAssetID; | ||
557 | req2.TransferRequestID = req.TransferRequestID; | ||
558 | req.RequestUser.SendAsset(req2); | ||
559 | } | 561 | } |
560 | } | 562 | } |
561 | 563 | ||