summaryrefslogtreecommitdiff
path: root/libs
diff options
context:
space:
mode:
authorJohn Emmas <johne53@tiscali.co.uk>2014-05-06 09:31:11 +0100
committerJohn Emmas <johne53@tiscali.co.uk>2014-05-06 09:31:11 +0100
commit8d0ec2403f3444e3a53d16b21f2f8557abd71b55 (patch)
tree2f3ce1c6b4e51c250d1dbb85a7fe47a7a22c6bf1 /libs
parent1a1a05fa1c43711cc9c201285df0dac7f68035da (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.cpp14
-rw-r--r--libs/backends/wavesaudio/wavesapi/miscutils/pthread_utils.h38
-rw-r--r--libs/pbd/MSVCpbd/pbd.vcproj4
-rw-r--r--libs/pbd/pbd/pthread_utils.h15
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