! Please note that this is a snapshot of our old Bugzilla server, which is read only since May 29, 2020. Please go to gitlab.xfce.org for our new server !
xfce4-mixer crashes and resets gtk2 theme
Status:
RESOLVED: INVALID
Product:
Xfce4-mixer
Component:
General

Comments

Description Hugh Greenberg 2005-10-06 03:20:38 CEST
Clicking on the options menu in xfce4-mixer causes xfce4-mixer to crash.  Also
the gtk2 theme that I use gets set to the default when it crashes.  I get the
same behavior from clicking on the sound button in the xfce settings manager. 
The xfce4-mixer does work though, just not the options.

Reproducible: Always
Steps to Reproduce:
1. Open xfce4-mixer
2. Click the File Menu and select "Options"
3. Or, click on the Sound button in the xfce settings manager

Actual Results:  
When I click on the Options menu item, the mixer crashes and my gtk2 theme gets
reset to the default theme.  If I click on the Sound button in the xfce settings
manager, just my gtk2 theme gets reset.

Expected Results:  
I don't know what is supposed to happen, but I'm sure its not supposed to crash.

I have a usb sound device and a regular sound card.  I am using alsa.
Comment 1 dannym editbugs 2005-10-06 16:40:33 CEST
can you install with debugging information and get a backtrace ?

ps aux |grep xfce-mcs-manager

note the process id.

gdb
attach theprocessidhere
*wait until it crashes*
bt


thanks
Comment 2 dannym editbugs 2005-10-08 18:22:54 CEST
I can reproduce that now.

alsa: Unable to find simple control 'Master',0
Program received signal SIGSEGV, Segmentation fault.
[Switching to Thread -1217395008 (LWP 31117)]
snd_async_del_handler (handler=0x82b3430) at list.h:85
85      list.h: Datei oder Verzeichnis nicht gefunden.
        in list.h
(gdb) bt
#0  snd_async_del_handler (handler=0x82b3430) at list.h:85
#1  0xb71da129 in snd_ctl_close (ctl=0x82b3430) at control.c:94
#2  0xb71d4e67 in snd_hctl_close (hctl=0x81248e8) at hcontrol.c:117
#3  0xb71def21 in snd_mixer_close (mixer=0x810f538) at mixer.c:502
#4  0xb726f3b9 in find_master () at vc_alsa.c:89
#5  0xb726f676 in vc_reinit_device () at vc_alsa.c:153
#6  0xb7270578 in vc_set_device (which=0x82ae0d0 "#1: MPU-401 UART")
    at vc.c:104
#7  0xb72759c2 in xfce_mixer_settingsbox_device_changed_cb (self=0x8299b58)
    at mixer-settingsbox.gob:214
#8  0xb7275f81 in xfce_mixer_settingsbox_device_changed_t_cb (self=0x8299b58,
    om=0x827a2b0) at mixer-settingsbox.gob:185
#9  0xb79d9ab3 in g_cclosure_marshal_VOID__VOID ()
   from /usr/lib/libgobject-2.0.so.0
#10 0xb79ce3a8 in g_closure_invoke () from /usr/lib/libgobject-2.0.so.0
#11 0xb79dcb13 in g_signal_stop_emission () from /usr/lib/libgobject-2.0.so.0
#12 0xb79de150 in g_signal_emit_valist () from /usr/lib/libgobject-2.0.so.0
#13 0xb79de4c3 in g_signal_emit () from /usr/lib/libgobject-2.0.so.0
#14 0xb7dc4686 in gtk_option_menu_get_history ()
   from /usr/lib/libgtk-x11-2.0.so.0
#15 0xb7275d0d in xfce_mixer_settingsbox_devicelst_updated (self=0x8299710)
    at mixer-settingsbox.gob:292
#16 0xb7275df0 in xfce_mixer_settingsbox_load (self=0x8299b58)
    at mixer-settingsbox.gob:77
#17 0xb727493e in run_dialog (plugin=0x80f1800) at sound.c:120
#18 0x08049f3d in delayed_run_plugin_dialog (plugin=0x0)
---Type <return> to continue, or q <return> to quit---q
 at xfce-mcs-dialog.c:63Quit
