Bug 104376 - KMix from KDE CVS HEAD is crashing.
Summary: KMix from KDE CVS HEAD is crashing.
Status: RESOLVED FIXED
Alias: None
Product: kmix
Classification: Applications
Component: general (show other bugs)
Version: unspecified
Platform: Compiled Sources Linux
: NOR crash
Target Milestone: ---
Assignee: Christian Esken
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2005-04-22 16:04 UTC by Ali Akcaagac
Modified: 2005-05-07 06:20 UTC (History)
0 users

See Also:
Latest Commit:
Version Fixed In:


Attachments
Illustration. (3.04 KB, text/plain)
2005-04-22 16:04 UTC, Ali Akcaagac
Details

Note You need to log in before you can comment on or make changes to this bug.
Description Ali Akcaagac 2005-04-22 16:04:01 UTC
Version:            (using KDE Devel)
Installed from:    Compiled sources
Compiler:          gcc IV 
OS:                Linux

The changes applied on 20-04-2005 are leading to KMix crashes during startup. I had to revert back to KMix from 19-04-2005 to have it operate normally. I have attached a backtrace and hope you might be able to solve it. Alsa version is ALSA 1.0.9rc2 release.
Comment 1 Ali Akcaagac 2005-04-22 16:04:23 UTC
Created attachment 10745 [details]
Illustration.
Comment 2 Christian Esken 2005-04-30 23:16:29 UTC
Thanks for your feedback. KMix is currently undergoing a big internal cleanup. I just commited a new version to CVS HEAD. I would be grateful if you could test that version and report back.

Thanks,
  Christian
Comment 3 Ali Akcaagac 2005-05-06 20:11:12 UTC
Still crashing.

bash-3.00$ gdb kmix
GNU gdb 6.3
Copyright 2004 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB.  Type "show warranty" for details.
This GDB was configured as "i686-pc-linux-gnu"...Using host libthread_db library "/lib/libthread_db.so.1".

(gdb) set args --nofork
(gdb) run
Starting program: /opt/kde/bin/kmix --nofork
[Thread debugging using libthread_db enabled]
[New Thread 16384 (LWP 16707)]
Qt: gdb: -nograb added to command-line options.
         Use the -dograb option to enforce grabbing.
