Update of /cvsroot/alsa/alsa-kernel/core
In directory sc8-pr-cvs1:/tmp/cvs-serv30258

Modified Files:
        timer.c 
Log Message:
New code fixes (tqueue)

Index: timer.c
===================================================================
RCS file: /cvsroot/alsa/alsa-kernel/core/timer.c,v
retrieving revision 1.26
retrieving revision 1.27
diff -u -r1.26 -r1.27
--- timer.c     28 Feb 2003 16:59:54 -0000      1.26
+++ timer.c     28 Feb 2003 19:04:34 -0000      1.27
@@ -944,7 +944,7 @@
        int prev;
        
        spin_lock(&tu->qlock);
-       if (tu->queue_size > 0) {
+       if (tu->qused > 0) {
                prev = tu->qtail == 0 ? tu->queue_size - 1 : tu->qtail - 1;
                r = &tu->queue[prev];
                if (r->resolution == resolution) {
@@ -995,7 +995,7 @@
                snd_timer_user_append_to_tqueue(tu, &r1);
                tu->last_resolution = resolution;
        }
-       if (tu->queue_size > 0) {
+       if (tu->qused > 0) {
                prev = tu->qtail == 0 ? tu->queue_size - 1 : tu->qtail - 1;
                r = &tu->tqueue[prev];
                if (r->event == SNDRV_TIMER_EVENT_TICK) {
@@ -1046,6 +1046,8 @@
                        snd_timer_close(tu->timeri);
                if (tu->queue)
                        kfree(tu->queue);
+               if (tu->tqueue)
+                       kfree(tu->tqueue);
                snd_magic_kfree(tu);
        }
        return 0;
@@ -1177,6 +1179,14 @@
        if ((tu->timeri = snd_timer_open(str, &tselect.id, current->pid)) == NULL)
                return -ENODEV;
 
+       if (tu->queue) {
+               kfree(tu->queue);
+               tu->queue = NULL;
+       }
+       if (tu->tqueue) {
+               kfree(tu->tqueue);
+               tu->tqueue = NULL;
+       }
        if (tu->tread) {
                tu->tqueue = (snd_timer_tread_t *)kmalloc(tu->queue_size * 
sizeof(snd_timer_tread_t), GFP_KERNEL);
                if (tu->tqueue == NULL) {
@@ -1227,6 +1237,7 @@
        snd_timer_params_t params;
        snd_timer_t *t;
        snd_timer_read_t *tr;
+       snd_timer_tread_t *ttr;
        int err;
        
        tu = snd_magic_cast(snd_timer_user_t, file->private_data, return -ENXIO);
@@ -1252,11 +1263,20 @@
        }
        spin_unlock_irqrestore(&t->lock, flags);
        if (params.queue_size > 0 && (unsigned int)tu->queue_size != 
params.queue_size) {
-               tr = (snd_timer_read_t *)kmalloc(params.queue_size * 
sizeof(snd_timer_read_t), GFP_KERNEL);
-               if (tr) {
-                       kfree(tu->queue);
-                       tu->queue_size = params.queue_size;
-                       tu->queue = tr;
+               if (tu->tread) {
+                       ttr = (snd_timer_tread_t *)kmalloc(params.queue_size * 
sizeof(snd_timer_tread_t), GFP_KERNEL);
+                       if (ttr) {
+                               kfree(tu->tqueue);
+                               tu->queue_size = params.queue_size;
+                               tu->tqueue = ttr;
+                       }
+               } else {
+                       tr = (snd_timer_read_t *)kmalloc(params.queue_size * 
sizeof(snd_timer_read_t), GFP_KERNEL);
+                       if (tr) {
+                               kfree(tu->queue);
+                               tu->queue_size = params.queue_size;
+                               tu->queue = tr;
+                       }
                }
        }
        if (t->hw.flags & SNDRV_TIMER_HW_SLAVE) {



-------------------------------------------------------
This sf.net email is sponsored by:ThinkGeek
Welcome to geek heaven.
http://thinkgeek.com/sf
_______________________________________________
Alsa-cvslog mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/alsa-cvslog

Reply via email to