Revert buffer alignment in NativeRequestContext
The buffer alignment will be set to zero so that WebListener will work properly in all environment except ARM
This commit is contained in:
parent
b31ec7d7a7
commit
735366ff3f
|
|
@ -132,10 +132,18 @@ namespace Microsoft.Net.Http.Server
|
||||||
_nativeOverlapped = new SafeNativeOverlapped(boundHandle,
|
_nativeOverlapped = new SafeNativeOverlapped(boundHandle,
|
||||||
boundHandle.AllocateNativeOverlapped(AsyncAcceptContext.IOCallback, _acceptResult, _backingBuffer));
|
boundHandle.AllocateNativeOverlapped(AsyncAcceptContext.IOCallback, _acceptResult, _backingBuffer));
|
||||||
|
|
||||||
// HttpReceiveHttpRequest expects the request pointer to be 8-byte-aligned or it fails. On ARM
|
|
||||||
// CLR creates buffers that are 4-byte-aligned so we need force 8-byte alignment.
|
|
||||||
var requestAddress = Marshal.UnsafeAddrOfPinnedArrayElement(_backingBuffer, 0);
|
var requestAddress = Marshal.UnsafeAddrOfPinnedArrayElement(_backingBuffer, 0);
|
||||||
_bufferAlignment = (int)(requestAddress.ToInt64() & 0x07);
|
|
||||||
|
// TODO:
|
||||||
|
// Apparently the HttpReceiveHttpRequest memory alignment requirements for non - ARM processors
|
||||||
|
// are different than for ARM processors. We have seen 4 - byte - aligned buffers allocated on
|
||||||
|
// virtual x64/x86 machines which were accepted by HttpReceiveHttpRequest without errors. In
|
||||||
|
// these cases the buffer alignment may cause reading values at invalid offset. Setting buffer
|
||||||
|
// alignment to 0 for now.
|
||||||
|
//
|
||||||
|
// _bufferAlignment = (int)(requestAddress.ToInt64() & 0x07);
|
||||||
|
|
||||||
|
_bufferAlignment = 0;
|
||||||
|
|
||||||
_nativeRequest = (HttpApi.HTTP_REQUEST*)(requestAddress + _bufferAlignment);
|
_nativeRequest = (HttpApi.HTTP_REQUEST*)(requestAddress + _bufferAlignment);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue