[experimental-ims] 4571689 Shave 16 bytes of the session memory requirement by putting the sockaddr's directly into struct sess.
Geoff Simmons
geoff at varnish-cache.org
Mon Jan 9 21:51:56 CET 2012
commit 4571689fdc7a7fff5f1b13ace0979bc0085181f3
Author: Poul-Henning Kamp <phk at FreeBSD.org>
Date: Sun Sep 18 08:14:22 2011 +0000
Shave 16 bytes of the session memory requirement by putting the
sockaddr's directly into struct sess.
diff --git a/bin/varnishd/cache.h b/bin/varnishd/cache.h
index 5db137a..122ab34 100644
--- a/bin/varnishd/cache.h
+++ b/bin/varnishd/cache.h
@@ -548,8 +548,8 @@ struct sess {
socklen_t sockaddrlen;
socklen_t mysockaddrlen;
- struct sockaddr_storage *sockaddr;
- struct sockaddr_storage *mysockaddr;
+ struct sockaddr_storage sockaddr;
+ struct sockaddr_storage mysockaddr;
struct listen_sock *mylsock;
/* formatted ascii client address */
diff --git a/bin/varnishd/cache_acceptor.c b/bin/varnishd/cache_acceptor.c
index b2a8015..50cc824 100644
--- a/bin/varnishd/cache_acceptor.c
+++ b/bin/varnishd/cache_acceptor.c
@@ -122,13 +122,13 @@ VCA_Prep(struct sess *sp)
char addr[VTCP_ADDRBUFSIZE];
char port[VTCP_PORTBUFSIZE];
- VTCP_name(sp->sockaddr, sp->sockaddrlen,
+ VTCP_name(&sp->sockaddr, sp->sockaddrlen,
addr, sizeof addr, port, sizeof port);
sp->addr = WS_Dup(sp->ws, addr);
sp->port = WS_Dup(sp->ws, port);
if (params->log_local_addr) {
- AZ(getsockname(sp->fd, (void*)sp->mysockaddr, &sp->mysockaddrlen));
- VTCP_name(sp->mysockaddr, sp->mysockaddrlen,
+ AZ(getsockname(sp->fd, (void*)&sp->mysockaddr, &sp->mysockaddrlen));
+ VTCP_name(&sp->mysockaddr, sp->mysockaddrlen,
addr, sizeof addr, port, sizeof port);
VSL(SLT_SessionOpen, sp->fd, "%s %s %s %s",
sp->addr, sp->port, addr, port);
@@ -264,7 +264,7 @@ VCA_SetupSess(struct worker *w)
sp->t_end = sp->t_end;
sp->mylsock = w->acceptlsock;
assert(w->acceptaddrlen <= sp->sockaddrlen);
- memcpy(sp->sockaddr, &w->acceptaddr, w->acceptaddrlen);
+ memcpy(&sp->sockaddr, &w->acceptaddr, w->acceptaddrlen);
sp->sockaddrlen = w->acceptaddrlen;
sp->step = STP_FIRST;
vca_pace_good();
diff --git a/bin/varnishd/cache_session.c b/bin/varnishd/cache_session.c
index 80e8da5..7012263 100644
--- a/bin/varnishd/cache_session.c
+++ b/bin/varnishd/cache_session.c
@@ -56,7 +56,6 @@ struct sessmem {
void *wsp;
struct http *http[2];
VTAILQ_ENTRY(sessmem) list;
- struct sockaddr_storage sockaddr[2];
};
struct sesspool {
@@ -152,11 +151,9 @@ ses_setup(struct sessmem *sm)
sp->magic = SESS_MAGIC;
sp->mem = sm;
- sp->sockaddr = (void*)(&sm->sockaddr[0]);
- sp->sockaddrlen = sizeof(sm->sockaddr[0]);
- sp->mysockaddr = (void*)(&sm->sockaddr[1]);
- sp->mysockaddrlen = sizeof(sm->sockaddr[1]);
- sp->sockaddr->ss_family = sp->mysockaddr->ss_family = PF_UNSPEC;
+ sp->sockaddrlen = sizeof(sp->sockaddr);
+ sp->mysockaddrlen = sizeof(sp->mysockaddr);
+ sp->sockaddr.ss_family = sp->mysockaddr.ss_family = PF_UNSPEC;
sp->t_open = NAN;
sp->t_req = NAN;
sp->t_resp = NAN;
diff --git a/bin/varnishd/cache_vrt_var.c b/bin/varnishd/cache_vrt_var.c
index 2054953..e26b433 100644
--- a/bin/varnishd/cache_vrt_var.c
+++ b/bin/varnishd/cache_vrt_var.c
@@ -457,10 +457,10 @@ REQ_BOOL(hash_always_miss)
/*--------------------------------------------------------------------*/
struct sockaddr_storage *
-VRT_r_client_ip(const struct sess *sp)
+VRT_r_client_ip(struct sess *sp)
{
- return (sp->sockaddr);
+ return (&sp->sockaddr);
}
struct sockaddr_storage *
@@ -468,12 +468,13 @@ VRT_r_server_ip(struct sess *sp)
{
int i;
- if (sp->mysockaddr->ss_family == AF_UNSPEC) {
- i = getsockname(sp->fd, (void*)sp->mysockaddr, &sp->mysockaddrlen);
+ if (sp->mysockaddr.ss_family == AF_UNSPEC) {
+ i = getsockname(sp->fd,
+ (void*)&sp->mysockaddr, &sp->mysockaddrlen);
assert(VTCP_Check(i));
}
- return (sp->mysockaddr);
+ return (&sp->mysockaddr);
}
const char*
@@ -506,10 +507,14 @@ VRT_r_server_hostname(struct sess *sp)
int
VRT_r_server_port(struct sess *sp)
{
+ int i;
- if (sp->mysockaddr->ss_family == AF_UNSPEC)
- AZ(getsockname(sp->fd, (void*)sp->mysockaddr, &sp->mysockaddrlen));
- return (VTCP_port(sp->mysockaddr));
+ if (sp->mysockaddr.ss_family == AF_UNSPEC) {
+ i = getsockname(sp->fd,
+ (void*)&sp->mysockaddr, &sp->mysockaddrlen);
+ assert(VTCP_Check(i));
+ }
+ return (VTCP_port(&sp->mysockaddr));
}
/*--------------------------------------------------------------------*/
diff --git a/lib/libvcl/generate.py b/lib/libvcl/generate.py
index fde8bb2..779091e 100755
--- a/lib/libvcl/generate.py
+++ b/lib/libvcl/generate.py
@@ -107,7 +107,7 @@ sp_variables = (
'IP',
( 'proc',),
( ),
- 'const struct sess *'
+ 'struct sess *'
),
('client.identity',
'STRING',
More information about the varnish-commit
mailing list