Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
爱吃血肠
spring-framework
提交
2418ff0a
S
spring-framework
项目概览
爱吃血肠
/
spring-framework
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
S
spring-framework
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
2418ff0a
编写于
6月 30, 2016
作者:
A
Arjen Poutsma
提交者:
GitHub
6月 30, 2016
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #126 from violetagg/onwritepossible-state
Make AbstractResponseBodySubscriber.onWritePossible thread-safe
上级
e9d8152a
e545b202
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
42 addition
and
24 deletion
+42
-24
spring-web-reactive/src/main/java/org/springframework/http/server/reactive/AbstractResponseBodySubscriber.java
.../http/server/reactive/AbstractResponseBodySubscriber.java
+42
-24
未找到文件。
spring-web-reactive/src/main/java/org/springframework/http/server/reactive/AbstractResponseBodySubscriber.java
浏览文件 @
2418ff0a
...
...
@@ -152,10 +152,13 @@ abstract class AbstractResponseBodySubscriber implements Subscriber<DataBuffer>
* UNSUBSCRIBED
* |
* v
* REQUESTED <---> RECEIVED
* | |
* v v
* COMPLETED
* REQUESTED -------------------> RECEIVED
* ^ ^
* | |
* --------- WRITING <-----
* |
* v
* COMPLETED
* </pre>
* Refer to the individual states for more information.
*/
...
...
@@ -206,36 +209,41 @@ abstract class AbstractResponseBodySubscriber implements Subscriber<DataBuffer>
/**
* State that gets entered after a buffer has been
* {@linkplain Subscriber#onNext(Object) received}. Responds to
* {@code onWritePossible} by writing the current buffer, and if it can be
* written completely, changes state to either {@link #REQUESTED} if the
* subscription has not been completed; or {@link #COMPLETED} if it has.
* {@code onWritePossible} by writing the current buffer and changes
* the state to {@link #WRITING}. If it can be written completely,
* changes the state to either {@link #REQUESTED} if the subscription
* has not been completed; or {@link #COMPLETED} if it has. If it cannot
* be written completely the state will be changed to {@link #RECEIVED}.
*/
RECEIVED
{
@Override
void
onWritePossible
(
AbstractResponseBodySubscriber
subscriber
)
{
DataBuffer
dataBuffer
=
subscriber
.
currentBuffer
;
try
{
boolean
writeCompleted
=
subscriber
.
write
(
dataBuffer
);
if
(
writeCompleted
)
{
if
(
dataBuffer
instanceof
FlushingDataBuffer
)
{
subscriber
.
flush
();
}
subscriber
.
releaseBuffer
();
boolean
subscriptionCompleted
=
subscriber
.
subscriptionCompleted
;
if
(!
subscriptionCompleted
)
{
if
(
subscriber
.
changeState
(
this
,
REQUESTED
))
{
if
(
subscriber
.
changeState
(
this
,
WRITING
))
{
DataBuffer
dataBuffer
=
subscriber
.
currentBuffer
;
try
{
boolean
writeCompleted
=
subscriber
.
write
(
dataBuffer
);
if
(
writeCompleted
)
{
if
(
dataBuffer
instanceof
FlushingDataBuffer
)
{
subscriber
.
flush
();
}
subscriber
.
releaseBuffer
();
boolean
subscriptionCompleted
=
subscriber
.
subscriptionCompleted
;
if
(!
subscriptionCompleted
)
{
subscriber
.
changeState
(
WRITING
,
REQUESTED
);
subscriber
.
subscription
.
request
(
1
);
}
}
else
{
if
(
subscriber
.
changeState
(
this
,
COMPLETED
))
{
else
{
subscriber
.
changeState
(
WRITING
,
COMPLETED
);
subscriber
.
close
();
}
}
else
{
subscriber
.
changeState
(
WRITING
,
RECEIVED
);
}
}
catch
(
IOException
ex
)
{
subscriber
.
onError
(
ex
);
}
}
catch
(
IOException
ex
)
{
subscriber
.
onError
(
ex
);
}
}
...
...
@@ -244,6 +252,16 @@ abstract class AbstractResponseBodySubscriber implements Subscriber<DataBuffer>
subscriber
.
subscriptionCompleted
=
true
;
}
},
/**
* State that gets entered after a writing of the current buffer has been
* {@code onWritePossible started}.
*/
WRITING
{
@Override
void
onComplete
(
AbstractResponseBodySubscriber
subscriber
)
{
subscriber
.
subscriptionCompleted
=
true
;
}
},
/**
* The terminal completed state. Does not respond to any events.
*/
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录