From e1dc22704f4b0157ea35f48433ab200cac4e6b56 Mon Sep 17 00:00:00 2001
From: Rye Mutt <rye@alchemyviewer.org>
Date: Sun, 2 Apr 2023 21:44:30 -0400
Subject: [PATCH] =?UTF-8?q?=F0=9F=90=9B=20Fix=20build=20circularity=20bug?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 indra/llcorehttp/_httpoprequest.cpp    | 4 ++--
 indra/llcorehttp/_httpoprequest.h      | 3 +++
 indra/llcorehttp/_httprequestqueue.cpp | 4 ++--
 indra/llcorehttp/_httprequestqueue.h   | 3 +++
 indra/llmessage/llmessagelog.cpp       | 9 +++++++++
 5 files changed, 19 insertions(+), 4 deletions(-)

diff --git a/indra/llcorehttp/_httpoprequest.cpp b/indra/llcorehttp/_httpoprequest.cpp
index 0f21401ce21..46a16968c95 100644
--- a/indra/llcorehttp/_httpoprequest.cpp
+++ b/indra/llcorehttp/_httpoprequest.cpp
@@ -46,7 +46,6 @@
 
 #include "llhttpconstants.h"
 #include "llproxy.h"
-#include "llmessagelog.h"
 #include "httpstats.h"
 
 // *DEBUG:  "[curl:bugs] #1420" problem and testing.
@@ -125,6 +124,7 @@ static const char * const LOG_CORE("CoreHttp");
 namespace LLCore
 {
 
+std::function<void(LLCore::HttpResponse* response)> HttpOpRequest::sMessageLogFunc = nullptr;
 
 HttpOpRequest::HttpOpRequest()
 	: HttpOperation(),
@@ -280,7 +280,7 @@ void HttpOpRequest::visitNotifier(HttpRequest * request)
 		response->setTransferStats(stats);
 
 		mUserHandler->onCompleted(this->getHandle(), response);
-		if (LLMessageLog::haveLogger())  LLMessageLog::log(response);
+		if (sMessageLogFunc != nullptr) sMessageLogFunc(response);
 		response->release();
 	}
 }
diff --git a/indra/llcorehttp/_httpoprequest.h b/indra/llcorehttp/_httpoprequest.h
index 5d7205ccfa4..fc35c25b4e2 100644
--- a/indra/llcorehttp/_httpoprequest.h
+++ b/indra/llcorehttp/_httpoprequest.h
@@ -236,6 +236,9 @@ class HttpOpRequest final : public HttpOperation
 	HttpTime			mPolicyMinRetryBackoff; // initial delay between retries (mcs)
 	HttpTime			mPolicyMaxRetryBackoff;
 	U64				mRequestId;
+
+	static void setMessageLogFunc(std::function<void(LLCore::HttpResponse* response)> func) { sMessageLogFunc = func;} 
+	static std::function<void(LLCore::HttpResponse* response)> sMessageLogFunc;
 };  // end class HttpOpRequest
 
 
diff --git a/indra/llcorehttp/_httprequestqueue.cpp b/indra/llcorehttp/_httprequestqueue.cpp
index 86670befae6..71e49ff0e7a 100644
--- a/indra/llcorehttp/_httprequestqueue.cpp
+++ b/indra/llcorehttp/_httprequestqueue.cpp
@@ -28,7 +28,6 @@
 
 #include "_httpoperation.h"
 #include "_mutex.h"
-#include "llmessagelog.h"
 
 
 using namespace LLCoreInt;
@@ -37,6 +36,7 @@ namespace LLCore
 {
 
 HttpRequestQueue * HttpRequestQueue::sInstance(NULL);
+std::function<void(const HttpRequestQueue::opPtr_t &)> HttpRequestQueue::sMessageLogFunc = nullptr;
 
 
 HttpRequestQueue::HttpRequestQueue()
@@ -80,7 +80,7 @@ HttpStatus HttpRequestQueue::addOp(const HttpRequestQueue::opPtr_t &op, bool log
 			// Return op and error to caller
 			return HttpStatus(HttpStatus::LLCORE, HE_SHUTTING_DOWN);
 		}
-        if (loggable && LLMessageLog::haveLogger()) { LLMessageLog::log(op); }
+        if (loggable && sMessageLogFunc != nullptr ) { sMessageLogFunc(op); }
 		wake = mQueue.empty();
 		mQueue.push_back(op);
 	}
diff --git a/indra/llcorehttp/_httprequestqueue.h b/indra/llcorehttp/_httprequestqueue.h
index 99baba9e30f..e8e506e4c17 100644
--- a/indra/llcorehttp/_httprequestqueue.h
+++ b/indra/llcorehttp/_httprequestqueue.h
@@ -126,8 +126,11 @@ class HttpRequestQueue final : public LLCoreInt::RefCounted
 	/// Threading:  callable by any thread.
 	bool stopQueue();
 	
+	static void setMessageLogFunc(std::function<void(const HttpRequestQueue::opPtr_t &)> func) { sMessageLogFunc = func;} 
+
 protected:
 	static HttpRequestQueue *			sInstance;
+	static std::function<void(const HttpRequestQueue::opPtr_t &)> sMessageLogFunc;
 	
 protected:
 	OpContainer							mQueue;
diff --git a/indra/llmessage/llmessagelog.cpp b/indra/llmessage/llmessagelog.cpp
index 196232c78a6..0e155215b83 100644
--- a/indra/llmessage/llmessagelog.cpp
+++ b/indra/llmessage/llmessagelog.cpp
@@ -25,6 +25,7 @@
 #include <boost/circular_buffer.hpp>
 #include <utility>
 #include "_httpoprequest.h"
+#include "_httprequestqueue.h"
 
 static boost::circular_buffer<LogPayload> sRingBuffer = boost::circular_buffer<LogPayload>(2048);
 
@@ -102,7 +103,15 @@ void LLMessageLog::setCallback(LogCallback callback)
 		{
 			callback(m);
 		}
+		LLCore::HttpRequestQueue::setMessageLogFunc([](const LLCore::HttpRequestQueue::opPtr_t& op) { LLMessageLog::log(op); });
+		LLCore::HttpOpRequest::setMessageLogFunc([](LLCore::HttpResponse* response) { LLMessageLog::log(response); });
 	}
+	else
+	{
+		LLCore::HttpOpRequest::setMessageLogFunc(nullptr);
+		LLCore::HttpRequestQueue::setMessageLogFunc(nullptr);
+	}
+
 	sCallback = callback;
 }
 
-- 
GitLab