Commit 4571689f authored by Poul-Henning Kamp's avatar Poul-Henning Kamp

Shave 16 bytes of the session memory requirement by putting the

sockaddr's directly into struct sess.
parent 4f610d3a
......@@ -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 */
......
......@@ -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();
......
......@@ -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;
......
......@@ -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));
}
/*--------------------------------------------------------------------*/
......
......@@ -107,7 +107,7 @@ sp_variables = (
'IP',
( 'proc',),
( ),
'const struct sess *'
'struct sess *'
),
('client.identity',
'STRING',
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment