[PD-cvs] pd/src m_sched.c,1.5.4.16,1.5.4.17

Thomas Grill xovo at users.sourceforge.net
Wed Feb 2 14:51:56 CET 2005


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

Modified Files:
      Tag: devel_0_38
	m_sched.c 
Log Message:
enhanced sleeping behavior

Index: m_sched.c
===================================================================
RCS file: /cvsroot/pure-data/pd/src/m_sched.c,v
retrieving revision 1.5.4.16
retrieving revision 1.5.4.17
diff -C2 -d -r1.5.4.16 -r1.5.4.17
*** m_sched.c	16 Jan 2005 21:51:20 -0000	1.5.4.16
--- m_sched.c	2 Feb 2005 13:51:54 -0000	1.5.4.17
***************
*** 29,33 ****
  #include "m_fifo.h"
  
! static t_int run_idle_callbacks(void);
  t_fifo * callback_fifo = NULL;
  
--- 29,33 ----
  #include "m_fifo.h"
  
! static void run_idle_callbacks(int microsec);
  t_fifo * callback_fifo = NULL;
  
***************
*** 502,513 ****
  #endif
  					/* tb: call idle callbacks */
! 					if (run_idle_callbacks())
! 					{
! 						/* if even that had nothing to do, sleep. */
! 						if (timeforward != SENDDACS_SLEPT)
! 						{
! 							sys_microsleep(sys_sleepgrain);
! 						}
! 					}
  #ifdef THREAD_LOCKING
  					/* T.Grill - leave idle phase -> lock thread lock */
--- 502,507 ----
  #endif
  					/* tb: call idle callbacks */
!                     run_idle_callbacks(timeforward != SENDDACS_SLEPT?sys_sleepgrain:0);
! 
  #ifdef THREAD_LOCKING
  					/* T.Grill - leave idle phase -> lock thread lock */
***************
*** 553,558 ****
  				sys_unlock();
  #endif
! 				if (run_idle_callbacks())
! 					sys_microsleep(sys_sleepgrain);
  				
  #ifdef THREAD_LOCKING
--- 547,551 ----
  				sys_unlock();
  #endif
! 				run_idle_callbacks(sys_sleepgrain);
  				
  #ifdef THREAD_LOCKING
***************
*** 652,656 ****
  static t_sched_callback * idle_callback = NULL;
  
! static t_int run_idle_callbacks(void)
  {
  	if (idle_callback == NULL)
--- 645,649 ----
  static t_sched_callback * idle_callback = NULL;
  
! static void run_idle_callbacks(int sleep)
  {
  	if (idle_callback == NULL)
***************
*** 660,668 ****
  	{
          double remain;
! 		double stop = sys_getrealtime() + sys_sleepgrain;
  		do
  		{
  			int status = (idle_callback->function)(idle_callback->argv);
! 			remain = stop-sys_getrealtime();
  
  			switch (status)
--- 653,661 ----
  	{
          double remain;
! 		double stop = sys_getrealtime()*1.e6 + microsec;
  		do
  		{
  			int status = (idle_callback->function)(idle_callback->argv);
! 			remain = stop-sys_getrealtime()*1.e6;
  
  			switch (status)
***************
*** 690,697 ****
  		/* sleep for the rest of the time */
          if(remain > 100) sys_microsleep(remain);
- 		return 0; 
  	}
! 	else
! 		return 1; /* sleep */
  }
  
--- 683,689 ----
  		/* sleep for the rest of the time */
          if(remain > 100) sys_microsleep(remain);
  	}
!     else
!         sys_microsleep(microsec);
  }
  
***************
*** 700,704 ****
  static t_sched_callback *ringbuffer_head;
  
! static t_int run_idle_callbacks(void)
  {
  	t_sched_callback * new_callback;
--- 692,696 ----
  static t_sched_callback *ringbuffer_head;
  
! static void run_idle_callbacks(int microsec)
  {
  	t_sched_callback * new_callback;
***************
*** 726,730 ****
  	{
          double remain;
! 		double stop = sys_getrealtime() + sys_sleepgrain;
  		t_sched_callback * idle_callback = ringbuffer_head;
  		t_sched_callback * last = NULL;
--- 718,722 ----
  	{
          double remain;
! 		double stop = sys_getrealtime()*1.e6 + microsec;
  		t_sched_callback * idle_callback = ringbuffer_head;
  		t_sched_callback * last = NULL;
***************
*** 734,738 ****
  		{
  			int status = (idle_callback->function)(idle_callback->argv);
- 			remain = stop-sys_getrealtime();
  
  			switch (status)
--- 726,729 ----
***************
*** 760,773 ****
  				idle_callback = idle_callback->next;
  			}
! 		}
  		while ((idle_callback != NULL) && (remain > 0));
  
- 	sleep:
  		/* sleep for the rest of the time */
!         if(remain > 100) sys_microsleep(remain);
! 		return 0; 
  	}
! 	else
! 		return 1; /* sleep */
  }
  #endif
--- 751,765 ----
  				idle_callback = idle_callback->next;
  			}
! 
!             remain = stop-sys_getrealtime()*1.e6;
!         }
  		while ((idle_callback != NULL) && (remain > 0));
  
  		/* sleep for the rest of the time */
!         if(remain > 100) 
!             sys_microsleep(remain);
  	}
!     else
!         sys_microsleep(microsec);
  }
  #endif





More information about the Pd-cvs mailing list