Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
dotNET Platform
runtime
提交
ffc5a341
R
runtime
项目概览
dotNET Platform
/
runtime
11 个月 前同步成功
通知
1
Star
1
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
R
runtime
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
未验证
提交
ffc5a341
编写于
4月 02, 2022
作者:
M
Marie Píchová
提交者:
GitHub
4月 02, 2022
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Fixed msquic method that's become void (#67481)
上级
4f66a25e
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
23 addition
and
13 deletion
+23
-13
src/libraries/System.Net.Quic/src/System/Net/Quic/Implementations/MsQuic/Interop/MsQuicNativeMethods.cs
...uic/Implementations/MsQuic/Interop/MsQuicNativeMethods.cs
+3
-6
src/libraries/System.Net.Quic/src/System/Net/Quic/Implementations/MsQuic/MsQuicStream.cs
...rc/System/Net/Quic/Implementations/MsQuic/MsQuicStream.cs
+20
-7
未找到文件。
src/libraries/System.Net.Quic/src/System/Net/Quic/Implementations/MsQuic/Interop/MsQuicNativeMethods.cs
浏览文件 @
ffc5a341
...
...
@@ -696,7 +696,7 @@ internal struct StreamEvent
QUIC_SEND_FLAGS
flags
,
IntPtr
clientSendContext
);
internal
delegate
uint
StreamReceiveCompleteDelegate
(
internal
delegate
void
StreamReceiveCompleteDelegate
(
SafeMsQuicStreamHandle
stream
,
ulong
bufferLength
);
...
...
@@ -1376,9 +1376,8 @@ internal uint StreamSend(SafeMsQuicStreamHandle stream, QuicBuffer* buffers, uin
return
__retVal
;
}
internal
uint
StreamReceiveComplete
(
SafeMsQuicStreamHandle
stream
,
ulong
bufferLength
)
internal
void
StreamReceiveComplete
(
SafeMsQuicStreamHandle
stream
,
ulong
bufferLength
)
{
uint
__retVal
;
//
// Setup
//
...
...
@@ -1390,7 +1389,7 @@ internal uint StreamReceiveComplete(SafeMsQuicStreamHandle stream, ulong bufferL
//
stream
.
DangerousAddRef
(
ref
stream__addRefd
);
IntPtr
__stream_gen_native
=
stream
.
DangerousGetHandle
();
__retVal
=
((
delegate
*
unmanaged
[
Cdecl
]<
IntPtr
,
ulong
,
uint
>)
_functionPointer
)(
__stream_gen_native
,
bufferLength
);
((
delegate
*
unmanaged
[
Cdecl
]<
IntPtr
,
ulong
,
void
>)
_functionPointer
)(
__stream_gen_native
,
bufferLength
);
}
finally
{
...
...
@@ -1400,8 +1399,6 @@ internal uint StreamReceiveComplete(SafeMsQuicStreamHandle stream, ulong bufferL
if
(
stream__addRefd
)
stream
.
DangerousRelease
();
}
return
__retVal
;
}
internal
uint
StreamReceiveSetEnabled
(
SafeMsQuicStreamHandle
stream
,
bool
enabled
)
{
...
...
src/libraries/System.Net.Quic/src/System/Net/Quic/Implementations/MsQuic/MsQuicStream.cs
浏览文件 @
ffc5a341
...
...
@@ -431,6 +431,8 @@ internal override ValueTask<int> ReadAsync(Memory<byte> destination, Cancellatio
long
abortError
;
bool
preCanceled
=
false
;
int
bytesRead
=
-
1
;
bool
reenableReceive
=
false
;
lock
(
_state
)
{
initialReadState
=
_state
.
ReadState
;
...
...
@@ -493,22 +495,32 @@ internal override ValueTask<int> ReadAsync(Memory<byte> destination, Cancellatio
{
_state
.
ReadState
=
ReadState
.
None
;
int
taken
=
CopyMsQuicBuffersToUserBuffer
(
_state
.
ReceiveQuicBuffers
.
AsSpan
(
0
,
_state
.
ReceiveQuicBuffersCount
),
destination
.
Span
);
ReceiveComplete
(
taken
);
bytesRead
=
CopyMsQuicBuffersToUserBuffer
(
_state
.
ReceiveQuicBuffers
.
AsSpan
(
0
,
_state
.
ReceiveQuicBuffersCount
),
destination
.
Span
);
if
(
taken
!=
_state
.
ReceiveQuicBuffersTotalBytes
)
if
(
bytesRead
!=
_state
.
ReceiveQuicBuffersTotalBytes
)
{
// Need to re-enable receives because MsQuic will pause them when we don't consume the entire buffer.
EnableReceive
()
;
reenableReceive
=
true
;
}
else
if
(
_state
.
ReceiveIsFinal
)
{
// This was a final message and we've consumed everything. We can complete the state without waiting for PEER_SEND_SHUTDOWN
_state
.
ReadState
=
ReadState
.
ReadsCompleted
;
}
}
}
// methods below need to be called outside of the lock
if
(
bytesRead
>
-
1
)
{
ReceiveComplete
(
bytesRead
);
return
new
ValueTask
<
int
>(
taken
);
if
(
reenableReceive
)
{
EnableReceive
();
}
return
new
ValueTask
<
int
>(
bytesRead
);
}
// All success scenarios returned at this point. Failure scenarios below:
...
...
@@ -859,6 +871,7 @@ private void Dispose(bool disposing)
private
void
EnableReceive
()
{
Debug
.
Assert
(!
Monitor
.
IsEntered
(
_state
),
"!Monitor.IsEntered(_state)"
);
uint
status
=
MsQuicApi
.
Api
.
StreamReceiveSetEnabledDelegate
(
_state
.
Handle
,
enabled
:
true
);
QuicExceptionHelpers
.
ThrowIfFailed
(
status
,
"StreamReceiveSetEnabled failed."
);
}
...
...
@@ -1475,8 +1488,8 @@ private static void CleanupSendState(State state)
private
void
ReceiveComplete
(
int
bufferLength
)
{
uint
status
=
MsQuicApi
.
Api
.
StreamReceiveCompleteDelegate
(
_state
.
Handle
,
(
ulong
)
bufferLength
);
QuicExceptionHelpers
.
ThrowIfFailed
(
status
,
"Could not complete receive call."
);
Debug
.
Assert
(!
Monitor
.
IsEntered
(
_state
),
"!Monitor.IsEntered(_state)"
);
MsQuicApi
.
Api
.
StreamReceiveCompleteDelegate
(
_state
.
Handle
,
(
ulong
)
bufferLength
);
}
// This can fail if the stream isn't started.
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录