shithub: mc

Download patch

ref: c7e6d109bcd7e0d0b33c5e134c83e3efe9154ef9
parent: 28cea7b851f71fe07e4491dc8ec6eeee2e1c8011
author: Ori Bernstein <ori@eigenstate.org>
date: Thu Nov 30 19:29:12 EST 2017

Lazily initialize the resolver.

	It turns out to make a decent difference to code size.

--- a/lib/std/resolve+posixy.myr
+++ b/lib/std/resolve+posixy.myr
@@ -66,18 +66,12 @@
 const Resolvfile = "/etc/resolv.conf"
 const Timeout = 2_000
 
+var initdone	: bool = false
 var hostmap	: htab(byte[:], hostinfo)#
 var dnscache	: htab(byte[:], hostinfo)#
 var search	: byte[:][:]
 var nameservers	: netaddr[:]
 
-const __init__ = {
-	hostmap = mkht()
-	dnscache = mkht()
-	loadhosts()
-	loadresolv()
-}
-
 const resolve = {host
 	/*TODO: v4 and v6 */
 	-> resolverec(host, `DnsA)
@@ -88,6 +82,17 @@
 }
 
 const resolverec = {host, t
+	if !initdone /*  avoid extra contention */
+		lock(netlck)
+		if !initdone
+			hostmap = mkht()
+			dnscache = mkht()
+			loadhosts()
+			loadresolv()
+		;;
+		unlock(netlck)
+	;;
+
 	match hostfind(host)
 	| `Some hinf:
 		-> `Ok sldup([hinf][:])