kmix: IN MixerToolBox::initMixer()
kmix: IN  Mixer_ALSA snd_mixer_open()
kmix: OUT Mixer_ALSA snd_mixer_open()
kmix: Trying ALSA Device 'hw:0': found
kmix: IN  Mixer_ALSA::close()
kmix: OUT Mixer_ALSA::close()
kmix: IN  Mixer_ALSA snd_mixer_open()
kmix: OUT Mixer_ALSA snd_mixer_open()
kmix: Trying ALSA Device 'hw:0': found
kmix: Trying ALSA Device 'hw:1': not found: snd_ctl_open err=No such file or directory
kmix: IN  Mixer_ALSA::close()
kmix: OUT Mixer_ALSA::close()
kmix: IN  Mixer_ALSA::close()
kmix: OUT Mixer_ALSA::close()
kmix: Trying ALSA Device 'hw:2': not found: snd_ctl_open err=No such file or directory
kmix: IN  Mixer_ALSA::close()
kmix: OUT Mixer_ALSA::close()
kmix: IN  Mixer_ALSA::close()
kmix: OUT Mixer_ALSA::close()
kmix: Trying ALSA Device 'hw:3': not found: snd_ctl_open err=No such file or directory
kmix: IN  Mixer_ALSA::close()
kmix: OUT Mixer_ALSA::close()
kmix: IN  Mixer_ALSA::close()
kmix: OUT Mixer_ALSA::close()
kmix: Trying ALSA Device 'hw:4': not found: snd_ctl_open err=No such file or directory
kmix: IN  Mixer_ALSA::close()
kmix: OUT Mixer_ALSA::close()
kmix: IN  Mixer_ALSA::close()
kmix: OUT Mixer_ALSA::close()
kmix: Trying ALSA Device 'hw:5': not found: snd_ctl_open err=No such file or directory
kmix: IN  Mixer_ALSA::close()
kmix: OUT Mixer_ALSA::close()
kmix: IN  Mixer_ALSA::close()
kmix: OUT Mixer_ALSA::close()
kmix: Trying ALSA Device 'hw:6': not found: snd_ctl_open err=No such file or directory
kmix: IN  Mixer_ALSA::close()
kmix: OUT Mixer_ALSA::close()
kmix: IN  Mixer_ALSA::close()
kmix: OUT Mixer_ALSA::close()
kmix: Trying ALSA Device 'hw:7': not found: snd_ctl_open err=No such file or directory
kmix: IN  Mixer_ALSA::close()
kmix: OUT Mixer_ALSA::close()
kmix: IN  Mixer_ALSA::close()
kmix: OUT Mixer_ALSA::close()
kmix: Trying ALSA Device 'hw:8': not found: snd_ctl_open err=No such file or directory
kmix: IN  Mixer_ALSA::close()
kmix: OUT Mixer_ALSA::close()
kmix: IN  Mixer_ALSA::close()
kmix: OUT Mixer_ALSA::close()
kmix: Trying ALSA Device 'hw:9': not found: snd_ctl_open err=No such file or directory
kmix: IN  Mixer_ALSA::close()
kmix: OUT Mixer_ALSA::close()
kmix: IN  Mixer_ALSA::close()
kmix: OUT Mixer_ALSA::close()
kmix: Trying ALSA Device 'hw:10': not found: snd_ctl_open err=No such file or directory
kmix: IN  Mixer_ALSA::close()
kmix: OUT Mixer_ALSA::close()
kmix: IN  Mixer_ALSA::close()
kmix: OUT Mixer_ALSA::close()
kmix: Trying ALSA Device 'hw:11': not found: snd_ctl_open err=No such file or directory
kmix: IN  Mixer_ALSA::close()
kmix: OUT Mixer_ALSA::close()
kmix: IN  Mixer_ALSA::close()
kmix: OUT Mixer_ALSA::close()
kmix: Trying ALSA Device 'hw:12': not found: snd_ctl_open err=No such file or directory
kmix: IN  Mixer_ALSA::close()
kmix: OUT Mixer_ALSA::close()
kmix: IN  Mixer_ALSA::close()
kmix: OUT Mixer_ALSA::close()
kmix: Trying ALSA Device 'hw:13': not found: snd_ctl_open err=No such file or directory
kmix: IN  Mixer_ALSA::close()
kmix: OUT Mixer_ALSA::close()
kmix: IN  Mixer_ALSA::close()
kmix: OUT Mixer_ALSA::close()
kmix: Trying ALSA Device 'hw:14': not found: snd_ctl_open err=No such file or directory
kmix: IN  Mixer_ALSA::close()
kmix: OUT Mixer_ALSA::close()
kmix: IN  Mixer_ALSA::close()
kmix: OUT Mixer_ALSA::close()
kmix: Trying ALSA Device 'hw:15': not found: snd_ctl_open err=No such file or directory
kmix: IN  Mixer_ALSA::close()
kmix: OUT Mixer_ALSA::close()
kmix: IN  Mixer_ALSA::close()
kmix: OUT Mixer_ALSA::close()
kmix: Trying ALSA Device 'hw:16': not found: snd_ctl_open err=No such file or directory
kmix: IN  Mixer_ALSA::close()
kmix: OUT Mixer_ALSA::close()
kmix: IN  Mixer_ALSA::close()
kmix: OUT Mixer_ALSA::close()
kmix: Trying ALSA Device 'hw:17': not found: snd_ctl_open err=No such file or directory
kmix: IN  Mixer_ALSA::close()
kmix: OUT Mixer_ALSA::close()
kmix: IN  Mixer_ALSA::close()
kmix: OUT Mixer_ALSA::close()
kmix: Trying ALSA Device 'hw:18': not found: snd_ctl_open err=No such file or directory
kmix: IN  Mixer_ALSA::close()
kmix: OUT Mixer_ALSA::close()
kmix: IN  Mixer_ALSA::close()
kmix: OUT Mixer_ALSA::close()
kmix: Trying ALSA Device 'hw:19': not found: snd_ctl_open err=No such file or directory
kmix: IN  Mixer_ALSA::close()
kmix: OUT Mixer_ALSA::close()
kmix: IN  Mixer_ALSA::close()
kmix: OUT Mixer_ALSA::close()
kmix: Sound drivers supported: ALSA + OSS
Sound drivers used: ALSA
kmix: OUT MixerToolBox::initMixer()
kmix: simple.c:1415: snd_mixer_selem_has_playback_volume: Assertion `elem->type == SND_MIXER_ELEM_SIMPLE' failed.

Program received signal SIGABRT, Aborted.
[Switching to Thread 16384 (LWP 16707)]
0xb7e02a91 in kill () from /lib/libc.so.6
(gdb) bt full
#0  0xb7e02a91 in kill () from /lib/libc.so.6
No symbol table info available.
#1  0xb6f33f31 in pthread_kill () from /lib/libpthread.so.0
No symbol table info available.
#2  0xb6f342b6 in raise () from /lib/libpthread.so.0
No symbol table info available.
#3  0xb7e027f8 in raise () from /lib/libc.so.6
No symbol table info available.
#4  0xb7e03df0 in abort () from /lib/libc.so.6
No symbol table info available.
#5  0xb7dfc076 in __assert_fail () from /lib/libc.so.6
No symbol table info available.
#6  0xb6fb4357 in snd_mixer_selem_has_playback_volume ()
   from /usr/lib/libasound.so.2
No symbol table info available.
#7  0xb7f4198e in Mixer_ALSA::readVolumeFromHW (this=0x80df908, mixerIdx=38,
    volume=@0x80ed0c8) at mixer_alsa9.cpp:655
        elem_sw = -1208808285
        left = -1074336856
        right = 135188640
        elem = (snd_mixer_elem_t *) 0x8103b00
#8  0xb7f436b8 in Mixer::readSetFromHW (this=0x80df890) at mixer.cpp:263
        vol = (Volume &) @0x80ed0c8: {static _channelMaskEnum = {1, 2, 4, 8,
---Type <return> to continue, or q <return> to quit---
    16, 32, 64, 128, 256, 512}, _muted = false, _chmask = 3, _volumes = {
    65535, 65535, 0, 0, 0, 0, 0, 0, 0, 0}, _maxVolume = 65535, _minVolume = 0,
  _maxVolumeRec = 65535, _minVolumeRec = 0}
        updated = true
        md = (class MixDevice *) 0x80ed0a0
#9  0xb7f44639 in Mixer::qt_invoke (this=0x80df890, _id=2, _o=0xbff6ec70)
    at mixer.moc:136
No locals.
#10 0xb732b44f in QObject::activate_signal (this=0x80df968, clist=0x80df830,
    o=0xbff6ec70) at kernel/qobject.cpp:2355
        object = (class QObject *) 0x80df890
        sol = (QSenderObjectList *) 0x80dfb38
        oldSender = (class QObject *) 0x0
        c = (QConnection *) 0x80dfb10
#11 0xb732b2f2 in QObject::activate_signal (this=0x80df968, signal=2)
    at kernel/qobject.cpp:2324
        clist = (QConnectionList *) 0x80df830
        o = {{type = 0xb77d76a0, payload = {b = false, c = 0 '\0', s = 19968,
      i = -1216590336, l = -1216590336, uc = 0 '\0', us = 19968,
      ui = 3078376960, ul = 3078376960, f = -1.50385313e-05,
      d = -1.4327475707440271, byte = "\000N|·\210ìö¿\002\033`·\200\000\000",
      bytearray = {data = 0xb77c4e00 "(\027y", size = 3220630664},
      ptr = 0xb77c4e00, voidstar = {ptr = 0xb77c4e00, owner = 136},
