diff options
author | John Emmas <johne53@tiscali.co.uk> | 2014-05-06 09:31:11 +0100 |
---|---|---|
committer | John Emmas <johne53@tiscali.co.uk> | 2014-05-06 09:31:11 +0100 |
commit | 8d0ec2403f3444e3a53d16b21f2f8557abd71b55 (patch) | |
tree | 2f3ce1c6b4e51c250d1dbb85a7fe47a7a22c6bf1 /libs | |
parent | 1a1a05fa1c43711cc9c201285df0dac7f68035da (diff) |
Add a couple of pthread helper macros
(to accommodate the fact that in ptw-win32, 'pthread_t' is subtlely different from its non-Windows counterparts)
Diffstat (limited to 'libs')
-rw-r--r-- | libs/backends/wavesaudio/wavesapi/devicemanager/WCMRNativeAudio.cpp | 14 | ||||
-rw-r--r-- | libs/backends/wavesaudio/wavesapi/miscutils/pthread_utils.h | 38 | ||||
-rw-r--r-- | libs/pbd/MSVCpbd/pbd.vcproj | 4 | ||||
-rw-r--r-- | libs/pbd/pbd/pthread_utils.h | 15 |
4 files changed, 65 insertions, 6 deletions
diff --git a/libs/backends/wavesaudio/wavesapi/devicemanager/WCMRNativeAudio.cpp b/libs/backends/wavesaudio/wavesapi/devicemanager/WCMRNativeAudio.cpp index 14cb1dd124..642ea22de1 100644 --- a/libs/backends/wavesaudio/wavesapi/devicemanager/WCMRNativeAudio.cpp +++ b/libs/backends/wavesaudio/wavesapi/devicemanager/WCMRNativeAudio.cpp @@ -12,6 +12,7 @@ #endif #include "WCMRNativeAudio.h" +#include "MiscUtils/pthread_utils.h" #include "MiscUtils/safe_delete.h" #include <sstream> #include <boost/assign/list_of.hpp> @@ -33,11 +34,12 @@ //********************************************************************************************** WCMRNativeAudioNoneDevice::WCMRNativeAudioNoneDevice (WCMRAudioDeviceManager *pManager) : WCMRNativeAudioDevice (pManager, false /*useMultiThreading*/) - , m_SilenceThread(0) #if defined (PLATFORM_WINDOWS) , _waitableTimerForUsleep (CreateWaitableTimer(NULL, TRUE, NULL)) #endif { + mark_pthread_inactive (m_SilenceThread); + m_DeviceName = NONE_DEVICE_NAME; m_SamplingRates = boost::assign::list_of (m_CurrentSamplingRate=44100)(48000)(88200)(96000); @@ -136,7 +138,7 @@ WTErr WCMRNativeAudioNoneDevice::SetStreaming (bool newState) if (Streaming()) { - if (m_SilenceThread) + if (is_pthread_active (m_SilenceThread)) std::cerr << "\t\t\t\t\t !!!!!!!!!!!!!!! Warning: the inactive NONE-DEVICE was streaming!" << std::endl; pthread_attr_t attributes; @@ -155,19 +157,19 @@ WTErr WCMRNativeAudioNoneDevice::SetStreaming (bool newState) } if (pthread_create (&m_SilenceThread, &attributes, __SilenceThread, this)) { - m_SilenceThread = 0; + mark_pthread_inactive (m_SilenceThread); std::cerr << "WCMRNativeAudioNoneDevice::SetStreaming (): pthread_create () failed!" << std::endl; return eGenericErr; } } else { - if (!m_SilenceThread) + if (!is_pthread_active (m_SilenceThread)) { std::cerr << "\t\t\t\t\t !!!!!!!!!!!!!!! Warning: the active NONE-DEVICE was NOT streaming!" << std::endl; } - while (m_SilenceThread) + while (is_pthread_active (m_SilenceThread)) { _usleep(1); //now wait for ended thread; } @@ -219,7 +221,7 @@ void WCMRNativeAudioNoneDevice::_SilenceThread() } audioCallbackData.acdCycleStartTimeNanos = cycleEndTimeNanos+1; } - m_SilenceThread = 0; + mark_pthread_inactive (m_SilenceThread); } void* WCMRNativeAudioNoneDevice::__SilenceThread(void *This) diff --git a/libs/backends/wavesaudio/wavesapi/miscutils/pthread_utils.h b/libs/backends/wavesaudio/wavesapi/miscutils/pthread_utils.h new file mode 100644 index 0000000000..825405d02e --- /dev/null +++ b/libs/backends/wavesaudio/wavesapi/miscutils/pthread_utils.h @@ -0,0 +1,38 @@ +/* + Copyright (C) 2014 John Emmas + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +*/ + +#ifndef __waves_pthread_utils__ +#define __waves_pthread_utils__ + +/* Accommodate thread setting (and testing) for both + * 'libpthread' and 'libpthread_win32' (whose implementations + * of 'pthread_t' are subtlely different) + */ +#ifndef PTHREAD_MACROS_DEFINED +#define PTHREAD_MACROS_DEFINED +#ifdef PTW32_VERSION /* pthread_win32 */ +#define mark_pthread_inactive(threadID) threadID.p=0 +#define is_pthread_active(threadID) threadID.p==0 +#else /* normal pthread */ +#define mark_pthread_inactive(threadID) threadID=0 +#define is_pthread_active(threadID) threadID==0 +#endif /* PTW32_VERSION */ + +#endif /* PTHREAD_MACROS_DEFINED */ +#endif /* __waves_pthread_utils__ */ diff --git a/libs/pbd/MSVCpbd/pbd.vcproj b/libs/pbd/MSVCpbd/pbd.vcproj index 62da682c38..6c57c84239 100644 --- a/libs/pbd/MSVCpbd/pbd.vcproj +++ b/libs/pbd/MSVCpbd/pbd.vcproj @@ -724,6 +724,10 @@ > </File> <File + RelativePath="..\pbd\pthread_utils.h" + > + </File> + <File RelativePath="..\pbd\rcu.h" > </File> diff --git a/libs/pbd/pbd/pthread_utils.h b/libs/pbd/pbd/pthread_utils.h index 37ce723715..ee78819d59 100644 --- a/libs/pbd/pbd/pthread_utils.h +++ b/libs/pbd/pbd/pthread_utils.h @@ -20,6 +20,21 @@ #ifndef __pbd_pthread_utils__ #define __pbd_pthread_utils__ +/* Accommodate thread setting (and testing) for both + * 'libpthread' and 'libpthread_win32' (whose implementations + * of 'pthread_t' are subtlely different) + */ +#ifndef PTHREAD_MACROS_DEFINED +#define PTHREAD_MACROS_DEFINED +#ifdef PTW32_VERSION /* pthread_win32 */ +#define mark_pthread_inactive(threadID) threadID.p=0 +#define is_pthread_active(threadID) threadID.p==0 +#else /* normal pthread */ +#define mark_pthread_inactive(threadID) threadID=0 +#define is_pthread_active(threadID) threadID==0 +#endif /* PTW32_VERSION */ +#endif /* PTHREAD_MACROS_DEFINED */ + #ifdef COMPILER_MSVC #include <ardourext/pthread.h> #else |