]> git.saurik.com Git - wxWidgets.git/blobdiff - src/gtk/threadsgi.cpp
another segfault fix
[wxWidgets.git] / src / gtk / threadsgi.cpp
index 66b6b0da7b21b0a62ce8403fb5390eaa7c9c5947..217f67d7d96d2f7abe40076e1ea24ae509b9fc6d 100644 (file)
 #include "wx/thread.h"
 #include "wx/module.h"
 #include "wx/utils.h"
 #include "wx/thread.h"
 #include "wx/module.h"
 #include "wx/utils.h"
+#include "wx/log.h"
 
 
-enum thread_state {
+#include "gdk/gdk.h"
+#include "gtk/gtk.h"
+
+enum thread_state 
+{
   STATE_IDLE = 0,
   STATE_RUNNING,
   STATE_CANCELED,
   STATE_IDLE = 0,
   STATE_RUNNING,
   STATE_CANCELED,
@@ -57,8 +62,7 @@ wxMutex::wxMutex()
 wxMutex::~wxMutex()
 {
   if (m_locked > 0)
 wxMutex::~wxMutex()
 {
   if (m_locked > 0)
-    wxDebugMsg("wxMutex warning: freeing a locked mutex (%d locks)\n",
-               m_locked);
+    wxLogDebug( "wxMutex warning: freeing a locked mutex (%d locks)\n", m_locked );
   delete p_internal;
 }
 
   delete p_internal;
 }
 
@@ -66,24 +70,24 @@ wxMutexError wxMutex::Lock()
 {
   spin_lock(&(p_internal->p_mutex));
   m_locked++;
 {
   spin_lock(&(p_internal->p_mutex));
   m_locked++;
-  return MUTEX_NO_ERROR;
+  return wxMUTEX_NO_ERROR;
 }
 
 wxMutexError wxMutex::TryLock()
 {
   if (acquire_lock(&(p_internal->p_mutex)) != 0)
 }
 
 wxMutexError wxMutex::TryLock()
 {
   if (acquire_lock(&(p_internal->p_mutex)) != 0)
-    return MUTEX_BUSY;
+    return wxMUTEX_BUSY;
   m_locked++;
   m_locked++;
-  return MUTEX_NO_ERROR;
+  return wxMUTEX_NO_ERROR;
 }
 
 wxMutexError wxMutex::Unlock()
 {
   if (m_locked == 0)
 }
 
 wxMutexError wxMutex::Unlock()
 {
   if (m_locked == 0)
-    return MUTEX_UNLOCKED; 
+    return wxMUTEX_UNLOCKED; 
   release_lock(&(p_internal->p_mutex));
   m_locked--;
   release_lock(&(p_internal->p_mutex));
   m_locked--;
-  return MUTEX_NO_ERROR;
+  return wxMUTEX_NO_ERROR;
 }
 
 // GL: Don't know how it works on SGI. Wolfram ?
 }
 
 // GL: Don't know how it works on SGI. Wolfram ?
@@ -132,13 +136,13 @@ void wxThread::Exit(void* status)
 wxThreadError wxThread::Create()
 {
   if (p_internal->state != STATE_IDLE)
 wxThreadError wxThread::Create()
 {
   if (p_internal->state != STATE_IDLE)
-    return THREAD_RUNNING;
+    return wxTHREAD_RUNNING;
   p_internal->state = STATE_RUNNING;
   if (sproc(p_internal->SprocStart, PR_SALL, this) < 0) {
     p_internal->state = STATE_IDLE;
   p_internal->state = STATE_RUNNING;
   if (sproc(p_internal->SprocStart, PR_SALL, this) < 0) {
     p_internal->state = STATE_IDLE;
-    return THREAD_NO_RESOURCE;
+    return wxTHREAD_NO_RESOURCE;
   }
   }
-  return THREAD_NO_ERROR;
+  return wxTHREAD_NO_ERROR;
 }
 
 wxThreadError wxThread::Destroy()
 }
 
 wxThreadError wxThread::Destroy()
@@ -146,17 +150,17 @@ wxThreadError wxThread::Destroy()
   if (p_internal->state == STATE_RUNNING)
     p_internal->state = STATE_CANCELED;
 
   if (p_internal->state == STATE_RUNNING)
     p_internal->state = STATE_CANCELED;
 
-  return THREAD_NO_ERROR;
+  return wxTHREAD_NO_ERROR;
 }
 
 wxThreadError wxThread::Pause()
 {
 }
 
 wxThreadError wxThread::Pause()
 {
-  return THREAD_NO_ERROR;
+  return wxTHREAD_NO_ERROR;
 }
 
 wxThreadError wxThread::Resume()
 {
 }
 
 wxThreadError wxThread::Resume()
 {
-  return THREAD_NO_ERROR;
+  return wxTHREAD_NO_ERROR;
 }
 
 void *wxThread::Join()
 }
 
 void *wxThread::Join()
@@ -234,21 +238,32 @@ void wxThread::OnExit()
 }
 
 // Global initialization
 }
 
 // Global initialization
-class wxThreadModule : public wxModule {
-  DECLARE_DYNAMIC_CLASS(wxThreadModule)
+
+class wxThreadModule : public wxModule
+{
 public:
 public:
-  virtual bool OnInit() {
+    virtual bool OnInit();
+    virtual void OnExit();
+
+private:
+    DECLARE_DYNAMIC_CLASS(wxThreadModule)
+};
+
+IMPLEMENT_DYNAMIC_CLASS(wxThreadModule, wxModule)
+
+bool wxThreadModule::OnInit() 
+{
     wxMainMutex = new wxMutex();
     wxThreadGuiInit();
     p_mainid = (int)getpid();
     wxMainMutex->Lock();
     wxMainMutex = new wxMutex();
     wxThreadGuiInit();
     p_mainid = (int)getpid();
     wxMainMutex->Lock();
-  }
+    return TRUE;
+}
 
 
-  virtual void OnExit() {
+void wxThreadModule::OnExit()
+{
     wxMainMutex->Unlock();
     wxThreadGuiExit();
     delete wxMainMutex;
     wxMainMutex->Unlock();
     wxThreadGuiExit();
     delete wxMainMutex;
-  }
-};
+}
 
 
-IMPLEMENT_DYNAMIC_CLASS(wxThreadModule, wxModule)