Linux.com

questions about real-time programming

Link to this post 10 Jun 10

I write a music composition application in my free time. It's called ags. I didn't work on it for months and now I don't know if there is a bug in it, which I don't know about or something changed recently in real-time programming with GNU/Linux.
I use debian GNU/Linux unstable with up-to-date software and a self compiled RT Kernel.
`ags` has three threads one for the gui, one for playing 4 buffers and one for processing the audio network. I posted some of the code below, which should run in real-time! I believe that the synchronization is the problem.

void*
ags_devout_play_functions(void *devout0)
{
AgsDevout *devout;
GStaticMutex mutex = G_STATIC_MUTEX_INIT;
void ags_devout_play_functions_timing(){
while((AGS_DEVOUT_WAIT_DEVICE & (devout->flags)) != 0){
g_cond_wait(devout->play_functions_cond,
g_static_mutex_get_mutex(&mutex));
}

devout->flags |= AGS_DEVOUT_WAIT_RECALL;
devout->flags |= AGS_DEVOUT_WAIT_DEVICE;
g_static_mutex_unlock(&mutex);
}

/* ... */

g_static_mutex_lock(&mutex);
devout->flags &= (~AGS_DEVOUT_WAIT_RECALL);

if((AGS_DEVOUT_WAIT_DEVICE & devout->flags) != 0){
ags_devout_play_functions_timing();
}else{
g_cond_broadcast(devout->play_cond);
g_static_mutex_unlock(&mutex);
}
}

return(NULL);
}
void*
ags_devout_alsa_play(void *devout0)
{
AgsDevout *devout;
GStaticMutex mutex = G_STATIC_MUTEX_INIT;
void ags_devout_play_timing(){
while((AGS_DEVOUT_WAIT_RECALL & (devout->flags)) != 0){
g_cond_wait(devout->play_cond,
g_static_mutex_get_mutex(&mutex));
}

devout->flags |= AGS_DEVOUT_WAIT_RECALL;
devout->flags |= AGS_DEVOUT_WAIT_DEVICE;
g_static_mutex_unlock(&mutex);
}

/*...*/

g_static_mutex_lock(&mutex);
devout->flags &= (~AGS_DEVOUT_WAIT_DEVICE);

if((AGS_DEVOUT_WAIT_RECALL & (devout->flags)) != 0){
ags_devout_play_timing();
}else{
g_cond_broadcast(devout->play_functions_cond);
g_static_mutex_unlock(&mutex);
}

/* ... */

}

Link to this post 13 Jun 10

Sorry, I found a new bug in my application. I introduced a new list of effects (AgsRecalls) in a object (AgsAudio) and didn't move a timer (AgsDelay) to the right place. It's probably the cause of the ugly sound output and I'm going to fix it!

Who we are ?

The Linux Foundation is a non-profit consortium dedicated to the growth of Linux.

More About the foundation...

Frequent Questions

Join / Linux Training / Board