[PD-cvs] pd/src m_sched.c,1.5.4.14,1.5.4.15

Tim Blechmann timblech at users.sourceforge.net
Sun Jan 16 17:07:48 CET 2005


Update of /cvsroot/pure-data/pd/src
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv2664

Modified Files:
      Tag: devel_0_38
	m_sched.c 
Log Message:
additional return value for callbacks

Index: m_sched.c
===================================================================
RCS file: /cvsroot/pure-data/pd/src/m_sched.c,v
retrieving revision 1.5.4.14
retrieving revision 1.5.4.15
diff -C2 -d -r1.5.4.14 -r1.5.4.15
*** m_sched.c	15 Jan 2005 22:56:25 -0000	1.5.4.14
--- m_sched.c	16 Jan 2005 16:07:45 -0000	1.5.4.15
***************
*** 659,675 ****
  		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);
  
!             remain = stop-sys_getrealtime();
  		}
! 		while ((remain > 0) && (idle_callback != NULL));
  
          /* sleep for the rest of the time */
! //        if(remain > 0) sys_microsleep(remain);
  		return 0; 
  	}
--- 659,688 ----
  		do
  		{
! 			int status = (idle_callback->function)(idle_callback->argv);
! 			remain = stop-sys_getrealtime();
! 
! 			switch (status)
  			{
+ 				/* callbacks returning 0 will be deleted
+ 				 * beware: if a callback never returns zero, it will run until the end of time, 
+ 				 * blocking other callbacks */
+ 			case 0:
  				freebytes (idle_callback->argv, idle_callback->argc);
  				freebytes ((void*)idle_callback, sizeof(t_sched_callback));
! 				idle_callback = fifo_get(callback_fifo);
  
! 				/* callbacks returning 1 will be run again */
! 			case 1:
! 				break;
! 
! 				/* callbacks returning 2 will be run during the next idle callback */
! 			case 2:
! 				return 0;
! 			}
  		}
! 		while ((idle_callback != NULL) && (remain > 0));
  
          /* sleep for the rest of the time */
!         if(remain > 100) sys_microsleep(remain);
  		return 0; 
  	}





More information about the Pd-cvs mailing list