static int init(struct audio_init *init) { int i; channel = 0; if (SndNewChannel(&channel, sampledSynth, 0, callback) != noErr) { audio_error = _("SndNewChannel() failed"); return -1; } for (i = 0; i < NBUFFERS; ++i) { if (MPCreateBinarySemaphore(&output[i].semaphore) != noErr) { while (i--) MPDeleteSemaphore(output[i].semaphore); audio_error = _("failed to create synchronization object"); return -1; } output[i].pcm_nsamples = 0; output[i].pcm_length = 0; } bindex = 0; return 0; }
OSStatus MD_CriticalRegionCreate(MDCriticalRegionID * outCriticalRegionID) { MDCriticalRegionDataPtr newCriticalRegionPtr; MPSemaphoreID mpSemaphoreID; OSStatus err = noErr; if (outCriticalRegionID == NULL) return paramErr; *outCriticalRegionID = NULL; newCriticalRegionPtr = (MDCriticalRegionDataPtr)MPAllocateAligned(sizeof(MDCriticalRegionData), kMPAllocateDefaultAligned, kMPAllocateClearMask); if (newCriticalRegionPtr == NULL) return memFullErr; // Note: this semaphore is pre-fired (ready!) err = MPCreateBinarySemaphore(&mpSemaphoreID); if (err == noErr) { newCriticalRegionPtr->mMPTaskID = kInvalidID; newCriticalRegionPtr->mDepthCount = 0; newCriticalRegionPtr->mMPSemaphoreID = mpSemaphoreID; *outCriticalRegionID = (MDCriticalRegionID)newCriticalRegionPtr; } else { MPFree((LogicalAddress)newCriticalRegionPtr); } return err; }
wxMutexInternal::wxMutexInternal(wxMutexType mutexType ) { m_isOk = false; m_semaphore = kInvalidID; OSStatus err = noErr; switch ( mutexType ) { case wxMUTEX_DEFAULT : verify_noerr( MPCreateBinarySemaphore( &m_semaphore ) ); m_isOk = ( m_semaphore != kInvalidID ); break; case wxMUTEX_RECURSIVE : wxFAIL_MSG( wxT("Recursive Mutex not supported yet") ); break; default : wxFAIL_MSG( wxT("Unknown mutex type") ); break; } }