summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--src/go/unit/nxt_go_lib.c17
-rw-r--r--src/go/unit/nxt_go_lib.h2
-rw-r--r--src/go/unit/response.go8
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)
+}