Enlightenment CVS committal

Author  : devilhorns
Project : e_modules
Module  : mixer

Dir     : e_modules/mixer


Modified Files:
        alsa_mixer.c 


Log Message:
Stop mixer module from segfaulting w/ recent alsa.
Really this code all needs to be redone, just no time :(

===================================================================
RCS file: /cvs/e/e_modules/mixer/alsa_mixer.c,v
retrieving revision 1.26
retrieving revision 1.27
diff -u -3 -r1.26 -r1.27
--- alsa_mixer.c        19 Sep 2007 01:40:09 -0000      1.26
+++ alsa_mixer.c        12 Nov 2007 17:58:01 -0000      1.27
@@ -20,12 +20,6 @@
    snd_ctl_card_info_t *hw_info;
    int                  err, i;
    char                 buf[1024];
-   
-   if ((err = snd_mixer_open(&handle, 0)) < 0) 
-     {
-       printf("Cannot open mixer: %s\n", snd_strerror(err));
-       return NULL;
-     }
 
    snd_ctl_card_info_alloca(&hw_info);
    
@@ -34,16 +28,10 @@
        Mixer_Card *card;
        
        snprintf(buf, sizeof(buf), "hw:%d", i);
-       if ((err = snd_mixer_attach(handle, buf)) < 0) break;
-       if ((err = snd_mixer_detach(handle, buf)) < 0) 
-         {
-            snd_mixer_close(handle);
-            break;
-         }
        if ((err = snd_ctl_open(&control, buf, 0)) < 0) 
          {
-            printf("Cannot control: %s: %s\n", buf, snd_strerror(err));
-            continue;
+//          printf("Cannot control: %s: %s\n", buf, snd_strerror(err));
+            break;
          }
        if ((err = snd_ctl_card_info(control, hw_info)) < 0) 
          {
@@ -54,16 +42,32 @@
          }
        
        snd_ctl_close(control);
-       
+       if ((err = snd_mixer_open(&handle, 0)) < 0) 
+         {
+            printf("Cannot open mixer\n");
+            continue;
+         }
+       if ((err = snd_mixer_attach(handle, buf)) < 0)  
+         {
+            printf("Cannot attach mixer\n");
+            snd_mixer_close(handle);
+            continue;
+         }
+       if ((err = snd_mixer_detach(handle, buf)) < 0) 
+         {
+            printf("Cannot detach mixer\n");
+            snd_mixer_close(handle);
+            continue;
+         }
+
        card = E_NEW(Mixer_Card, 1);
        if (!card) continue;
        card->name = evas_stringshare_add(buf);
        card->real = evas_stringshare_add(snd_ctl_card_info_get_name(hw_info));
        card->id = _alsa_get_card_id(card->real);
-       
+       snd_mixer_close(handle);
        cards = evas_list_append(cards, card);
      }
-   snd_mixer_close(handle);
    return cards;
 }
 
@@ -108,40 +112,44 @@
    int                  err, i;
    char                 buf[1024];
 
-   if ((err = snd_mixer_open(&handle, 0)) < 0) 
-     {
-       printf("Cannot open mixer: %s\n", snd_strerror(err));
-       return NULL;
-     }
-
-   snd_ctl_card_info_alloca(&hw_info);
+    snd_ctl_card_info_alloca(&hw_info);
 
    for (i = 0; i < 32; i++) 
      {
        Mixer_Card *card;
        
        snprintf(buf, sizeof(buf), "hw:%d", i);
-       if ((err = snd_mixer_attach(handle, buf)) < 0) break;
-       if ((err = snd_mixer_detach(handle, buf)) < 0) 
+       if ((err = snd_ctl_open(&control, buf, 0)) < 0) 
          {
-            snd_mixer_close(handle);
+//          printf("Cannot control: %s: %s\n", buf, snd_strerror(err));
+            break;
+         }
+       if ((err = snd_ctl_card_info(control, hw_info)) < 0) 
+         {
+            printf("Cannot get hardware info: %s: %s\n", buf, 
+                   snd_strerror(err));
+            snd_ctl_close(control);
             continue;
          }
-       if ((err = snd_ctl_open(&control, buf, 0)) < 0) 
+       
+       snd_ctl_close(control);
+       if ((err = snd_mixer_open(&handle, 0)) < 0) 
+         {
+            printf("Cannot open mixer\n");
+            continue;
+         }
+       if ((err = snd_mixer_attach(handle, buf)) < 0)  
          {
-            printf("Cannot control: %s: %s\n", buf, snd_strerror(err));
+            printf("Cannot attach mixer\n");
             snd_mixer_close(handle);
             continue;
          }
-       if ((err = snd_ctl_card_info(control, hw_info)) < 0) 
+       if ((err = snd_mixer_detach(handle, buf)) < 0) 
          {
-            printf("Cannot get hardware info: %s: %s\n", buf, 
snd_strerror(err));
-            snd_ctl_close(control);
+            printf("Cannot detach mixer\n");
             snd_mixer_close(handle);
             continue;
          }
-       
-       snd_ctl_close(control);
        snd_mixer_close(handle);
 
        card = E_NEW(Mixer_Card, 1);
@@ -156,7 +164,7 @@
        return card;
      }
    //snd_ctl_close(control);
-   snd_mixer_close(handle);
+//   snd_mixer_close(handle);
    return NULL;
 }
 



-------------------------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc.
Still grepping through log files to find problems?  Stop.
Now Search log events and configuration files using AJAX and a browser.
Download your FREE copy of Splunk now >> http://get.splunk.com/
_______________________________________________
enlightenment-cvs mailing list
enlightenment-cvs@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to