---Type <return> to continue, or q <return> to quit---
      charstar = {ptr = 0xb77c4e00 "(\027y", owner = 136}, utf8 = {
        ptr = 0xb77c4e00 "(\027y", owner = 136}, local8bit = {
        ptr = 0xb77c4e00 "(\027y", owner = 136}, iface = 0xb77c4e00,
      idisp = 0xb77c4e00}}}
#12 0xb768ba98 in QTimer::timeout (this=0x80df968)
    at .moc/debug-shared-mt/moc_qtimer.cpp:82
No locals.
#13 0xb7350046 in QTimer::event (this=0x80df968, e=0xbff6ef00)
    at kernel/qtimer.cpp:219
No locals.
#14 0xb72c87f1 in QApplication::internalNotify (this=0x8051630,
    receiver=0x80df968, e=0xbff6ef00) at kernel/qapplication.cpp:2635
        consumed = false
        handled = false
#15 0xb72c7d32 in QApplication::notify (this=0x8051630, receiver=0x80df968,
    e=0xbff6ef00) at kernel/qapplication.cpp:2358
        res = false
#16 0xb7942a33 in KApplication::notify (this=0x8051630, receiver=0x80df968,
    event=0xbff6ef00) at kapplication.cpp:549
        t = Timer
#17 0xb7f346f6 in QApplication::sendEvent (receiver=0x80df968,
    event=0xbff6ef00) at qapplication.h:491
