[Groonga-commit] groonga/groonga at 734accb [master] http load: send response on cancel

Back to archive index

Kouhei Sutou null+****@clear*****
Wed Mar 16 23:25:09 JST 2016


Kouhei Sutou	2016-03-16 23:25:09 +0900 (Wed, 16 Mar 2016)

  New Revision: 734accbd6f76ef8f228798f6bed04d4196752657
  https://github.com/groonga/groonga/commit/734accbd6f76ef8f228798f6bed04d4196752657

  Message:
    http load: send response on cancel

  Modified files:
    src/groonga.c

  Modified: src/groonga.c (+12 -7)
===================================================================
--- src/groonga.c    2016-03-16 23:24:10 +0900 (f9c8a75)
+++ src/groonga.c    2016-03-16 23:25:09 +0900 (df9a067)
@@ -1040,8 +1040,9 @@ h_output(grn_ctx *ctx, int flags, void *arg)
 }
 
 static void
-do_htreq_get(grn_ctx *ctx, grn_msg *msg)
+do_htreq_get(grn_ctx *ctx, ht_context *hc)
 {
+  grn_msg *msg = hc->msg;
   char *path = NULL;
   char *pathe = GRN_BULK_HEAD((grn_obj *)msg);
   char *e = GRN_BULK_CURR((grn_obj *)msg);
@@ -1242,8 +1243,9 @@ do_htreq_post_parse_header(grn_ctx *ctx,
 }
 
 static void
-do_htreq_post(grn_ctx *ctx, grn_msg *msg)
+do_htreq_post(grn_ctx *ctx, ht_context *hc)
 {
+  grn_msg *msg = hc->msg;
   grn_sock fd = msg->u.fd;
   const char *end;
   h_post_header header;
@@ -1359,7 +1361,9 @@ do_htreq_post(grn_ctx *ctx, grn_msg *msg)
       }
     }
 
-    if (ctx->rc == GRN_SUCCESS && GRN_TEXT_LEN(&chunk_buffer) > 0) {
+    if (ctx->rc == GRN_CANCEL) {
+      h_output(ctx, GRN_CTX_TAIL, hc);
+    } else if (ctx->rc == GRN_SUCCESS && GRN_TEXT_LEN(&chunk_buffer) > 0) {
       grn_ctx_send(ctx,
                    GRN_TEXT_VALUE(&chunk_buffer),
                    GRN_TEXT_LEN(&chunk_buffer),
@@ -1371,16 +1375,17 @@ do_htreq_post(grn_ctx *ctx, grn_msg *msg)
 }
 
 static void
-do_htreq(grn_ctx *ctx, grn_msg *msg)
+do_htreq(grn_ctx *ctx, ht_context *hc)
 {
+  grn_msg *msg = hc->msg;
   grn_com_header *header = &msg->header;
   switch (header->qtype) {
   case 'G' : /* GET */
   case 'H' : /* HEAD */
-    do_htreq_get(ctx, msg);
+    do_htreq_get(ctx, hc);
     break;
   case 'P' : /* POST */
-    do_htreq_post(ctx, msg);
+    do_htreq_post(ctx, hc);
     break;
   }
   grn_ctx_set_next_expr(ctx, NULL);
@@ -2149,7 +2154,7 @@ h_worker(void *arg)
     hc.msg = (grn_msg *)msg;
     hc.in_body = GRN_FALSE;
     hc.is_chunked = GRN_FALSE;
-    do_htreq(ctx, (grn_msg *)msg);
+    do_htreq(ctx, &hc);
     MUTEX_LOCK_ENSURE(ctx, q_mutex);
   };
 exit :
-------------- next part --------------
HTML����������������������������...
다운로드 



More information about the Groonga-commit mailing list
Back to archive index