X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=sound%2Fcore%2Ftimer.c;h=67baf1ecc3437cd8f0703c0a73bb2e2f4c3046ad;hb=6a77f38946aaee1cd85eeec6cf4229b204c15071;hp=cee5f47c780d3e08af7e9ee2b63481ca02a60163;hpb=87fc8d1bb10cd459024a742c6a10961fefcef18f;p=linux-2.6.git diff --git a/sound/core/timer.c b/sound/core/timer.c index cee5f47c7..67baf1ecc 100644 --- a/sound/core/timer.c +++ b/sound/core/timer.c @@ -351,8 +351,7 @@ int snd_timer_close(snd_timer_instance_t * timeri) } if (timeri->private_free) timeri->private_free(timeri); - if (timeri->owner) - kfree(timeri->owner); + kfree(timeri->owner); kfree(timeri); if (timer && timer->card) module_put(timer->card->module); @@ -1004,8 +1003,7 @@ static struct _snd_timer_hardware snd_timer_system = static void snd_timer_free_system(snd_timer_t *timer) { - if (timer->private_data) - kfree(timer->private_data); + kfree(timer->private_data); } static int snd_timer_register_system(void) @@ -1119,7 +1117,8 @@ static void snd_timer_user_append_to_tqueue(snd_timer_user_t *tu, snd_timer_trea if (tu->qused >= tu->queue_size) { tu->overrun++; } else { - memcpy(&tu->queue[tu->qtail++], tread, sizeof(*tread)); + memcpy(&tu->tqueue[tu->qtail++], tread, sizeof(*tread)); + tu->qtail %= tu->queue_size; tu->qused++; } } @@ -1142,6 +1141,8 @@ static void snd_timer_user_ccallback(snd_timer_instance_t *timeri, spin_lock(&tu->qlock); snd_timer_user_append_to_tqueue(tu, &r1); spin_unlock(&tu->qlock); + kill_fasync(&tu->fasync, SIGIO, POLL_IN); + wake_up(&tu->qchange_sleep); } static void snd_timer_user_tinterrupt(snd_timer_instance_t *timeri, @@ -1226,10 +1227,8 @@ static int snd_timer_user_release(struct inode *inode, struct file *file) fasync_helper(-1, file, 0, &tu->fasync); if (tu->timeri) snd_timer_close(tu->timeri); - if (tu->queue) - kfree(tu->queue); - if (tu->tqueue) - kfree(tu->tqueue); + kfree(tu->queue); + kfree(tu->tqueue); kfree(tu); } return 0;