file: fix processing POST data for deferred requests
[project/uhttpd.git] / file.c
diff --git a/file.c b/file.c
index 73e5a5f47b1d6d4312703dbddfc5ca96a1ccaa9b..607282518a5b569138a0058d809da40878e496a0 100644 (file)
--- a/file.c
+++ b/file.c
@@ -289,7 +289,7 @@ static const char * uh_file_mime_lookup(const char *path)
 static const char * uh_file_mktag(struct stat *s, char *buf, int len)
 {
        snprintf(buf, len, "\"%" PRIx64 "-%" PRIx64 "-%" PRIx64 "\"",
-                s->st_ino, s->st_size, s->st_mtime);
+                s->st_ino, s->st_size, (uint64_t)s->st_mtime);
 
        return buf;
 }
@@ -614,6 +614,7 @@ static void uh_file_request(struct client *cl, const char *url,
                if (fd < 0)
                        goto error;
 
+               req->respond_chunked = false;
                cl->dispatch.file.hdr = tb;
                uh_file_data(cl, pi, fd);
                cl->dispatch.file.hdr = NULL;
@@ -695,8 +696,11 @@ static void uh_complete_request(struct client *cl)
                dr = list_first_entry(&pending_requests, struct deferred_request, list);
                list_del(&dr->list);
 
+               cl = dr->cl;
                dr->called = true;
-               uh_invoke_script(dr->cl, dr->d, dr->path ? &dr->pi : NULL);
+               cl->dispatch.data_blocked = false;
+               uh_invoke_script(cl, dr->d, dr->path ? &dr->pi : NULL);
+               client_poll_post_data(cl);
        }
 }
 
@@ -755,6 +759,7 @@ uh_defer_script(struct client *cl, struct dispatch_handler *d, struct path_info
        }
 
        cl->dispatch.req_data = dr;
+       cl->dispatch.data_blocked = true;
        dr->cl = cl;
        dr->d = d;
        list_add(&dr->list, &pending_requests);