vp->time = emu->use_time++; 
snd_emux_note_off(void *p, int note, int vel, snd_midi_channel_t *chan){	int ch;	snd_emux_t *emu;	snd_emux_voice_t *vp;	unsigned long flags;	snd_emux_port_t *port;	port = p;	snd_assert(port != NULL && chan != NULL, return);	emu = port->emu;	snd_assert(emu != NULL, return);	snd_assert(emu->ops.release != NULL, return);	spin_lock_irqsave(&emu->voice_lock, flags);	for (ch = 0; ch < emu->max_voices; ch++) {		vp = &emu->voices[ch];		if (STATE_IS_PLAYING(vp->state) &&		    vp->chan == chan && vp->key == note) {			vp->time = emu->use_time++;			vp->state = SNDRV_EMUX_ST_RELEASED;			if (vp->ontime == jiffies) {				/* if note-off is sent too shortly after				 * note-on, emuX engine cannot produce the sound				 * correctly.  so we'll release this note				 * a bit later via timer callback.				 */				vp->state = SNDRV_EMUX_ST_PENDING;				if (! emu->timer_active) {					emu->tlist.expires = jiffies + 1;					add_timer(&emu->tlist);					emu->timer_active = 1;				}			} else				/* ok now release the note */				emu->ops.release(vp);		}	}	spin_unlock_irqrestore(&emu->voice_lock, flags);}
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/fc20773329c993ec7d1b2c65618351f057d9d679/emux_synth.c/clean/sound/synth/emux/emux_synth.c