diff options
author | Max Romanov <max.romanov@nginx.com> | 2018-07-12 15:50:43 +0300 |
---|---|---|
committer | Max Romanov <max.romanov@nginx.com> | 2018-07-12 15:50:43 +0300 |
commit | e6cd1c4257945063473d12a1eeed8d07dfe05467 (patch) | |
tree | 11b2dfa2322ccfe01a72041ecb0b2ab917d59865 /src | |
parent | 96a4f9f032de2ee385ba84bb3c31b437e9814686 (diff) | |
download | unit-e6cd1c4257945063473d12a1eeed8d07dfe05467.tar.gz unit-e6cd1c4257945063473d12a1eeed8d07dfe05467.tar.bz2 |
Go: http.Flusher implemented by unit.response.
This closes #133 issue on GitHub.
Diffstat (limited to 'src')
-rw-r--r-- | src/go/unit/nxt_go_lib.c | 17 | ||||
-rw-r--r-- | src/go/unit/nxt_go_lib.h | 2 | ||||
-rw-r--r-- | src/go/unit/response.go | 8 |
3 files changed, 27 insertions, 0 deletions
diff --git a/src/go/unit/nxt_go_lib.c b/src/go/unit/nxt_go_lib.c index 4455e783..eeb7aa50 100644 --- a/src/go/unit/nxt_go_lib.c +++ b/src/go/unit/nxt_go_lib.c @@ -31,6 +31,23 @@ nxt_go_response_write(nxt_go_request_t r, uintptr_t buf, size_t len) } +void +nxt_go_response_flush(nxt_go_request_t r) +{ + nxt_go_run_ctx_t *ctx; + + if (nxt_slow_path(r == 0)) { + return; + } + + ctx = (nxt_go_run_ctx_t *) r; + + if (ctx->nwbuf > 0) { + nxt_go_ctx_flush(ctx, 0); + } +} + + int nxt_go_request_read(nxt_go_request_t r, uintptr_t dst, size_t dst_len) { diff --git a/src/go/unit/nxt_go_lib.h b/src/go/unit/nxt_go_lib.h index 60ac09f6..0621a4dc 100644 --- a/src/go/unit/nxt_go_lib.h +++ b/src/go/unit/nxt_go_lib.h @@ -21,6 +21,8 @@ typedef uintptr_t nxt_go_request_t; int nxt_go_response_write(nxt_go_request_t r, uintptr_t buf, size_t len); +void nxt_go_response_flush(nxt_go_request_t r); + int nxt_go_request_read(nxt_go_request_t r, uintptr_t dst, size_t dst_len); int nxt_go_request_close(nxt_go_request_t r); diff --git a/src/go/unit/response.go b/src/go/unit/response.go index 44694011..801a52e5 100644 --- a/src/go/unit/response.go +++ b/src/go/unit/response.go @@ -65,3 +65,11 @@ func (r *response) WriteHeader(code int) { r.Write([]byte("\r\n")) } + +func (r *response) Flush() { + if !r.headerSent { + r.WriteHeader(http.StatusOK) + } + + C.nxt_go_response_flush(r.c_req) +} |