Пример #1
0
/* virtual */ SysStatus
FCMPrimitive<PL,ALLOC>::detachRegion(RegionRef regRef)
{
    uval found;
    RegionInfo *rinfo;

    // check before locking to avoid callback deadlock on destruction
    if (this->beingDestroyed) return 0;

    this->lock.acquire();

    found = this->regionList.remove(regRef, rinfo);
    if (!found) {
	// assume race on destruction call
	tassert(this->beingDestroyed,
		err_printf("no region; no destruction race\n"));
	this->lock.release();
	return 0;
    }
    if (this->regionList.isEmpty()) {
	this->lock.release();
	this->notInUse();
    } else {
	this->lock.release();
	updatePM(rinfo->pm);
    }
    delete rinfo;
    return 0;
}
Пример #2
0
void Oscillator::update( sampleFrame * _ab, const fpp_t _frames,
							const ch_cnt_t _chnl )
{
	if( m_freq >= Engine::mixer()->processingSampleRate() / 2 )
	{
		Mixer::clearAudioBuffer( _ab, _frames );
		return;
	}
	if( m_subOsc != NULL )
	{
		switch( m_modulationAlgoModel->value() )
		{
			case PhaseModulation:
				updatePM( _ab, _frames, _chnl );
				break;
			case AmplitudeModulation:
				updateAM( _ab, _frames, _chnl );
				break;
			case SignalMix:
				updateMix( _ab, _frames, _chnl );
				break;
			case SynchronizedBySubOsc:
				updateSync( _ab, _frames, _chnl );
				break;
			case FrequencyModulation:
				updateFM( _ab, _frames, _chnl );
		}
	}
	else
	{
		updateNoSub( _ab, _frames, _chnl );
	}
}
Пример #3
0
// Don't destroy FCM when last use disappears.  Only destroy
// if FR (file representative) detaches (file is really gone)
// or page replacement removes last page (lazy close).
// FIXME: no locking going on here???
SysStatus
FCMDefault::detachRegion(RegionRef regRef)
{
    //err_printf("FCMDefault::detachRegion(%lx) : %lx\n", regRef, getRef());
    RegionInfo *rinfo;
    PMRef       pm;
    uval        found;

    // check before locking to avoid callback on destruction deadlock
    if (beingDestroyed) return 0;

    lock.acquire();

    found = regionList.remove(regRef, rinfo);
    if (!found) {
	// assume race on destruction call
	tassert(beingDestroyed,err_printf("no region; no destruction race\n"));
	lock.release();
	return 0;
    }
    pm = rinfo->pm;
    delete rinfo;
    if (!referenceCount && regionList.isEmpty()) {
	//err_printf("FCMDefault::detachRegion(%lx) regionlist empty: %lx\n",
	//   regRef, getRef());
	lock.release();
	notInUse();
    } else {
	lock.release();
    }
    //err_printf("FCMDefault::detachRegion maybe doing updatePM\n");
    // above code may have destroyed us; updatePM info if we still have a pm
    if (!beingDestroyed) updatePM(pm);

    //err_printf("FCMDefault::detachRegion all done\n");

    return 0;
}