void HP_Stream::PropertiesChanged(UInt32 inNumberAddresses, const AudioObjectPropertyAddress inAddresses[]) const { // note that we need to be sure that the object state mutex is not held while we call the listeners bool ownsStateMutex = false; CAMutex* theObjectStateMutex = const_cast<HP_Object*>(this)->GetObjectStateMutex(); if(theObjectStateMutex != NULL) { ownsStateMutex = theObjectStateMutex->IsOwnedByCurrentThread(); if(ownsStateMutex) { theObjectStateMutex->Unlock(); } } for(UInt32 theIndex = 0; theIndex < inNumberAddresses; ++theIndex) { OSStatus theError = AudioHardwareStreamPropertyChanged(mPlugIn->GetInterface(), mOwningDevice->GetObjectID(), mObjectID, inAddresses[theIndex].mElement, inAddresses[theIndex].mSelector); AssertNoError(theError, "HP_Stream::PropertiesChanged: got an error calling the input listeners"); } // re-lock the mutex if((theObjectStateMutex != NULL) && ownsStateMutex) { theObjectStateMutex->Lock(); } }
void HP_Object::PropertiesChanged(UInt32 inNumberAddresses, const AudioObjectPropertyAddress inAddresses[]) const { // note that we need to be sure that the object state mutex is not held while we call the listeners bool ownsStateMutex = false; CAMutex* theObjectStateMutex = const_cast<HP_Object*>(this)->GetObjectStateMutex(); if(theObjectStateMutex != NULL) { ownsStateMutex = theObjectStateMutex->IsOwnedByCurrentThread(); if(ownsStateMutex) { theObjectStateMutex->Unlock(); } } OSStatus theError = AudioObjectPropertiesChanged(mPlugIn->GetInterface(), mObjectID, inNumberAddresses, inAddresses); AssertNoError(theError, "HP_Object::PropertiesChanged: got an error calling the listeners"); // re-lock the mutex if((theObjectStateMutex != NULL) && ownsStateMutex) { theObjectStateMutex->Lock(); } }