No locals.
---Type <return> to continue, or q <return> to quit---
#18 0xb72b707a in QEventLoop::activateTimers (this=0x808da70)
    at kernel/qeventloop_unix.cpp:556
        e = {<QEvent> = {<Qt> = {static color0 = @0xb77d5e00,
      static color1 = @0xb77d5e08, static black = @0xb77d5e10,
      static white = @0xb77d5e18, static darkGray = @0xb77d5e20,
      static gray = @0xb77d5e28, static lightGray = @0xb77d5e30,
      static red = @0xb77d5e38, static green = @0xb77d5e40,
      static blue = @0xb77d5e48, static cyan = @0xb77d5e50,
      static magenta = @0xb77d5e58, static yellow = @0xb77d5e60,
      static darkRed = @0xb77d5e68, static darkGreen = @0xb77d5e70,
      static darkBlue = @0xb77d5e78, static darkCyan = @0xb77d5e80,
      static darkMagenta = @0xb77d5e88, static darkYellow = @0xb77d5e90,
      static arrowCursor = @0xb77d44c0, static upArrowCursor = @0xb77d44c4,
      static crossCursor = @0xb77d44c8, static waitCursor = @0xb77d44cc,
      static ibeamCursor = @0xb77d44d0, static sizeVerCursor = @0xb77d44d4,
      static sizeHorCursor = @0xb77d44d8,
      static sizeBDiagCursor = @0xb77d44dc,
      static sizeFDiagCursor = @0xb77d44e0,
      static sizeAllCursor = @0xb77d44e4, static blankCursor = @0xb77d44e8,
      static splitVCursor = @0xb77d44ec, static splitHCursor = @0xb77d44f0,
      static pointingHandCursor = @0xb77d44f4,
      static forbiddenCursor = @0xb77d44f8,
      static whatsThisCursor = @0xb77d44fc, static busyCursor = @0xb77d4500},
---Type <return> to continue, or q <return> to quit---
    _vptr.QEvent = 0xb7792898, t = Timer, posted = 0, spont = 0}, id = 126}
        n_act = 1
        begin = (TimerInfo *) 0x810b490
        first = false
        currentTime = {tv_sec = 1115402566, tv_usec = 266442}
        maxCount = 0
        t = (TimerInfo *) 0x810b490
