[PD-cvs] pd/src m_sched.c,1.5.4.10,1.5.4.11
Tim Blechmann
timblech at users.sourceforge.net
Thu Dec 2 16:19:18 CET 2004
Update of /cvsroot/pure-data/pd/src
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv10680
Modified Files:
Tag: devel_0_38
m_sched.c
Log Message:
updating idle callback system
Index: m_sched.c
===================================================================
RCS file: /cvsroot/pure-data/pd/src/m_sched.c,v
retrieving revision 1.5.4.10
retrieving revision 1.5.4.11
diff -C2 -d -r1.5.4.10 -r1.5.4.11
*** m_sched.c 29 Nov 2004 21:31:23 -0000 1.5.4.10
--- m_sched.c 2 Dec 2004 15:19:15 -0000 1.5.4.11
***************
*** 27,31 ****
--- 27,34 ----
int sys_callbackscheduler = 0; /* if 1: change scheduler to callback based dsp */
+ #include "m_fifo.h"
static t_int run_idle_callbacks(void);
+ static t_sched_callback * idle_callback = NULL;
+
/* tb: }*/
***************
*** 413,416 ****
--- 416,422 ----
sys_sleepgrain = 5000;
sys_initmidiqueue();
+
+ callback_fifo = fifo_init(); /* tb: initialize fifo for idle callbacks */
+
while (!sys_quit)
{
***************
*** 612,684 ****
* { */
! #if 1
! /* linked list of callbacks
! * callback will be freed after returning 0 */
! typedef struct _sched_callback
! {
! t_int (*function) (t_int* argv);
! t_int* argv;
! t_int argc;
! struct _sched_callback* next;
! } t_sched_callback;
!
! /* this is not save ... possibly not atomic */
! static volatile t_sched_callback * cb_fifo_begin = NULL;
! static volatile t_sched_callback * cb_fifo_end = NULL;
!
! void set_callback(t_int (*callback) (t_int* argv), t_int* argv, t_int argc)
! {
! t_sched_callback* new = (t_sched_callback*) getbytes
! (sizeof(t_sched_callback));
!
! new->function = callback;
! new->argv = (t_int*) copybytes (argv, argc * sizeof (t_int));
! new->argc = argc;
! new->next = NULL;
!
! if (cb_fifo_begin != NULL)
! {
! cb_fifo_end->next = new;
! cb_fifo_end = new;
! }
! else
! {
! cb_fifo_begin = new;
! cb_fifo_end = new;
! }
!
! }
!
!
! static t_int run_idle_callbacks(void)
! {
! if (cb_fifo_begin)
! {
! double stop = sys_getrealtime() + sys_sleepgrain;
!
! do
! {
! int resume = cb_fifo_begin->function(cb_fifo_begin->argv);
!
! if (resume == 0)
! {
! t_sched_callback* next = cb_fifo_begin->next;
!
! freebytes (cb_fifo_begin->argv, cb_fifo_begin->argc);
! freebytes ((void*)cb_fifo_begin, sizeof(t_sched_callback));
!
! cb_fifo_begin = next;
! }
! }
! while ( sys_getrealtime() > stop && cb_fifo_begin);
!
! return 0; /* don't sleep */
! }
! return 1; /* sleep now */
! }
!
!
! #else
! #include "m_lockfree_fifo.h"
--- 618,622 ----
* { */
! #include "m_fifo.h"
***************
*** 709,719 ****
}
- static t_sched_callback * idle_callback = NULL;
-
static t_int run_idle_callbacks(void)
{
- if (callback_fifo == NULL)
- callback_fifo = fifo_init();
-
if (idle_callback == NULL)
idle_callback = (t_sched_callback*) fifo_get(callback_fifo);
--- 647,652 ----
More information about the Pd-cvs
mailing list