Revert "Revert "Upgrade to 2.1.8-stable (2017-01-22)." and "Probably Mac build fix?""

This reverts commit 83a0c9c65a60a92d3ea5542596b3ba56db492c37.

Bug: 64543673
Test: make checkbuild
Test: Manual tombstoned test
Change-Id: I84bb128d1dec433195f2cbdbf70236ba17fa9955
diff --git a/log.c b/log.c
index 046e81f..e8ae9fd 100644
--- a/log.c
+++ b/log.c
@@ -38,8 +38,9 @@
  */
 
 #include "event2/event-config.h"
+#include "evconfig-private.h"
 
-#ifdef WIN32
+#ifdef _WIN32
 #include <winsock2.h>
 #define WIN32_LEAN_AND_MEAN
 #include <windows.h>
@@ -56,13 +57,38 @@
 
 #include "log-internal.h"
 
-static void _warn_helper(int severity, const char *errstr, const char *fmt,
-    va_list ap);
 static void event_log(int severity, const char *msg);
 static void event_exit(int errcode) EV_NORETURN;
 
 static event_fatal_cb fatal_fn = NULL;
 
+#ifdef EVENT_DEBUG_LOGGING_ENABLED
+#ifdef USE_DEBUG
+#define DEFAULT_MASK EVENT_DBG_ALL
+#else
+#define DEFAULT_MASK 0
+#endif
+
+#ifdef USE_GLOBAL_FOR_DEBUG_LOGGING
+ev_uint32_t event_debug_logging_mask_ = DEFAULT_MASK;
+#else
+static ev_uint32_t event_debug_logging_mask_ = DEFAULT_MASK;
+ev_uint32_t
+event_debug_get_logging_mask_(void)
+{
+	return event_debug_logging_mask_;
+}
+#endif
+#endif /* EVENT_DEBUG_LOGGING_ENABLED */
+
+void
+event_enable_debug_logging(ev_uint32_t which)
+{
+#ifdef EVENT_DEBUG_LOGGING_ENABLED
+	event_debug_logging_mask_ = which;
+#endif
+}
+
 void
 event_set_fatal_callback(event_fatal_cb cb)
 {
@@ -75,7 +101,7 @@
 	if (fatal_fn) {
 		fatal_fn(errcode);
 		exit(errcode); /* should never be reached */
-	} else if (errcode == _EVENT_ERR_ABORT)
+	} else if (errcode == EVENT_ERR_ABORT_)
 		abort();
 	else
 		exit(errcode);
@@ -87,7 +113,7 @@
 	va_list ap;
 
 	va_start(ap, fmt);
-	_warn_helper(_EVENT_LOG_ERR, strerror(errno), fmt, ap);
+	event_logv_(EVENT_LOG_ERR, strerror(errno), fmt, ap);
 	va_end(ap);
 	event_exit(eval);
 }
@@ -98,7 +124,7 @@
 	va_list ap;
 
 	va_start(ap, fmt);
-	_warn_helper(_EVENT_LOG_WARN, strerror(errno), fmt, ap);
+	event_logv_(EVENT_LOG_WARN, strerror(errno), fmt, ap);
 	va_end(ap);
 }
 
@@ -109,7 +135,7 @@
 	int err = evutil_socket_geterror(sock);
 
 	va_start(ap, fmt);
-	_warn_helper(_EVENT_LOG_ERR, evutil_socket_error_to_string(err), fmt, ap);
+	event_logv_(EVENT_LOG_ERR, evutil_socket_error_to_string(err), fmt, ap);
 	va_end(ap);
 	event_exit(eval);
 }
@@ -121,7 +147,7 @@
 	int err = evutil_socket_geterror(sock);
 
 	va_start(ap, fmt);
-	_warn_helper(_EVENT_LOG_WARN, evutil_socket_error_to_string(err), fmt, ap);
+	event_logv_(EVENT_LOG_WARN, evutil_socket_error_to_string(err), fmt, ap);
 	va_end(ap);
 }
 
@@ -131,7 +157,7 @@
 	va_list ap;
 
 	va_start(ap, fmt);
-	_warn_helper(_EVENT_LOG_ERR, NULL, fmt, ap);
+	event_logv_(EVENT_LOG_ERR, NULL, fmt, ap);
 	va_end(ap);
 	event_exit(eval);
 }
@@ -142,7 +168,7 @@
 	va_list ap;
 
 	va_start(ap, fmt);
-	_warn_helper(_EVENT_LOG_WARN, NULL, fmt, ap);
+	event_logv_(EVENT_LOG_WARN, NULL, fmt, ap);
 	va_end(ap);
 }
 
@@ -152,26 +178,29 @@
 	va_list ap;
 
 	va_start(ap, fmt);
-	_warn_helper(_EVENT_LOG_MSG, NULL, fmt, ap);
+	event_logv_(EVENT_LOG_MSG, NULL, fmt, ap);
 	va_end(ap);
 }
 
 void
-_event_debugx(const char *fmt, ...)
+event_debugx_(const char *fmt, ...)
 {
 	va_list ap;
 
 	va_start(ap, fmt);
-	_warn_helper(_EVENT_LOG_DEBUG, NULL, fmt, ap);
+	event_logv_(EVENT_LOG_DEBUG, NULL, fmt, ap);
 	va_end(ap);
 }
 
-static void
-_warn_helper(int severity, const char *errstr, const char *fmt, va_list ap)
+void
+event_logv_(int severity, const char *errstr, const char *fmt, va_list ap)
 {
 	char buf[1024];
 	size_t len;
 
+	if (severity == EVENT_LOG_DEBUG && !event_debug_get_logging_mask_())
+		return;
+
 	if (fmt != NULL)
 		evutil_vsnprintf(buf, sizeof(buf), fmt, ap);
 	else
@@ -203,16 +232,16 @@
 	else {
 		const char *severity_str;
 		switch (severity) {
-		case _EVENT_LOG_DEBUG:
+		case EVENT_LOG_DEBUG:
 			severity_str = "debug";
 			break;
-		case _EVENT_LOG_MSG:
+		case EVENT_LOG_MSG:
 			severity_str = "msg";
 			break;
-		case _EVENT_LOG_WARN:
+		case EVENT_LOG_WARN:
 			severity_str = "warn";
 			break;
-		case _EVENT_LOG_ERR:
+		case EVENT_LOG_ERR:
 			severity_str = "err";
 			break;
 		default: