r9179: cope with simultaneous web requests using the same session variable
authorAndrew Tridgell <tridge@samba.org>
Sun, 7 Aug 2005 15:20:25 +0000 (15:20 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 18:31:29 +0000 (13:31 -0500)
(This used to be commit 7d6e6012198d6fd3770da22ec5e1770c9bcd4ed7)

source4/web_server/http.c

index 59bef468dddbe8eb30dd6c41afbe0295077dc62e..61e6277800d7058d0878eb5fcce2f2cb47205614 100644 (file)
@@ -751,6 +751,7 @@ void http_process_input(struct websrv_context *web)
        struct esp_state *esp;
        struct esp_data *edata = talloc_get_type(web->task->private, struct esp_data);
        char *p;
+       void *save_mpr_ctx = mprMemCtx();
        int i;
        const char *file_type = NULL;
        BOOL esp_enable = False;
@@ -800,6 +801,7 @@ void http_process_input(struct websrv_context *web)
 
        if (web->input.url == NULL) {
                http_error(web, 400, "You must specify a GET or POST request");
+               mprSetCtx(save_mpr_ctx);
                return;
        }
        
@@ -808,6 +810,7 @@ void http_process_input(struct websrv_context *web)
                status = http_parse_post(esp);
                if (!NT_STATUS_IS_OK(status)) {
                        http_error(web, 400, "Malformed POST data");
+                       mprSetCtx(save_mpr_ctx);
                        return;
                }
        } 
@@ -815,6 +818,7 @@ void http_process_input(struct websrv_context *web)
                status = http_parse_get(esp);
                if (!NT_STATUS_IS_OK(status)) {
                        http_error(web, 400, "Malformed GET data");
+                       mprSetCtx(save_mpr_ctx);
                        return;
                }
        }
@@ -894,12 +898,14 @@ void http_process_input(struct websrv_context *web)
        }
 
        talloc_free(esp);
+       mprSetCtx(save_mpr_ctx);
        return;
        
 internal_error:
        mprSetCtx(esp);
        talloc_free(esp);
        http_error(web, 500, "Internal server error");
+       mprSetCtx(save_mpr_ctx);
 }