> The problem seems to be either low-memory or i386 related. I tested on
> an amd64 machine with 3GB RAM, and the problem goes away with 2+ GB
> files.
Does the diff below fix the issue?
Index: httpd.h
===================================================================
RCS file: /cvs/src/usr.sbin/httpd/httpd.h,v
retrieving revision 1.82
diff -u -p -r1.82 httpd.h
--- httpd.h 15 Mar 2015 22:08:45 -0000 1.82
+++ httpd.h 19 May 2015 15:58:12 -0000
@@ -557,7 +557,7 @@ int server_headers(struct client *, voi
int (*)(struct client *, struct kv *, void *), void *);
int server_writeresponse_http(struct client *);
int server_response_http(struct client *, u_int, struct media_type *,
- size_t, time_t);
+ off_t, time_t);
void server_reset_http(struct client *);
void server_close_http(struct client *);
int server_response(struct httpd *, struct client *);
Index: server_http.c
===================================================================
RCS file: /cvs/src/usr.sbin/httpd/server_http.c,v
retrieving revision 1.79
diff -u -p -r1.79 server_http.c
--- server_http.c 3 May 2015 18:39:58 -0000 1.79
+++ server_http.c 19 May 2015 15:58:12 -0000
@@ -1133,7 +1133,7 @@ server_getlocation(struct client *clt, c
int
server_response_http(struct client *clt, u_int code,
- struct media_type *media, size_t size, time_t mtime)
+ struct media_type *media, off_t size, time_t mtime)
{
struct http_descriptor *desc = clt->clt_descreq;
struct http_descriptor *resp = clt->clt_descresp;
@@ -1174,7 +1174,7 @@ server_response_http(struct client *clt,
/* Set content length, if specified */
if ((cl =
kv_add(&resp->http_headers, "Content-Length", NULL)) == NULL ||
- kv_set(cl, "%ld", size) == -1)
+ kv_set(cl, "%lld", size) == -1)
return (-1);
/* Set last modification time */