#19 0xb726e762 in QEventLoop::processEvents (this=0x808da70, flags=4)
    at kernel/qeventloop_x11.cpp:389
        nevents = 0
        locker = {mtx = 0x8083728}
        canWait = true
        nsel = 0
        event = {type = 28, xany = {type = 28, serial = 4107, send_event = 0,
    display = 0x8051718, window = 73}, xkey = {type = 28, serial = 4107,
    send_event = 0, display = 0x8051718, window = 73, root = 346,
    subwindow = 59775621, time = 0, x = 576, y = 345, x_root = 0,
    y_root = 39846335, state = 0, keycode = 0, same_screen = 0}, xbutton = {
    type = 28, serial = 4107, send_event = 0, display = 0x8051718,
    window = 73, root = 346, subwindow = 59775621, time = 0, x = 576, y = 345,
    x_root = 0, y_root = 39846335, state = 0, button = 0, same_screen = 0},
  xmotion = {type = 28, serial = 4107, send_event = 0, display = 0x8051718,
    window = 73, root = 346, subwindow = 59775621, time = 0, x = 576, y = 345,
---Type <return> to continue, or q <return> to quit---
    x_root = 0, y_root = 39846335, state = 0, is_hint = 0 '\0',
    same_screen = 0}, xcrossing = {type = 28, serial = 4107, send_event = 0,
    display = 0x8051718, window = 73, root = 346, subwindow = 59775621,
    time = 0, x = 576, y = 345, x_root = 0, y_root = 39846335, mode = 0,
    detail = 0, same_screen = 0, focus = 0, state = 0}, xfocus = {type = 28,
    serial = 4107, send_event = 0, display = 0x8051718, window = 73,
    mode = 346, detail = 59775621}, xexpose = {type = 28, serial = 4107,
    send_event = 0, display = 0x8051718, window = 73, x = 346, y = 59775621,
    width = 0, height = 576, count = 345}, xgraphicsexpose = {type = 28,
    serial = 4107, send_event = 0, display = 0x8051718, drawable = 73,
    x = 346, y = 59775621, width = 0, height = 576, count = 345,
    major_code = 0, minor_code = 39846335}, xnoexpose = {type = 28,
    serial = 4107, send_event = 0, display = 0x8051718, drawable = 73,
    major_code = 346, minor_code = 59775621}, xvisibility = {type = 28,
    serial = 4107, send_event = 0, display = 0x8051718, window = 73,
    state = 346}, xcreatewindow = {type = 28, serial = 4107, send_event = 0,
    display = 0x8051718, parent = 73, window = 346, x = 59775621, y = 0,
    width = 576, height = 345, border_width = 0,
    override_redirect = 39846335}, xdestroywindow = {type = 28, serial = 4107,
    send_event = 0, display = 0x8051718, event = 73, window = 346}, xunmap = {
    type = 28, serial = 4107, send_event = 0, display = 0x8051718, event = 73,
    window = 346, from_configure = 59775621}, xmap = {type = 28,
    serial = 4107, send_event = 0, display = 0x8051718, event = 73,
---Type <return> to continue, or q <return> to quit---
    window = 346, override_redirect = 59775621}, xmaprequest = {type = 28,
    serial = 4107, send_event = 0, display = 0x8051718, parent = 73,
    window = 346}, xreparent = {type = 28, serial = 4107, send_event = 0,
    display = 0x8051718, event = 73, window = 346, parent = 59775621, x = 0,
    y = 576, override_redirect = 345}, xconfigure = {type = 28, serial = 4107,
    send_event = 0, display = 0x8051718, event = 73, window = 346,
    x = 59775621, y = 0, width = 576, height = 345, border_width = 0,
    above = 39846335, override_redirect = 0}, xgravity = {type = 28,
    serial = 4107, send_event = 0, display = 0x8051718, event = 73,
    window = 346, x = 59775621, y = 0}, xresizerequest = {type = 28,
    serial = 4107, send_event = 0, display = 0x8051718, window = 73,
    width = 346, height = 59775621}, xconfigurerequest = {type = 28,
    serial = 4107, send_event = 0, display = 0x8051718, parent = 73,
    window = 346, x = 59775621, y = 0, width = 576, height = 345,
    border_width = 0, above = 39846335, detail = 0, value_mask = 0},
  xcirculate = {type = 28, serial = 4107, send_event = 0, display = 0x8051718,
    event = 73, window = 346, place = 59775621}, xcirculaterequest = {
    type = 28, serial = 4107, send_event = 0, display = 0x8051718,
    parent = 73, window = 346, place = 59775621}, xproperty = {type = 28,
    serial = 4107, send_event = 0, display = 0x8051718, window = 73,
    atom = 346, time = 59775621, state = 0}, xselectionclear = {type = 28,
    serial = 4107, send_event = 0, display = 0x8051718, window = 73,
    selection = 346, time = 59775621}, xselectionrequest = {type = 28,
---Type <return> to continue, or q <return> to quit---
    serial = 4107, send_event = 0, display = 0x8051718, owner = 73,
    requestor = 346, selection = 59775621, target = 0, property = 576,
    time = 345}, xselection = {type = 28, serial = 4107, send_event = 0,
    display = 0x8051718, requestor = 73, selection = 346, target = 59775621,
    property = 0, time = 576}, xcolormap = {type = 28, serial = 4107,
    send_event = 0, display = 0x8051718, window = 73, colormap = 346,
    c_new = 59775621, state = 0}, xclient = {type = 28, serial = 4107,
    send_event = 0, display = 0x8051718, window = 73, message_type = 346,
    format = 59775621, data = {
      b = "\000\000\000\000@\002\000\000Y\001\000\000\000\000\000\000¿\001`\002", s = {0, 0, 576, 0, 345, 0, 0, 0, 447, 608}, l = {0, 576, 345, 0,
        39846335}}}, xmapping = {type = 28, serial = 4107, send_event = 0,
    display = 0x8051718, window = 73, request = 346, first_keycode = 59775621,
    count = 0}, xerror = {type = 28, display = 0x100b, resourceid = 0,
    serial = 134551320, error_code = 73 'I', request_code = 0 '\0',
    minor_code = 0 '\0'}, xkeymap = {type = 28, serial = 4107, send_event = 0,
    display = 0x8051718, window = 73,
    key_vector = "Z\001\000\000\205\032\220\003\000\000\000\000@\002\000\000Y\001\000\000\000\000\000\000¿\001`\002\000\000\000"}, pad = {28, 4107, 0,
    134551320, 73, 346, 59775621, 0, 576, 345, 0, 39846335,
    0 <repeats 12 times>}}
        exclude_all = 10
        zerotm = {tv_sec = 0, tv_usec = 0}
