[PD-cvs] externals/tb/sndfiler/src sndfiler.c,1.6,1.7

Thomas Grill xovo at users.sourceforge.net
Thu Jan 19 23:21:03 CET 2006


Update of /cvsroot/pure-data/externals/tb/sndfiler/src
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv12804/src

Modified Files:
	sndfiler.c 
Log Message:
better fixes for OSX (use kernel functions)

Index: sndfiler.c
===================================================================
RCS file: /cvsroot/pure-data/externals/tb/sndfiler/src/sndfiler.c,v
retrieving revision 1.6
retrieving revision 1.7
diff -C2 -d -r1.6 -r1.7
*** sndfiler.c	19 Jan 2006 21:02:12 -0000	1.6
--- sndfiler.c	19 Jan 2006 22:21:01 -0000	1.7
***************
*** 45,48 ****
--- 45,49 ----
  #include "m_pd.h"
  #include "m_fifo.h"
+ 
  #include "pthread.h"
  #include "semaphore.h"
***************
*** 69,72 ****
--- 70,85 ----
  #endif /* _POSIX_MEMLOCK */
  
+ #ifdef __APPLE__
+ #include <mach/semaphore.h>
+ #define SEM_T semaphore_t
+ #define SEM_INIT(s) (semaphore_create(mach_task_self(),&s,SYNC_POLICY_FIFO,0) == 0)
+ #define SEM_SIGNAL(s) semaphore_signal(s)
+ #define SEM_WAIT(s) semaphore_wait(s)
+ #else
+ #define SEM_T sem_t
+ #define SEM_INIT(s) (sem_init(&s,0,0) == 0)
+ #define SEM_SIGNAL(s) sem_post(&s)
+ #define SEM_WAIT(s) sem_wait(&s)
+ #endif
  
  /************ forward declarations **************/
***************
*** 130,134 ****
  {
      t_fifo* x_jobs;
!     sem_t* sem;
  } t_sfqueue;
  
--- 143,147 ----
  {
      t_fifo* x_jobs;
!     SEM_T sem;
  } t_sfqueue;
  
***************
*** 158,162 ****
      {
          t_sfprocess * me;
!         sem_wait(sndfiler_queue.sem);
  
          while (me = (t_sfprocess *)fifo_get(sndfiler_queue.x_jobs))
--- 171,175 ----
      {
          t_sfprocess * me;
!         SEM_WAIT(sndfiler_queue.sem);
  
          while (me = (t_sfprocess *)fifo_get(sndfiler_queue.x_jobs))
***************
*** 179,192 ****
      //initialize queue
      sndfiler_queue.x_jobs = fifo_init();
! #ifdef __APPLE__
! 	sndfiler_queue.sem = sem_open("sndfilerthread",O_CREAT|O_EXCL,0,0);
!     if(sndfiler_queue.sem == SEM_FAILED)
!         error("Couldn't create sndfiler semaphore: %i",errno);
! #else
! 	sndfiler_queue.sem = (sem_t *)getbytes(sizeof(sem_t));
! 	status = sem_init(sndfiler_queue.sem,0,0);
!     if(status != 0)
          error("Couldn't create sndfiler semaphore: %i",status);
- #endif
  	
      // initialize thread
--- 192,199 ----
      //initialize queue
      sndfiler_queue.x_jobs = fifo_init();
! 
! 	status = SEM_INIT(sndfiler_queue.sem);
!     if(!status)
          error("Couldn't create sndfiler semaphore: %i",status);
  	
      // initialize thread
***************
*** 234,238 ****
      fifo_put(sndfiler_queue.x_jobs, process);
  
!     sem_post(sndfiler_queue.sem);
  }
  
--- 241,245 ----
      fifo_put(sndfiler_queue.x_jobs, process);
  
!     SEM_SIGNAL(sndfiler_queue.sem);
  }
  
***************
*** 469,473 ****
      fifo_put(sndfiler_queue.x_jobs, process);
  
!     sem_post(sndfiler_queue.sem);
  }
  
--- 476,480 ----
      fifo_put(sndfiler_queue.x_jobs, process);
  
!     SEM_SIGNAL(sndfiler_queue.sem);
  }
  





More information about the Pd-cvs mailing list