X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/2450225e87fa312300e72e82d14b1ca76c0b9d87..96bffa128845e1ee806f53abd2942b4b16a51eea:/src/unix/threadpsx.cpp diff --git a/src/unix/threadpsx.cpp b/src/unix/threadpsx.cpp index 142268d1b0..031ade47b5 100644 --- a/src/unix/threadpsx.cpp +++ b/src/unix/threadpsx.cpp @@ -45,6 +45,7 @@ #include #include #include +#include // needed for at least __QNX__ #ifdef HAVE_SCHED_H #include #endif @@ -56,16 +57,11 @@ // we use wxFFile under Linux in GetCPUCount() #ifdef __LINUX__ #include "wx/ffile.h" - // For setpriority. - #include - #include + #include // for setpriority() #endif -#ifdef __VMS - #define THR_ID(thr) ((long long)(thr)->GetId()) -#else - #define THR_ID(thr) ((long)(thr)->GetId()) -#endif +#define THR_ID_CAST(id) (reinterpret_cast(id)) +#define THR_ID(thr) THR_ID_CAST((thr)->GetId()) // ---------------------------------------------------------------------------- // constants @@ -594,14 +590,14 @@ wxSemaError wxSemaphoreInternal::Wait() { wxLogTrace(TRACE_SEMA, wxT("Thread %p waiting for semaphore to become signalled"), - wxThread::GetCurrentId()); + THR_ID_CAST(wxThread::GetCurrentId())); if ( m_cond.Wait() != wxCOND_NO_ERROR ) return wxSEMA_MISC_ERROR; wxLogTrace(TRACE_SEMA, wxT("Thread %p finished waiting for semaphore, count = %lu"), - wxThread::GetCurrentId(), (unsigned long)m_count); + THR_ID_CAST(wxThread::GetCurrentId()), (unsigned long)m_count); } m_count--; @@ -668,7 +664,7 @@ wxSemaError wxSemaphoreInternal::Post() wxLogTrace(TRACE_SEMA, wxT("Thread %p about to signal semaphore, count = %lu"), - wxThread::GetCurrentId(), (unsigned long)m_count); + THR_ID_CAST(wxThread::GetCurrentId()), (unsigned long)m_count); return m_cond.Signal() == wxCOND_NO_ERROR ? wxSEMA_NO_ERROR : wxSEMA_MISC_ERROR; @@ -734,7 +730,7 @@ public: }; wxLogTrace(TRACE_THREADS, wxT("Thread %p: %s => %s."), - GetId(), stateNames[m_state], stateNames[state]); + THR_ID(this), stateNames[m_state], stateNames[state]); #endif // wxUSE_LOG_TRACE m_state = state; @@ -1393,7 +1389,7 @@ wxThreadError wxThread::Resume() { case STATE_PAUSED: wxLogTrace(TRACE_THREADS, wxT("Thread %p suspended, resuming."), - GetId()); + THR_ID(this)); m_internal->Resume(); @@ -1401,7 +1397,7 @@ wxThreadError wxThread::Resume() case STATE_EXITED: wxLogTrace(TRACE_THREADS, wxT("Thread %p exited, won't resume."), - GetId()); + THR_ID(this)); return wxTHREAD_NO_ERROR; default: @@ -1477,6 +1473,11 @@ wxThreadError wxThread::Delete(ExitCode *rc) } //else: can't wait for detached threads } + + if (state == STATE_NEW) + return wxTHREAD_MISC_ERROR; + // for coherency with the MSW implementation, signal the user that + // Delete() was called on a thread which didn't start to run yet. return wxTHREAD_NO_ERROR; } @@ -1617,8 +1618,8 @@ wxThread::~wxThread() if ( m_internal->GetState() != STATE_EXITED && m_internal->GetState() != STATE_NEW ) { - wxLogDebug(wxT("The thread %ld is being destroyed although it is still running! The application may crash."), - (long)GetId()); + wxLogDebug(wxT("The thread %p is being destroyed although it is still running! The application may crash."), + THR_ID(this)); } m_critsect.Leave(); @@ -1778,7 +1779,7 @@ static void ScheduleThreadForDeletion() static void DeleteThread(wxThread *This) { - wxLogTrace(TRACE_THREADS, wxT("Thread %p auto deletes."), This->GetId()); + wxLogTrace(TRACE_THREADS, wxT("Thread %p auto deletes."), THR_ID(This)); delete This;