Blogs  >  Storage Client Hotfix Release – September 2010

Storage Client Hotfix Release – September 2010

Storage Client Hotfix Release – September 2010


The issues are resolved in the Windows Azure SDK  1.3 release which can be downloaded here.

1. Application crashes with unhandled NullReferenceException that is raised on a callback thread

Storage Client uses a timer object to keep track of timeouts when getting the web response. There is a race condition that causes access to a disposed timer object causing a NullReferenceException with the following call stack:

System.NullReferenceException: Object reference not set to an instance of an object.
at Microsoft.WindowsAzure.StorageClient.Tasks.DelayTask.<BeginDelay>b__0(Object state)
at System.Threading.ExecutionContext.runTryCode(Object userData)
at System.Runtime.CompilerServices.RuntimeHelpers.ExecuteCodeWithGuaranteedCleanup(TryCode code, CleanupCode backoutCode, Object userData)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Threading._TimerCallback.PerformTimerCallback(Object state)

This can impact any API in the library and since this occurred on a callback thread and the exception was not handled, it resulted in the application crashing. We have fixed this issue now.

2. MD5 Header is not passed to Azure Blob Service in block blob uploads

The Storage Client routines UploadText, UploadFromStream, UploadFile, UploadByteArray use block blobs to upload the files. The client library used incorrect header (it used x-ms-blob-content-md5 rather than the standard content-md5 header) while uploading individual blocks. Therefore, the MD5 was not checked when the block was stored in the Azure Blob service. We have fixed this by using the correct header.

Please download the update from here.

Comments (1)

  1. Joannes Vermorel - Lokad.com says:

    Could you post some guideline about md5 and blob storage. Is md5 checked for UploadToStream and DownloadToStream? Or are we supposed to manually check for md5?