Merge branch 'release-2.140.90'
[feisty_meow.git] / nucleus / library / processes / ethread.cpp
index 84e15498fec69c221b3df70b5bb513ad92d20cba..33f0a90b03e9f4c1fd4a8680798fce348d899962 100644 (file)
@@ -23,9 +23,9 @@
 #include <structures/static_memory_gremlin.h>
 #include <timely/time_control.h>
 
-#ifdef __WIN32__
+#ifdef _MSC_VER
   #include <process.h>
-#elif defined(__UNIX__)
+#elif defined(__UNIX__) || defined(__GNU_WINDOWS__)
   #include <pthread.h>
 #else
   #error unknown OS for thread support.
@@ -88,11 +88,11 @@ ethread::ethread()
 : _thread_ready(false),
   _thread_active(false),
   _stop_thread(false),
-  _data(NIL),
-#ifdef __UNIX__
-  _handle(new pthread_t),
-#elif defined(__WIN32__)
+  _data(NULL_POINTER),
+#ifdef _MSC_VER
   _handle(0),
+#else
+  _handle(new pthread_t),
 #endif
   _sleep_time(0),
   _periodic(false),
@@ -106,11 +106,11 @@ ethread::ethread(int sleep_timer, timed_thread_types how)
 : _thread_ready(false),
   _thread_active(false),
   _stop_thread(false),
-  _data(NIL),
-#ifdef __UNIX__
-  _handle(new pthread_t),
-#elif defined(__WIN32__)
+  _data(NULL_POINTER),
+#ifdef _MSC_VER
   _handle(0),
+#else
+  _handle(new pthread_t),
 #endif
   _sleep_time(sleep_timer),
   _periodic(true),
@@ -127,7 +127,7 @@ ethread::~ethread()
 {
   stop();
   WHACK(_next_activation);
-#ifdef __UNIX__
+#ifndef _MSC_VER
   WHACK(_handle);
 #endif
 }
@@ -155,7 +155,7 @@ bool ethread::start(void *thread_data)
   int error = 0;
   int attempts = 0;
   while (attempts++ < MAXIMUM_CREATE_ATTEMPTS) {
-#ifdef __UNIX__
+#ifndef _MSC_VER
     pthread_attr_t attribs;  // special flags for creation of thread.
     int aret = pthread_attr_init(&attribs);
     if (aret) LOG("failed to init attribs.");
@@ -170,7 +170,7 @@ bool ethread::start(void *thread_data)
           (void *)this);
     if (!ret) success = true;
     else error = ret;
-#elif defined(__WIN32__)
+#else
     if (_periodic)
       _handle = _beginthread(periodic_thread_driver, 0, (void *)this);
     else
@@ -197,7 +197,7 @@ void ethread::stop()
   cancel();  // tell thread to leave.
   if (!thread_started()) return;  // not running.
   while (!thread_finished()) {
-#ifdef __WIN32__
+#ifdef _MSC_VER
     int result = 0;
     if (!GetExitCodeThread((HANDLE)_handle, (LPDWORD)&result)
         || (result != STILL_ACTIVE)) {
@@ -213,14 +213,14 @@ void ethread::exempt_stop()
 {
   _thread_active = false;
   _thread_ready = false;
-#ifdef __WIN32__
+#ifdef _MSC_VER
   _handle = 0;
 #endif
 }
 
-#ifdef __UNIX__
+#if defined(__UNIX__) || defined(__GNU_WINDOWS__)
 void *ethread::one_shot_thread_driver(void *hidden_pointer)
-#elif defined(__WIN32__)
+#elif defined(_MSC_VER)
 void ethread::one_shot_thread_driver(void *hidden_pointer)
 #else
 #error unknown thread signature.
@@ -228,8 +228,8 @@ void ethread::one_shot_thread_driver(void *hidden_pointer)
 {
   FUNCDEF("one_shot_thread_driver");
   ethread *manager = (ethread *)hidden_pointer;
-#ifdef __UNIX__
-  if (!manager) return NIL;
+#ifndef _MSC_VER
+  if (!manager) return NULL_POINTER;
 #else
   if (!manager) return;
 #endif
@@ -244,17 +244,17 @@ void ethread::one_shot_thread_driver(void *hidden_pointer)
 #ifdef COUNT_THREADS
   _current_threads().decrement();
 #endif
-#ifdef __UNIX__
-  pthread_exit(NIL);
-  return NIL;
+#ifndef _MSC_VER
+  pthread_exit(NULL_POINTER);
+  return NULL_POINTER;
 #else
   _endthread();
 #endif
 }
 
-#ifdef __UNIX__
+#if defined(__UNIX__) || defined(__GNU_WINDOWS__)
 void *ethread::periodic_thread_driver(void *hidden_pointer)
-#elif defined(__WIN32__)
+#elif defined(_MSC_VER)
 void ethread::periodic_thread_driver(void *hidden_pointer)
 #else
 #error unknown thread signature.
@@ -262,9 +262,9 @@ void ethread::periodic_thread_driver(void *hidden_pointer)
 {
   FUNCDEF("periodic_thread_driver");
   ethread *manager = (ethread *)hidden_pointer;
-#ifdef __UNIX__
-  if (!manager) return NIL;
-#elif defined(__WIN32__)
+#if defined(__UNIX__) || defined(__GNU_WINDOWS__)
+  if (!manager) return NULL_POINTER;
+#elif defined(_MSC_VER)
   if (!manager) return;
 #endif
 #ifdef COUNT_THREADS
@@ -316,10 +316,10 @@ void ethread::periodic_thread_driver(void *hidden_pointer)
 #ifdef COUNT_THREADS
   _current_threads().decrement();
 #endif
-#ifdef __UNIX__
-  pthread_exit(NIL);
-  return NIL;
-#elif defined(__WIN32__)
+#ifndef _MSC_VER
+  pthread_exit(NULL_POINTER);
+  return NULL_POINTER;
+#else
   _endthread();
 #endif
 }