---Type <return> to continue, or q <return> to quit---
        tm = (timeval *) 0xb77d5cd0
        highest = 11
#20 0xb72dcca3 in QEventLoop::enterLoop (this=0x808da70)
    at kernel/qeventloop.cpp:198
        old_exitloop = false
#21 0xb72dcbbe in QEventLoop::exec (this=0x808da70)
    at kernel/qeventloop.cpp:145
No locals.
#22 0xb72c895d in QApplication::exec (this=0x8051630)
    at kernel/qapplication.cpp:2758
No locals.
#23 0xb7f2a3ef in kdemain (argc=2, argv=0xbff6f254) at main.cpp:66
        aboutData = {mAppName = 0xb7f4fc19 "kmix",
  mProgramName = 0xb7f4fc14 "KMix", mVersion = 0xb7f4fc0e "2.4-1",
  mShortDescription = 0xb7f4fe80 "KMix - KDE's full featured mini mixer",
  mLicenseKey = 1,
  mCopyrightStatement = 0xb7f4fb54 "(c) 1996-2000 Christian Esken\n(c) 2000-2003 Christian Esken, Stefan Schimanski\n(c) 2002-2003 Christian Esken, Helio Chissini de Castro\n(c) 2004 Christian Esken, Helio Chissini de Castro",
  mOtherText = 0x0, mHomepageAddress = 0x0,
  mBugEmailAddress = 0xb7f4fb40 "submit@bugs.kde.org", mAuthorList = {
    sh = 0x804e608}, mCreditList = {sh = 0x804e638}, mLicenseText = 0x0,
  d = 0x804e668}
---Type <return> to continue, or q <return> to quit---
        app = (class KMixApp *) 0x8051630
        ret = -1074335296
#24 0x080484b2 in main (argc=2, argv=0xbff6f254) at kmix.la.cpp:2
No locals.
(gdb)                                
Comment 4 Christian Esken 2005-05-07 00:16:45 UTC
SVN commit 410177 by esken:

Revert the trivial getMixerElem() implementation. Bug 104376 indicates
that there are problems with it, showing the ALSA assertion:

