File: alsaaudio.c
Function: alsamixer_new
Error: ob_refcnt of '*self' is 1 too high
989 static PyObject *
990 alsamixer_new(PyTypeObject *type, PyObject *args, PyObject *kwds) 
991 {
992     alsamixer_t *self;
993     int err;
994     int cardindex = 0;
995     char *control = "Master";
996     int id = 0;
997     snd_mixer_elem_t *elem;
998     int channel;
999     char *kw[] = { "control", "id", "cardindex", NULL };
1000     
1001     if (!PyArg_ParseTupleAndKeywords(args, kwds, "|sii", kw,
when PyArg_ParseTupleAndKeywords() succeeds
taking False path
1002                                      &control, &id, &cardindex)) 
1003         return NULL;
1004 
1005     if (!(self = (alsamixer_t *)PyObject_New(alsamixer_t, &ALSAMixerType))) 
when _PyObject_New() succeeds
taking False path
_PyObject_New allocated at:     if (!(self = (alsamixer_t *)PyObject_New(alsamixer_t, &ALSAMixerType)))
ob_refcnt is now refs: 1 + N where N >= 0
1006         return NULL;
1007 
1008     self->handle = 0;
1009     self->cardname = translate_cardidx(cardindex);
1010 
1011     err = alsamixer_gethandle(self->cardname, &self->handle);
1012     if (err<0) 
when considering range: -0x80000000 <= value <= -1
taking True path
1013     {
1014         PyErr_SetString(ALSAAudioError,snd_strerror(err));
calling PyErr_SetString()
1015         free(self->cardname);
1016         return NULL;
1017     }
1018 
1019     self->controlname = strdup(control);
1020     self->controlid = id;
1021     
1022     elem = alsamixer_find_elem(self->handle,control,id);
1023     if (!elem) 
1024     {
1025         char errtext[128];
1026         sprintf(errtext,"Unable to find mixer control '%s',%i",
1027                 self->controlname,
1028                 self->controlid);
1029         snd_mixer_close(self->handle);
1030         PyErr_SetString(ALSAAudioError,errtext);
1031         return NULL;
1032     }
1033     /* Determine mixer capabilities */
1034     self->volume_cap = self->switch_cap = 0;
1035     if (snd_mixer_selem_has_common_volume(elem)) 
1036     {
1037         self->volume_cap |= MIXER_CAP_VOLUME;
1038         if (snd_mixer_selem_has_playback_volume_joined(elem)) 
1039             self->volume_cap |= MIXER_CAP_VOLUME_JOINED;
1040     }
1041     else 
1042     {
1043         if (snd_mixer_selem_has_playback_volume(elem)) 
1044         {
1045             self->volume_cap |= MIXER_CAP_PVOLUME;
1046             if (snd_mixer_selem_has_playback_volume_joined(elem)) 
1047                 self->volume_cap |= MIXER_CAP_PVOLUME_JOINED;
1048         }
1049         if (snd_mixer_selem_has_capture_volume(elem)) 
1050         {
1051             self->volume_cap |= MIXER_CAP_CVOLUME;
1052             if (snd_mixer_selem_has_capture_volume_joined(elem)) 
1053                 self->volume_cap |= MIXER_CAP_CVOLUME_JOINED;
1054         }
1055     }
1056 
1057     if (snd_mixer_selem_has_common_switch(elem)) 
1058     {
1059         self->switch_cap |= MIXER_CAP_SWITCH;
1060         if (snd_mixer_selem_has_playback_switch_joined(elem)) 
1061             self->switch_cap |= MIXER_CAP_SWITCH_JOINED;
1062     }
1063     else 
1064     {
1065         if (snd_mixer_selem_has_playback_switch(elem)) {
1066             self->switch_cap |= MIXER_CAP_PSWITCH;
1067             if (snd_mixer_selem_has_playback_switch_joined(elem)) 
1068                 self->switch_cap |= MIXER_CAP_PSWITCH_JOINED;
1069         }
1070         if (snd_mixer_selem_has_capture_switch(elem)) {
1071             self->switch_cap |= MIXER_CAP_CSWITCH;
1072             if (snd_mixer_selem_has_capture_switch_joined(elem)) 
1073                 self->switch_cap |= MIXER_CAP_CSWITCH_JOINED;
1074             if (snd_mixer_selem_has_capture_switch_exclusive(elem)) 
1075                 self->switch_cap |= MIXER_CAP_CSWITCH_EXCLUSIVE;
1076         }
1077     }
1078     self->pchannels = 0;
1079     if (self->volume_cap | MIXER_CAP_PVOLUME || 
1080         self->switch_cap | MIXER_CAP_PSWITCH) 
1081     {
1082         if (snd_mixer_selem_is_playback_mono(elem)) self->pchannels = 1;
1083         else {
1084             for (channel=0; channel <= SND_MIXER_SCHN_LAST; channel++) {
1085                 if (snd_mixer_selem_has_playback_channel(elem, channel)) 
1086                     self->pchannels++;
1087                 else break;
1088             }
1089         }
1090     }
1091     self->cchannels = 0;
1092     if (self->volume_cap | MIXER_CAP_CVOLUME || 
1093         self->switch_cap | MIXER_CAP_CSWITCH) 
1094     {
1095         if (snd_mixer_selem_is_capture_mono(elem)) 
1096             self->cchannels = 1;
1097         else 
1098         {
1099             for (channel=0; channel <= SND_MIXER_SCHN_LAST; channel++) {
1100                 if (snd_mixer_selem_has_capture_channel(elem, channel)) 
1101                     self->cchannels++;
1102                 else break;
1103             }
1104         }
1105     }
1106     snd_mixer_selem_get_playback_volume_range(elem, &self->pmin, &self->pmax);
1107     snd_mixer_selem_get_capture_volume_range(elem, &self->cmin, &self->cmax);
1108 
1109     return (PyObject *)self;
1110 }
ob_refcnt of '*self' is 1 too high
was expecting final ob_refcnt to be N + 0 (for some unknown N)
but final ob_refcnt is N + 1