[PD-cvs] pd/src m_sched.c,1.5.4.9,1.5.4.10
Tim Blechmann
timblech at users.sourceforge.net
Mon Nov 29 22:31:26 CET 2004
- Previous message: [PD-cvs] pd/src m_simd_sse_gcc.c,1.1.4.6,1.1.4.7 m_simd_sse_gcc.h,1.1.4.2,1.1.4.3 m_simd_sse_vc.h,1.1.4.2,1.1.4.3 m_simd_sse_vc.c,1.1.4.4,1.1.4.5
- Next message: [PD-cvs] pd INSTALL.txt,1.1.1.1,1.2
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
Update of /cvsroot/pure-data/pd/src
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv30377
Modified Files:
Tag: devel_0_38
m_sched.c
Log Message:
updated callback fifo
Index: m_sched.c
===================================================================
RCS file: /cvsroot/pure-data/pd/src/m_sched.c,v
retrieving revision 1.5.4.9
retrieving revision 1.5.4.10
diff -C2 -d -r1.5.4.9 -r1.5.4.10
*** m_sched.c 26 Nov 2004 10:11:04 -0000 1.5.4.9
--- m_sched.c 29 Nov 2004 21:31:23 -0000 1.5.4.10
***************
*** 394,400 ****
int (*sys_idlehook)(void);
-
-
-
int m_scheduler( void)
{
--- 394,397 ----
***************
*** 548,559 ****
sys_unlock();
#endif
!
! /* sleep: the callback might run sched_tick during this time */
! sys_microsleep(sys_sleepgrain / 10);
!
! /* call externally installed idle function if any. */
! /* tb: is there a more elegant way to do this? */
! // sys_idlehook();
!
#ifdef THREAD_LOCKING
sys_lock();
--- 545,551 ----
sys_unlock();
#endif
! if (run_idle_callbacks())
! sys_microsleep(sys_sleepgrain);
!
#ifdef THREAD_LOCKING
sys_lock();
***************
*** 688,693 ****
#else
! #error to be implemented
#endif
--- 680,737 ----
#else
+ #include "m_lockfree_fifo.h"
!
! /* 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;
! } t_sched_callback;
!
! t_fifo * callback_fifo = 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;
!
! if (callback_fifo == NULL)
! callback_fifo = fifo_init();
!
! fifo_put(callback_fifo, new);
! }
!
! 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);
!
! if (idle_callback != NULL)
! {
! double stop = sys_getrealtime() + sys_sleepgrain;
! do
! {
! if ( ((idle_callback->function)(idle_callback->argv)) == 0)
! {
! freebytes (idle_callback->argv, idle_callback->argc);
! freebytes ((void*)idle_callback, sizeof(t_sched_callback));
! idle_callback = fifo_get(callback_fifo);
! }
! }
! while ( (sys_getrealtime() > stop) && (idle_callback != NULL));
! }
! }
#endif
- Previous message: [PD-cvs] pd/src m_simd_sse_gcc.c,1.1.4.6,1.1.4.7 m_simd_sse_gcc.h,1.1.4.2,1.1.4.3 m_simd_sse_vc.h,1.1.4.2,1.1.4.3 m_simd_sse_vc.c,1.1.4.4,1.1.4.5
- Next message: [PD-cvs] pd INSTALL.txt,1.1.1.1,1.2
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
More information about the Pd-cvs
mailing list