simple.c:1415: snd_mixer_selem_has_playback_volume: Assertion
`elem->type == SND_MIXER_ELEM_SIMPLE' failed.

Most likely these problems are only with special contols, like the
routing controls found on Audigy and other modern cards.
CCBUGS:104376


 M  +4 -4      trunk/KDE/kdemultimedia/kmix/mixer_alsa.h  
 M  +14 -5     trunk/KDE/kdemultimedia/kmix/mixer_alsa9.cpp  


--- trunk/KDE/kdemultimedia/kmix/mixer_alsa.h #410176:410177
@@ -31,10 +31,10 @@
 		snd_mixer_elem_t* getMixerElem(int devnum);
 
 		virtual QString errorText(int mixer_error);
-		//typedef QValueList<snd_mixer_selem_id_t *>AlsaMixerSidList;
-		//AlsaMixerSidList mixer_sid_list;
-		typedef QValueList<snd_mixer_elem_t *> AlsaMixerElemList;
-		AlsaMixerElemList mixer_elem_list;
+		typedef QValueList<snd_mixer_selem_id_t *>AlsaMixerSidList;
+		AlsaMixerSidList mixer_sid_list;
+		typedef QValueList<snd_mixer_elem_t *> AlsaMixerElemList; // !! remove
+		AlsaMixerElemList mixer_elem_list; // !! remove
 
                 bool _initialUpdate;
 		snd_mixer_t *_handle;
--- trunk/KDE/kdemultimedia/kmix/mixer_alsa9.cpp #410176:410177
@@ -190,11 +190,12 @@
 	    // ...but we still want to insert a null value into our mixer element
 	    // list so that the list indexes match up.
 	    mixer_elem_list.append( 0 );
+	    mixer_sid_list.append( 0 );
 	    continue;
 	}
 
 
-	//sid = (snd_mixer_selem_id_t*)malloc(snd_mixer_selem_id_sizeof());  // I believe *we* must malloc it for ourself
+	sid = (snd_mixer_selem_id_t*)malloc(snd_mixer_selem_id_sizeof());  // I believe *we* must malloc it for ourself
 	snd_mixer_selem_get_id( elem, sid );
 
 	bool canRecord = false;
@@ -226,7 +227,7 @@
 		cc = MixDevice::ENUM;
 		vol = new Volume(); // Dummy, unused
 		mixer_elem_list.append( elem );
-		//mixer_sid_list.append( sid );
+		mixer_sid_list.append( sid );
 		
 		// --- get Enum names START ---
 		int numEnumitems = snd_mixer_selem_get_enum_items(elem);
@@ -273,7 +274,7 @@
 		 * it will be created with maxVolume == 0 && minVolume == 0 */
 		vol = new Volume( chn, maxVolumePlay, minVolumePlay, maxVolumeRec, minVolumeRec );
 		mixer_elem_list.append( elem );
-		//mixer_sid_list.append( sid );
+		mixer_sid_list.append( sid );
 		
 		if ( snd_mixer_selem_has_playback_switch ( elem ) ) {   
 			//kdDebug(67100) << "has_playback_switch()" << endl;
@@ -381,6 +382,7 @@
   }
 
   mixer_elem_list.clear();
+  mixer_sid_list.clear();
   m_mixDevices.clear();
 
   kdDebug(67100) << "OUT Mixer_ALSA::close()" << endl;
@@ -389,21 +391,28 @@
 
 
 snd_mixer_elem_t* Mixer_ALSA::getMixerElem(int devnum) {
-/*
 	snd_mixer_elem_t* elem = 0;
 	if ( int( mixer_sid_list.count() ) > devnum ) {
 		snd_mixer_selem_id_t * sid = mixer_sid_list[ devnum ];
+		// The next line (hopefully) only finds selem's, not elem's.
 		elem = snd_mixer_find_selem(_handle, sid);
 
 		if ( elem == 0 ) {
+			// !! Check, whether the warning should be omitted. Probably
+			//    Route controls are non-simple elements.
 			kdDebug(67100) << "Error finding mixer element " << devnum << endl;
 		}
 	}
 	return elem;
-*/
 
+/*
+ I would have liked to use the following trivial implementation instead of the
+ code above. But it will also return elem's. which are not selem's. As there is 
+ no way to check an elem's type (e.g. elem->type == SND_MIXER_ELEM_SIMPLE), callers
+ of getMixerElem() cannot check the type. :-(
 	snd_mixer_elem_t* elem = mixer_elem_list[ devnum ];
 	return elem;
+ */
 }
 
 bool Mixer_ALSA::prepareUpdateFromHW() {
Comment 5 Christian Esken 2005-05-07 00:20:29 UTC
Ali,
thanks for the detailed feedback. I have possibly identified and fixed the problem. You can either apply the patch as seen in comment 4, or you can update your checked out sources.
Attention: The changes are NOT in CVS, but you would need to checkout from the new Subversion repository.
Comment 6 Ali Akcaagac 2005-05-07 03:57:35 UTC
Yep, I am on SVN TRUNK already. Thanks this seem to work perfectly now.

Btw: I have a SB Live 5.1
Comment 7 Thiago Macieira 2005-05-07 06:19:47 UTC
reopening to close with proper status
Comment 8 Thiago Macieira 2005-05-07 06:20:12 UTC
*** Bug has been marked as fixed ***.