(gdb) frame 1
#1  0xb71da129 in snd_ctl_close (ctl=0x82b3430) at control.c:94
94                      snd_async_del_handler(h);
(gdb) print h
No symbol "h" in current context.
??

will investigate...
Comment 3 dannym editbugs 2005-10-08 18:29:38 CEST
with alsa-lib-1.0.9 (ubuntu breezy), that is.

list.h:

/*
 * Delete a list entry by making the prev/next entries
 * point to each other.
 *
 * This is only for internal list manipulation where we know
 * the prev/next entries already!
 */
static __inline__ void __list_del(struct list_head * prev,
                                  struct list_head * next)
{
        next->prev = prev; <--- line 85
        prev->next = next;
}  

control.c:

int snd_ctl_close(snd_ctl_t *ctl)
{
        int err;
        while (!list_empty(&ctl->async_handlers)) {
                snd_async_handler_t *h = list_entry(&ctl->async_handlers.next, 
snd_async_handler_t, hlist);
                snd_async_del_handler(h); <--- line 94
        }
        err = ctl->ops->close(ctl);
        if (ctl->name)
                free(ctl->name);
        if (ctl->dl_handle)
                snd_dlclose(ctl->dl_handle);
        free(ctl);
        return err;
}

hcontrol.c:
int snd_hctl_close(snd_hctl_t *hctl)   
{
        int err;
  
        assert(hctl);
        err = snd_ctl_close(hctl->ctl); <--- line 117
        snd_hctl_free(hctl);
        free(hctl);
        return err;
}

mixer.c:  
/**
 * \brief Close a mixer and free all related resources
 * \param mixer Mixer handle
 * \return 0 on success otherwise a negative error code
 */
int snd_mixer_close(snd_mixer_t *mixer)
{
        int res = 0;  
        assert(mixer);
        while (!list_empty(&mixer->classes)) {
                snd_mixer_class_t *c;
                c = list_entry(mixer->classes.next, snd_mixer_class_t, list);
                snd_mixer_class_unregister(c);
        }
        assert(list_empty(&mixer->elems));
        assert(mixer->count == 0);
        if (mixer->pelems) {
                free(mixer->pelems); 
                mixer->pelems = NULL;
        }
        while (!list_empty(&mixer->slaves)) {
                int err;
                snd_mixer_slave_t *s;
                s = list_entry(mixer->slaves.next, snd_mixer_slave_t, list);
                err = snd_hctl_close(s->hctl); <-- line 502
                if (err < 0)
                        res = err; 
                list_del(&s->list);
                free(s);
        }
        free(mixer);
        return res;
}

vc_alsa.c:
static void find_master(void)
{
        int             err;
        snd_mixer_selem_id_t    *sid, *sid2;
        char buf[12] = "Master";
        char buf2[12] = "PCM";

        elem = NULL;

        snd_mixer_selem_id_alloca(&sid);
        snd_mixer_selem_id_set_index(sid, 0); 
        snd_mixer_selem_id_set_name(sid, buf);

        snd_mixer_selem_id_alloca(&sid2);
        snd_mixer_selem_id_set_index(sid2, 0);  
        snd_mixer_selem_id_set_name(sid2, buf2);

        if (handle) {
                snd_mixer_close(handle); <--- line 89
                handle = NULL;
        }
...
static int vc_reinit_device(void)
{
        find_master(); <-- line 153
        if (!elem) return -1;

        return 0;
}

hmm.... why...


Comment 4 LiNuCe 2005-10-27 14:03:12 CEST
Same problem with XFCE 4.2.2 and ALSA 1.0.8 :

- Open a X terminal
- Launch xfce4-mixer
- Go to File > Options : xfce-mcs-manager quits

-- 
LiNuCe
Comment 5 dannym editbugs 2006-05-30 22:14:50 CEST
Can't do anything about alsa bugs ... let's see if it happens again?

Bug #1176

Reported by:
Hugh Greenberg
Reported on: 2005-10-06
Last modified on: 2009-07-14

People

CC List:
0 users

Version

Attachments

Additional information