STREAM挂起时记录挂起来源,在RESUME()触发对应连接方向的读事件。HTTP SUSPEND/RESUME功能初步调通
This commit is contained in:
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user