Fixed Windows build

Project: http://git-wip-us.apache.org/repos/asf/logging-log4cxx/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4cxx/commit/21f4e3d9
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4cxx/tree/21f4e3d9
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4cxx/diff/21f4e3d9

Branch: refs/heads/master
Commit: 21f4e3d9d82995f434e6c2cd760df794d8e0bf70
Parents: 6c4d912
Author: Denys Smolianiuk <[email protected]>
Authored: Wed Aug 22 17:25:40 2018 +0300
Committer: Denys Smolianiuk <[email protected]>
Committed: Wed Aug 22 17:25:40 2018 +0300

----------------------------------------------------------------------
 src/main/cpp/asyncappender.cpp |  8 ++---
 src/main/cpp/mutex.cpp         | 71 +++++++++++++++++++++++++++++++++++++
 2 files changed, 75 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/logging-log4cxx/blob/21f4e3d9/src/main/cpp/asyncappender.cpp
----------------------------------------------------------------------
diff --git a/src/main/cpp/asyncappender.cpp b/src/main/cpp/asyncappender.cpp
index b7a4292..0484136 100644
--- a/src/main/cpp/asyncappender.cpp
+++ b/src/main/cpp/asyncappender.cpp
@@ -325,12 +325,12 @@ LoggingEventPtr 
AsyncAppender::DiscardSummary::createEvent(Pool& p) {
 AsyncAppender::DiscardSummary::createEvent(::log4cxx::helpers::Pool& p,
                                            unsigned discardedCount)
 {
-    char msg[128];
-
-    snprintf(msg, 128, LOG4CXX_STR("Discarded %u messages due to a full event 
buffer."), discardedCount);
+       LogString msg(LOG4CXX_STR("Discarded "));
+       StringHelper::toString(discardedCount, p, msg);
+       msg.append(LOG4CXX_STR(" messages due to a full event buffer"));
 
     return new LoggingEvent(
-              "",
+                     LOG4CXX_STR(""),
               log4cxx::Level::getError(),
               msg,
               LocationInfo::getLocationUnavailable());

http://git-wip-us.apache.org/repos/asf/logging-log4cxx/blob/21f4e3d9/src/main/cpp/mutex.cpp
----------------------------------------------------------------------
diff --git a/src/main/cpp/mutex.cpp b/src/main/cpp/mutex.cpp
index 2a1f79d..b57595d 100755
--- a/src/main/cpp/mutex.cpp
+++ b/src/main/cpp/mutex.cpp
@@ -27,7 +27,12 @@
 #endif
 #include <log4cxx/helpers/aprinitializer.h>
 
+#if defined(WIN32) || defined(_WIN32) || defined(_WIN64)
+#include <windows.h>
+#else
+// POSIX
 #include <semaphore.h>
+#endif
 
 using namespace log4cxx::helpers;
 using namespace log4cxx;
@@ -148,7 +153,72 @@ void RWMutex::wrUnlock() const
 }
 
 
+#if defined(WIN32) || defined(_WIN32) || defined(_WIN64)
+
+namespace log4cxx {
+       namespace helpers {
+               struct SemaphoreImpl
+               {
+                       HANDLE semaphore;
+               };
+       }
+}
+
+static const LONG cMax = 10;
+
+Semaphore::Semaphore(log4cxx::helpers::Pool& p)
+       : impl(nullptr)
+{
+#if APR_HAS_THREADS
+       impl = (SemaphoreImpl*)p.palloc(sizeof(SemaphoreImpl));
+       if (nullptr == impl) {
+               throw MutexException(APR_ENOMEM);
+       }
+
+       impl->semaphore = CreateSemaphore(
+               NULL,  // default security attributes
+               0,     // initial count
+               cMax,  // maximum count
+               NULL); // unnamed semaphore
 
+       if (impl->semaphore == NULL) {
+               throw MutexException(APR_ENOSHMAVAIL);
+       }
+#endif
+}
+
+Semaphore::~Semaphore()
+{
+#if APR_HAS_THREADS
+       if (impl && impl->semaphore)
+       {
+               CloseHandle(impl->semaphore);
+       }
+#endif
+}
+
+void Semaphore::await() const
+{
+#if APR_HAS_THREADS
+       DWORD dwWaitResult = WaitForSingleObject(impl->semaphore, INFINITE);
+       if (stat != 0) {
+               throw MutexException(1);
+       }
+#endif
+}
+
+void Semaphore::signalAll() const
+{
+#if APR_HAS_THREADS
+       BOOL stat = ReleaseSemaphore(impl->semaphore, 1, NULL);
+       if (!stat) {
+               throw MutexException(stat);
+       }
+#endif
+}
+
+#else
+// POSIX
 
 namespace log4cxx {
     namespace helpers {
@@ -205,3 +275,4 @@ void Semaphore::signalAll() const
 #endif
 }
 
+#endif

Reply via email to