STREAM挂起时记录挂起来源,在RESUME()触发对应连接方向的读事件。HTTP SUSPEND/RESUME功能初步调通

This commit is contained in:
Lu Qiuwen
2018-10-14 20:29:52 +08:00
parent 294201ecd8
commit e9c11824b0
6 changed files with 37 additions and 4 deletions

View File

@@ -106,7 +106,7 @@ int tfe_stream_preempt(const struct tfe_stream * stream)
return 0;
}
void tfe_stream_suspend(const struct tfe_stream * stream)
void tfe_stream_suspend(const struct tfe_stream * stream, enum tfe_conn_dir by)
{
struct tfe_stream_private * _stream = to_stream_private(stream);
assert(_stream != NULL);
@@ -117,6 +117,7 @@ void tfe_stream_suspend(const struct tfe_stream * stream)
/* stream cannot be suspended twice or more */
assert(!_stream->is_suspended);
_stream->is_suspended = true;
_stream->suspended_by = by;
/* disable all events */
bufferevent_disable(_stream->conn_upstream->bev, EV_READ | EV_WRITE);
@@ -128,9 +129,20 @@ void tfe_stream_resume(const struct tfe_stream * stream)
struct tfe_stream_private * _stream = to_stream_private(stream);
assert(_stream->is_suspended);
_stream->is_suspended = false;
bufferevent_enable(_stream->conn_upstream->bev, EV_READ | EV_WRITE);
bufferevent_enable(_stream->conn_downstream->bev, EV_READ | EV_WRITE);
if(_stream->suspended_by == CONN_DIR_DOWNSTREAM)
{
bufferevent_trigger(_stream->conn_downstream->bev, EV_READ, BEV_OPT_DEFER_CALLBACKS);
}
else
{
bufferevent_trigger(_stream->conn_upstream->bev, EV_READ, BEV_OPT_DEFER_CALLBACKS);
}
_stream->is_suspended = false;
_stream->suspended_by = CONN_DIR_DOWNSTREAM;
}
struct tfe_stream_write_ctx * tfe_stream_write_frag_start(const struct tfe_stream * stream, enum tfe_conn_dir dir)