[linux-audio-dev] Re: [linux-audio-user] hydrogen crashes / extract waves from .mid-files of ddrum

From: Lee Revell <rlrevell@email-addr-hidden-job.com>
Date: Tue Feb 22 2005 - 22:48:43 EET

On Mon, 2005-02-21 at 15:42 +0100, CC-Band wrote:
> hi,
>
> i tried out the agnula demudi project.
>
> jack & hydrogen works fine but sometimes hydrogen crashes immediately.
> what can i do to get information, why?

I am having the exact same problem with Hydrogen. Most of the time it
crashes immediately. If I start it repeatedly it will eventually
succeed.

I have found it's a lot more likely to segfault immediately on startup
if JACK is run in verbose mode, and the crashes are more likely with
lower latencies. 32 frames almost always crashes. 128 almost always
succeeds. 64 is hit or miss. Lower latencies are less likely to crash
on a faster machine.

I have reproduced this across several versions of JACK and Hydrogen on
multiple machines.

I got a backtrace from gdb and this is where it crashes (from
src/lib/Hydrogen.cpp):

inline void audioEngine_process_clearAudioBuffers(uint32_t nFrames)
{
*---> memset( m_pMainBuffer_L, 0, nFrames * sizeof( float ) ); // clear main out Left
        memset( m_pMainBuffer_R, 0, nFrames * sizeof( float ) ); // clear main out Right

As soon as it goes to clear the audio buffers, boom.

As the problem is timing sensitive it's certainly a race condition. I
cannot determine whether the bug is in JACK or hydrogen though.

I have reported the problem on hydrogen-devel and got no response
whatsoever. It's getting to be frustrating as the bug is 100%
reproducible, but I can't even get the Hydrogen developers to ACK my bug
report.

Here is the backtrace.

Lee

(gdb) bt full
#0 0xb759949b in memset (dstpp=0x0, c=0, len=512)
at ../sysdeps/i386/memset.c:65
        d0 = 128
        dstp = 0
        x = 0
#1 0x0807da0f in audioEngine_process_clearAudioBuffers (nFrames=128) at
src/lib/Hydrogen.cpp:702
No locals.
#2 0x08074381 in audioEngine_process (nframes=128, arg=0x0) at
src/lib/Hydrogen.cpp:746
        res = 0
        startTimeval = {tv_sec = 1107297223, tv_usec = 403047}
        sendPatternChange = 183
        res2 = -1218109252
        renderTime_start = {tv_sec = -1217118338, tv_usec = -1208618368}
        i = 3086349340
        pNote = (class Note *) 0x1
        renderTime_end = {tv_sec = 91845001, tv_usec = -1084229004}
        ladspaTime_start = {tv_sec = 52302212, tv_usec = 0}
        ladspaTime_end = {tv_sec = -1208836712, tv_usec = 0}
        val_L = -0.87490797
        val_R = 1.40129846e-45
        fRenderTime = 0
        fLadspaTime = 1.821688e-44
        finishTimeval = {tv_sec = -1208834440, tv_usec = -1084229128}
        sampleRate = 1.17287768e-35
#3 0xb7f2e9f9 in jack_client_thread (arg=0x82f59d0) at client.c:1264
        control = (volatile struct {...} *) 0xb73a3000
        event = {type = GraphReordered, x = {n = 0, port_id = 0, self_id
= 0}, y = {n = 1, ptid = 1, other_id = 1}}
        status = 0 '\0'
        c = 0 '\0'
        err = 0
#4 0xb773fe51 in pthread_start_thread (arg=0xbf5ffbe0) at manager.c:309
        default_params = {__sched_priority = 0}
        request = {req_thread = 0x0, req_kind = REQ_CREATE, req_args =
{create = {attr = 0x0, fn = 0, arg = 0x0, mask = {__val = {
          0 <repeats 32 times>}}}, free = {thread_id = 0}, exit = {code
= 0}, post = 0x0, for_each = {fn = 0, arg = 0x0}}}
        outcome = (void *) 0x0
#5 0xb75f96ea in clone () from /usr/lib/debug/libc.so.6
        fstab_state = {fs_fp = 0x0, fs_buffer = 0x0, fs_mntres =
{mnt_fsname = 0x0, mnt_dir = 0x0, mnt_type = 0x0, mnt_opts = 0x0,
mnt_freq = 0,
    mnt_passno = 0}, fs_ret = {fs_spec = 0x0, fs_file = 0x0, fs_vfstype
= 0x0, fs_mntops = 0x0, fs_type = 0x0, fs_freq = 0, fs_passno = 0}}
        __elf_set___libc_subfreeres_element_fstab_free__ = (const void
*) 0xb762dce0
Received on Wed Feb 23 00:15:11 2005

This archive was generated by hypermail 2.1.8 : Wed Feb 23 2005 - 00:15:12 EET