Commit eb807d58 authored by Geoff Simmons's avatar Geoff Simmons

Encapsulate munmap() calls in a single function.

parent 33f3bd64
...@@ -121,6 +121,24 @@ struct obj_entry { ...@@ -121,6 +121,24 @@ struct obj_entry {
VSLIST_HEAD(obj_head, obj_entry); VSLIST_HEAD(obj_head, obj_entry);
static int
unmap(struct VPFX(file_reader) *rdr, void *addr)
{
CHECK_OBJ_NOTNULL(rdr, FILE_READER_MAGIC);
CHECK_OBJ_NOTNULL(rdr->info, FILE_INFO_MAGIC);
AN(rdr->obj_name);
AN(rdr->vcl_name);
AN(addr);
errno = 0;
if (munmap(addr, rdr->info->len) != 0) {
VSL(SLT_Error, NO_VXID, "vmod file: %s.%s: unmap failed: %s",
rdr->vcl_name, rdr->obj_name, VAS_errtxt(errno));
return (-1);
}
return (0);
}
static void static void
check(union sigval val) check(union sigval val)
{ {
...@@ -272,13 +290,10 @@ check(union sigval val) ...@@ -272,13 +290,10 @@ check(union sigval val)
flags |= RDR_MAPPED; flags |= RDR_MAPPED;
if (rdr->flags & RDR_MAPPED) { if (rdr->flags & RDR_MAPPED) {
AN(prev); if (unmap(rdr, prev) != 0) {
errno = 0;
if (munmap(prev, rdr->info->len) != 0) {
VERRMSG(rdr, errbuf, "%s.%s: unmap failed: %s", VERRMSG(rdr, errbuf, "%s.%s: unmap failed: %s",
rdr->vcl_name, rdr->obj_name, rdr->vcl_name, rdr->obj_name,
VAS_errtxt(errno)); VAS_errtxt(errno));
VSL(SLT_Error, NO_VXID, "%s", errbuf);
flags |= RDR_ERROR; flags |= RDR_ERROR;
} }
} }
...@@ -544,18 +559,8 @@ vmod_reader__fini(struct VPFX(file_reader) **rdrp) ...@@ -544,18 +559,8 @@ vmod_reader__fini(struct VPFX(file_reader) **rdrp)
rdr->obj_name, VAS_errtxt(errno)); rdr->obj_name, VAS_errtxt(errno));
} }
if (rdr->flags & RDR_MAPPED) { if (rdr->flags & RDR_MAPPED)
CHECK_OBJ_NOTNULL(rdr->info, FILE_INFO_MAGIC); (void)unmap(rdr, rdr->addr);
AN(rdr->addr);
AN(rdr->obj_name);
AN(rdr->vcl_name);
errno = 0;
if (munmap(rdr->addr, rdr->info->len) != 0)
VSL(SLT_Error, NO_VXID, "vmod file %s.%s finalization: "
"unmap failed: %s", rdr->vcl_name, rdr->obj_name,
VAS_errtxt(errno));
}
if (rdr->info != NULL) { if (rdr->info != NULL) {
CHECK_OBJ(rdr->info, FILE_INFO_MAGIC); CHECK_OBJ(rdr->info, FILE_INFO_MAGIC);
...@@ -951,16 +956,8 @@ VPFX(event)(VRT_CTX, struct vmod_priv *priv, enum vcl_event_e e) ...@@ -951,16 +956,8 @@ VPFX(event)(VRT_CTX, struct vmod_priv *priv, enum vcl_event_e e)
if ((rdr->flags & RDR_MAPPED) == 0) if ((rdr->flags & RDR_MAPPED) == 0)
continue; continue;
CHECK_OBJ_NOTNULL(rdr->info, FILE_INFO_MAGIC); if (unmap(rdr, rdr->addr) != 0)
AN(rdr->addr);
errno = 0;
if (munmap(rdr->addr, rdr->info->len) != 0) {
VSL(SLT_Error, NO_VXID,
"vmod file: %s.%s: unmap failed: %s",
rdr->vcl_name, rdr->obj_name,
VAS_errtxt(errno));
continue; continue;
}
rdr->flags &= ~RDR_MAPPED; rdr->flags &= ~RDR_MAPPED;
rdr->addr = NULL; rdr->addr = NULL;
VSL(SLT_Debug, NO_VXID, "vmod file: %s.%s: unmapped", VSL(SLT_Debug, NO_VXID, "vmod file: %s.%s: unmapped",
......
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