Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
U
unique-xids
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
uplex-varnish
unique-xids
Commits
661e05ec
Commit
661e05ec
authored
Jan 21, 2011
by
Poul-Henning Kamp
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Replay SVN r5770
Improve and clean up the VGZ allocation a bit.
parent
87072eed
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
92 additions
and
41 deletions
+92
-41
cache.h
bin/varnishd/cache.h
+3
-2
cache_gzip.c
bin/varnishd/cache_gzip.c
+88
-38
cache_response.c
bin/varnishd/cache_response.c
+1
-1
No files found.
bin/varnishd/cache.h
View file @
661e05ec
...
@@ -625,10 +625,11 @@ void Fetch_Init(void);
...
@@ -625,10 +625,11 @@ void Fetch_Init(void);
/* cache_gzip.c */
/* cache_gzip.c */
struct
vgz
;
struct
vgz
;
struct
vgz
*
VGZ_NewUnzip
(
struct
sess
*
sp
,
struct
ws
*
tmp
,
struct
ws
*
buf
);
struct
vgz
*
VGZ_NewUnzip
(
const
struct
sess
*
sp
,
struct
ws
*
tmp
,
struct
ws
*
buf_ws
,
void
*
buf
,
ssize_t
bufl
);
int
VGZ_Feed
(
struct
vgz
*
,
const
void
*
,
size_t
len
);
int
VGZ_Feed
(
struct
vgz
*
,
const
void
*
,
size_t
len
);
int
VGZ_Produce
(
struct
vgz
*
,
const
void
**
,
size_t
*
len
);
int
VGZ_Produce
(
struct
vgz
*
,
const
void
**
,
size_t
*
len
);
int
VGZ_Destroy
(
struct
vgz
**
);
void
VGZ_Destroy
(
struct
vgz
**
);
/* cache_http.c */
/* cache_http.c */
unsigned
HTTP_estimate
(
unsigned
nhttp
);
unsigned
HTTP_estimate
(
unsigned
nhttp
);
...
...
bin/varnishd/cache_gzip.c
View file @
661e05ec
...
@@ -65,6 +65,7 @@
...
@@ -65,6 +65,7 @@
*/
*/
#include "config.h"
#include "config.h"
#include <stdio.h>
#include "svnid.h"
#include "svnid.h"
SVNID
(
"$Id$"
)
SVNID
(
"$Id$"
)
...
@@ -77,11 +78,11 @@ SVNID("$Id$")
...
@@ -77,11 +78,11 @@ SVNID("$Id$")
struct
vgz
{
struct
vgz
{
unsigned
magic
;
unsigned
magic
;
#define VGZ_MAGIC 0x162df0cb
#define VGZ_MAGIC 0x162df0cb
struct
sess
*
sp
;
struct
ws
*
tmp
;
struct
ws
*
tmp
;
char
*
tmp_snapshot
;
char
*
tmp_snapshot
;
struct
ws
*
buf
;
struct
ws
*
buf_ws
;
void
*
buf
;
size_t
bufsiz
;
size_t
bufsiz
;
z_stream
vz
;
z_stream
vz
;
...
@@ -96,7 +97,7 @@ vgz_alloc(voidpf opaque, uInt items, uInt size)
...
@@ -96,7 +97,7 @@ vgz_alloc(voidpf opaque, uInt items, uInt size)
CAST_OBJ_NOTNULL
(
vg
,
opaque
,
VGZ_MAGIC
);
CAST_OBJ_NOTNULL
(
vg
,
opaque
,
VGZ_MAGIC
);
return
(
WS_Alloc
(
vg
->
tmp
,
items
*
size
));
return
(
WS_Alloc
(
vg
->
tmp
,
items
*
size
));
}
}
static
void
static
void
...
@@ -108,39 +109,97 @@ vgz_free(voidpf opaque, voidpf address)
...
@@ -108,39 +109,97 @@ vgz_free(voidpf opaque, voidpf address)
(
void
)
address
;
(
void
)
address
;
}
}
/*--------------------------------------------------------------------*/
/*--------------------------------------------------------------------
* Set up a gunzip instance
*/
struct
vgz
*
st
atic
st
ruct
vgz
*
VGZ_NewUnzip
(
struct
sess
*
sp
,
struct
ws
*
tmp
,
struct
ws
*
buf
)
vgz_alloc_vgz
(
struct
ws
*
ws
,
struct
ws
*
buf_ws
,
void
*
buf
,
ssize_t
bufl
)
{
{
struct
vgz
*
vg
;
char
*
s
;
char
*
s
;
struct
vgz
*
vg
;
CHECK_OBJ_NOTNULL
(
sp
,
SESS_MAGIC
);
WS_Assert
(
ws
);
s
=
WS_Snapshot
(
ws
);
WS_Assert
(
tmp
);
vg
=
(
void
*
)
WS_Alloc
(
ws
,
sizeof
*
vg
);
WS_Assert
(
buf
);
s
=
WS_Snapshot
(
tmp
);
vg
=
(
void
*
)
WS_Alloc
(
tmp
,
sizeof
*
vg
);
AN
(
vg
);
AN
(
vg
);
memset
(
vg
,
0
,
sizeof
*
vg
);
memset
(
vg
,
0
,
sizeof
*
vg
);
vg
->
magic
=
VGZ_MAGIC
;
vg
->
magic
=
VGZ_MAGIC
;
vg
->
sp
=
sp
;
vg
->
tmp
=
ws
;
vg
->
tmp
=
tmp
;
vg
->
buf
=
buf
;
vg
->
tmp_snapshot
=
s
;
vg
->
tmp_snapshot
=
s
;
vg
->
vz
.
zalloc
=
vgz_alloc
;
vg
->
vz
.
zalloc
=
vgz_alloc
;
vg
->
vz
.
zfree
=
vgz_free
;
vg
->
vz
.
zfree
=
vgz_free
;
vg
->
vz
.
opaque
=
vg
;
vg
->
vz
.
opaque
=
vg
;
vg
->
bufsiz
=
WS_Reserve
(
buf
,
0
);
assert
(
buf_ws
==
NULL
||
buf
==
NULL
);
if
(
buf_ws
!=
NULL
)
{
WS_Assert
(
buf_ws
);
vg
->
buf_ws
=
buf_ws
;
vg
->
bufsiz
=
WS_Reserve
(
buf_ws
,
0
);
vg
->
buf
=
buf_ws
->
f
;
}
else
{
assert
(
bufl
>
0
);
vg
->
buf
=
buf
;
vg
->
bufsiz
=
bufl
;
}
return
(
vg
);
}
struct
vgz
*
VGZ_NewUnzip
(
const
struct
sess
*
sp
,
struct
ws
*
tmp
,
struct
ws
*
buf_ws
,
void
*
buf
,
ssize_t
bufl
)
{
struct
vgz
*
vg
;
CHECK_OBJ_NOTNULL
(
sp
,
SESS_MAGIC
);
vg
=
vgz_alloc_vgz
(
tmp
,
buf_ws
,
buf
,
bufl
);
/*
* Max memory usage according to zonf.h:
* mem_needed = "a few kb" + (1 << (windowBits))
* Since we don't control windowBits, we have to assume
* it is 15, so 34-35KB or so.
*/
assert
(
Z_OK
==
inflateInit2
(
&
vg
->
vz
,
31
));
assert
(
Z_OK
==
inflateInit2
(
&
vg
->
vz
,
31
));
return
(
vg
);
return
(
vg
);
}
}
static
struct
vgz
*
VGZ_NewGzip
(
const
struct
sess
*
sp
,
struct
ws
*
tmp
,
struct
ws
*
buf_ws
,
void
*
buf
,
ssize_t
bufl
)
{
struct
vgz
*
vg
;
int
i
;
CHECK_OBJ_NOTNULL
(
sp
,
SESS_MAGIC
);
vg
=
vgz_alloc_vgz
(
tmp
,
buf_ws
,
buf
,
bufl
);
/*
* From zconf.h:
*
* mem_needed = "a few kb"
* + (1 << (windowBits+2))
* + (1 << (memLevel+9))
*
* windowBits [8..15] (-> 1K..128K)
* memLevel [1..9] (-> 1K->256K)
*
* XXX: They probably needs to be params...
*/
i
=
deflateInit2
(
&
vg
->
vz
,
0
,
/* Level */
Z_DEFLATED
,
/* Method */
16
+
8
,
/* Window bits (16=gzip + 15) */
1
,
/* memLevel */
Z_DEFAULT_STRATEGY
);
if
(
i
!=
Z_OK
)
printf
(
"deflateInit2() = %d
\n
"
,
i
);
assert
(
Z_OK
==
i
);
return
(
vg
);
}
/*--------------------------------------------------------------------*/
/*--------------------------------------------------------------------*/
int
int
...
@@ -167,12 +226,12 @@ VGZ_Produce(struct vgz *vg, const void **pptr, size_t *plen)
...
@@ -167,12 +226,12 @@ VGZ_Produce(struct vgz *vg, const void **pptr, size_t *plen)
*
pptr
=
NULL
;
*
pptr
=
NULL
;
*
plen
=
0
;
*
plen
=
0
;
vg
->
vz
.
next_out
=
(
void
*
)
vg
->
buf
->
f
;
vg
->
vz
.
next_out
=
vg
->
bu
f
;
vg
->
vz
.
avail_out
=
vg
->
bufsiz
;
vg
->
vz
.
avail_out
=
vg
->
bufsiz
;
i
=
inflate
(
&
vg
->
vz
,
0
);
i
=
inflate
(
&
vg
->
vz
,
0
);
if
(
i
==
Z_OK
||
i
==
Z_STREAM_END
)
{
if
(
i
==
Z_OK
||
i
==
Z_STREAM_END
)
{
*
pptr
=
vg
->
buf
->
f
;
*
pptr
=
vg
->
buf
;
*
plen
=
vg
->
bufsiz
-
vg
->
vz
.
avail_out
;
*
plen
=
vg
->
bufsiz
-
vg
->
vz
.
avail_out
;
}
}
if
(
i
==
Z_OK
)
if
(
i
==
Z_OK
)
...
@@ -186,15 +245,15 @@ VGZ_Produce(struct vgz *vg, const void **pptr, size_t *plen)
...
@@ -186,15 +245,15 @@ VGZ_Produce(struct vgz *vg, const void **pptr, size_t *plen)
/*--------------------------------------------------------------------*/
/*--------------------------------------------------------------------*/
int
void
VGZ_Destroy
(
struct
vgz
**
vg
)
VGZ_Destroy
(
struct
vgz
**
vg
)
{
{
CHECK_OBJ_NOTNULL
(
*
vg
,
VGZ_MAGIC
);
CHECK_OBJ_NOTNULL
(
*
vg
,
VGZ_MAGIC
);
WS_Release
((
*
vg
)
->
buf
,
0
);
if
((
*
vg
)
->
buf_ws
!=
NULL
)
WS_Release
((
*
vg
)
->
buf_ws
,
0
);
WS_Reset
((
*
vg
)
->
tmp
,
(
*
vg
)
->
tmp_snapshot
);
WS_Reset
((
*
vg
)
->
tmp
,
(
*
vg
)
->
tmp_snapshot
);
*
vg
=
NULL
;
*
vg
=
NULL
;
return
(
0
);
}
}
/*--------------------------------------------------------------------
/*--------------------------------------------------------------------
...
@@ -207,7 +266,7 @@ static void __match_proto__()
...
@@ -207,7 +266,7 @@ static void __match_proto__()
vfp_gunzip_begin
(
struct
sess
*
sp
,
size_t
estimate
)
vfp_gunzip_begin
(
struct
sess
*
sp
,
size_t
estimate
)
{
{
(
void
)
estimate
;
(
void
)
estimate
;
sp
->
wrk
->
vfp_private
=
VGZ_NewUnzip
(
sp
,
sp
->
ws
,
sp
->
wrk
->
ws
);
sp
->
wrk
->
vfp_private
=
VGZ_NewUnzip
(
sp
,
sp
->
ws
,
sp
->
wrk
->
ws
,
NULL
,
0
);
}
}
static
int
__match_proto__
()
static
int
__match_proto__
()
...
@@ -237,10 +296,10 @@ vfp_gunzip_bytes(struct sess *sp, struct http_conn *htc, size_t bytes)
...
@@ -237,10 +296,10 @@ vfp_gunzip_bytes(struct sess *sp, struct http_conn *htc, size_t bytes)
l
=
vg
->
bufsiz
;
l
=
vg
->
bufsiz
;
if
(
l
>
bytes
)
if
(
l
>
bytes
)
l
=
bytes
;
l
=
bytes
;
w
=
HTC_Read
(
htc
,
vg
->
buf
->
f
,
l
);
w
=
HTC_Read
(
htc
,
vg
->
buf
,
l
);
if
(
w
<=
0
)
if
(
w
<=
0
)
return
(
w
);
return
(
w
);
vg
->
vz
.
next_in
=
(
void
*
)
vg
->
buf
->
f
;
vg
->
vz
.
next_in
=
vg
->
bu
f
;
vg
->
vz
.
avail_in
=
w
;
vg
->
vz
.
avail_in
=
w
;
bytes
-=
w
;
bytes
-=
w
;
}
}
...
@@ -304,16 +363,7 @@ vfp_gzip_begin(struct sess *sp, size_t estimate)
...
@@ -304,16 +363,7 @@ vfp_gzip_begin(struct sess *sp, size_t estimate)
struct
vgz
*
vg
;
struct
vgz
*
vg
;
(
void
)
estimate
;
(
void
)
estimate
;
vg
=
VGZ_NewUnzip
(
sp
,
sp
->
ws
,
sp
->
wrk
->
ws
);
vg
=
VGZ_NewGzip
(
sp
,
sp
->
ws
,
sp
->
wrk
->
ws
,
NULL
,
0
);
/* XXX: hack */
memset
(
&
vg
->
vz
,
0
,
sizeof
vg
->
vz
);
assert
(
Z_OK
==
deflateInit2
(
&
vg
->
vz
,
0
,
Z_DEFLATED
,
31
,
9
,
Z_DEFAULT_STRATEGY
));
sp
->
wrk
->
vfp_private
=
vg
;
sp
->
wrk
->
vfp_private
=
vg
;
}
}
...
@@ -344,10 +394,10 @@ vfp_gzip_bytes(struct sess *sp, struct http_conn *htc, size_t bytes)
...
@@ -344,10 +394,10 @@ vfp_gzip_bytes(struct sess *sp, struct http_conn *htc, size_t bytes)
l
=
vg
->
bufsiz
;
l
=
vg
->
bufsiz
;
if
(
l
>
bytes
)
if
(
l
>
bytes
)
l
=
bytes
;
l
=
bytes
;
w
=
HTC_Read
(
htc
,
vg
->
buf
->
f
,
l
);
w
=
HTC_Read
(
htc
,
vg
->
buf
,
l
);
if
(
w
<=
0
)
if
(
w
<=
0
)
return
(
w
);
return
(
w
);
vg
->
vz
.
next_in
=
(
void
*
)
vg
->
buf
->
f
;
vg
->
vz
.
next_in
=
vg
->
bu
f
;
vg
->
vz
.
avail_in
=
w
;
vg
->
vz
.
avail_in
=
w
;
bytes
-=
w
;
bytes
-=
w
;
}
}
...
...
bin/varnishd/cache_response.c
View file @
661e05ec
...
@@ -251,7 +251,7 @@ res_WriteGunzipObj(struct sess *sp, char lenbuf[20])
...
@@ -251,7 +251,7 @@ res_WriteGunzipObj(struct sess *sp, char lenbuf[20])
CHECK_OBJ_NOTNULL
(
sp
,
SESS_MAGIC
);
CHECK_OBJ_NOTNULL
(
sp
,
SESS_MAGIC
);
vg
=
VGZ_NewUnzip
(
sp
,
sp
->
ws
,
sp
->
wrk
->
ws
);
vg
=
VGZ_NewUnzip
(
sp
,
sp
->
ws
,
sp
->
wrk
->
ws
,
NULL
,
0
);
AN
(
vg
);
AN
(
vg
);
VTAILQ_FOREACH
(
st
,
&
sp
->
obj
->
store
,
list
)
{
VTAILQ_FOREACH
(
st
,
&
sp
->
obj
->
store
,
list
)
{
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment