vserver 1.9.5.x5
[linux-2.6.git] / sound / core / timer.c
index cee5f47..67baf1e 100644 (file)
@@ -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;