[PD-cvs] externals/grill/flext/source flext.h,1.18,1.19 flsupport.cpp,1.26,1.27 flsupport.h,1.60,1.61 flthr.cpp,1.22,1.23

xovo at users.sourceforge.net xovo at users.sourceforge.net
Sat Dec 27 04:32:57 CET 2003


Update of /cvsroot/pure-data/externals/grill/flext/source
In directory sc8-pr-cvs1:/tmp/cvs-serv8043/source

Modified Files:
	flext.h flsupport.cpp flsupport.h flthr.cpp 
Log Message:
 ""

Index: flext.h
===================================================================
RCS file: /cvsroot/pure-data/externals/grill/flext/source/flext.h,v
retrieving revision 1.18
retrieving revision 1.19
diff -C2 -d -r1.18 -r1.19
*** flext.h	12 Dec 2003 22:46:40 -0000	1.18
--- flext.h	27 Dec 2003 03:32:55 -0000	1.19
***************
*** 24,31 ****
  
  //! \brief flext version number
! #define FLEXT_VERSION 405
  
  //! \brief flext version string
! #define FLEXT_VERSTR "0.4.5"
  
  //! @}
--- 24,31 ----
  
  //! \brief flext version number
! #define FLEXT_VERSION 406
  
  //! \brief flext version string
! #define FLEXT_VERSTR "0.4.6pre"
  
  //! @}

Index: flsupport.cpp
===================================================================
RCS file: /cvsroot/pure-data/externals/grill/flext/source/flsupport.cpp,v
retrieving revision 1.26
retrieving revision 1.27
diff -C2 -d -r1.26 -r1.27
*** flsupport.cpp	10 Dec 2003 03:32:53 -0000	1.26
--- flsupport.cpp	27 Dec 2003 03:32:55 -0000	1.27
***************
*** 36,39 ****
--- 36,40 ----
  const char *flext::VersionStr() { return FLEXT_VERSTR; }
  
+ 
  void flext::Setup()
  {
***************
*** 69,72 ****
--- 70,113 ----
  
  #ifdef FLEXT_THREADS
+ 
+ #if FLEXT_SYS == FLEXT_SYS_MAX && FLEXT_OS == FLEXT_OS_MAC && FLEXT_THREADS == FLEXT_THR_POSIX
+ 	// for Max OSX/CFM MachO functions have to be imported
+     CFBundleRef bundle = NULL;
+     if (bundle = CFBundleGetBundleWithIdentifier(CFSTR("com.apple.Carbon")))
+ 	{
+ 	    //load pthread function pointers
+ 		pthread_self 		= CFBundleGetFunctionPointerForName(bundle, CFSTR("pthread_self"));
+ 		pthread_equal 		= CFBundleGetFunctionPointerForName(bundle, CFSTR("pthread_equal"));
+ 		pthread_create 		= CFBundleGetFunctionPointerForName(bundle, CFSTR("pthread_create"));
+ 		pthread_cancel 		= CFBundleGetFunctionPointerForName(bundle, CFSTR("pthread_cancel"));
+ 		pthread_testcancel 	= CFBundleGetFunctionPointerForName(bundle, CFSTR("pthread_testcancel"));
+ 		pthread_join 		= CFBundleGetFunctionPointerForName(bundle, CFSTR("pthread_join"));
+ 		pthread_exit 		= CFBundleGetFunctionPointerForName(bundle, CFSTR("pthread_exit"));
+ 
+ 		pthread_attr_init	= CFBundleGetFunctionPointerForName(bundle, CFSTR("pthread_attr_init"));
+ 		pthread_attr_destroy	= CFBundleGetFunctionPointerForName(bundle, CFSTR("pthread_attr_destroy"));
+ 		pthread_attr_setdetachstate	= CFBundleGetFunctionPointerForName(bundle, CFSTR("pthread_attr_setdetachstate"));
+ 
+ 		pthread_attr_getschedparam	= CFBundleGetFunctionPointerForName(bundle, CFSTR("pthread_attr_getschedparam"));
+ 		pthread_attr_setschedparam	= CFBundleGetFunctionPointerForName(bundle, CFSTR("pthread_attr_setschedparam"));
+ 
+ 		pthread_mutex_init	= CFBundleGetFunctionPointerForName(bundle, CFSTR("pthread_mutex_init"));
+ 		pthread_mutex_destroy	= CFBundleGetFunctionPointerForName(bundle, CFSTR("pthread_mutex_destroy"));
+ 		pthread_mutex_lock	= CFBundleGetFunctionPointerForName(bundle, CFSTR("pthread_mutex_lock"));
+ 		pthread_mutex_unlock	= CFBundleGetFunctionPointerForName(bundle, CFSTR("pthread_mutex_unlock"));
+ 		pthread_mutex_trylock	= CFBundleGetFunctionPointerForName(bundle, CFSTR("pthread_mutex_trylock"));
+ 
+ 		pthread_cond_init	= CFBundleGetFunctionPointerForName(bundle, CFSTR("pthread_cond_init"));
+ 		pthread_cond_destroy	= CFBundleGetFunctionPointerForName(bundle, CFSTR("pthread_cond_destroy"));
+ 		pthread_cond_signal	= CFBundleGetFunctionPointerForName(bundle, CFSTR("pthread_cond_signal"));
+ 		pthread_cond_wait	= CFBundleGetFunctionPointerForName(bundle, CFSTR("pthread_cond_wait"));
+ 		pthread_cond_timedwait	= CFBundleGetFunctionPointerForName(bundle, CFSTR("pthread_cond_timedwait"));
+ 
+ 		sched_yield	= CFBundleGetFunctionPointerForName(bundle, CFSTR("sched_yield"));
+ 		sched_get_priority_min	= CFBundleGetFunctionPointerForName(bundle, CFSTR("sched_get_priority_min"));
+ 		sched_get_priority_max	= CFBundleGetFunctionPointerForName(bundle, CFSTR("sched_get_priority_max"));
+     }
+ #endif
+ 
  	thrid = GetThreadId();
      StartHelper();

Index: flsupport.h
===================================================================
RCS file: /cvsroot/pure-data/externals/grill/flext/source/flsupport.h,v
retrieving revision 1.60
retrieving revision 1.61
diff -C2 -d -r1.60 -r1.61
*** flsupport.h	12 Dec 2003 22:46:40 -0000	1.60
--- flsupport.h	27 Dec 2003 03:32:55 -0000	1.61
***************
*** 650,653 ****
--- 650,688 ----
  	*/
  
+ #if FLEXT_SYS == FLEXT_SYS_MAX && FLEXT_OS == FLEXT_OS_MAC && FLEXT_THREADS == FLEXT_THR_POSIX
+ 	// These are function pointers of MachO functions imported to the CFM world
+ 
+ 	static pthread_t (*pthread_self)();
+ 	static int (*pthread_equal)(pthread_t,pthread_t);
+ 	static int (*pthread_create)(pthread_t *,const pthread_attr_t *,void *(*)(void *),void *);
+ 	static int (*pthread_cancel)(pthread_t);
+ 	static void (*pthread_testcancel)(void);
+ 	static int (*pthread_join)(pthread_t,void **);
+ 	static void (*pthread_exit)(void *);
+ 
+ 	static int (*pthread_attr_init)(pthread_attr_t *);
+ 	static int (*pthread_attr_destroy)(pthread_attr_t *);
+ 	static int (*pthread_attr_setdetachstate)(pthread_attr_t *,int);
+ 
+ 	static int (*pthread_getschedparam)(pthread_t,int *,struct sched_param *);
+ 	static int (*pthread_setschedparam)(pthread_t,int,const struct sched_param *);
+ 
+ 	static int (*pthread_mutex_init)(pthread_mutex_t *,const pthread_mutexattr_t *);
+ 	static int (*pthread_mutex_destroy)(pthread_mutex_t *);
+ 	static int (*pthread_mutex_lock)(pthread_mutex_t *);
+ 	static int (*pthread_mutex_unlock)(pthread_mutex_t *);
+ 	static int (*pthread_mutex_trylock)(pthread_mutex_t *);
+ 
+ 	static int (*pthread_cond_init)(pthread_cond_t *,const pthread_condattr_t *);
+ 	static int (*pthread_cond_destroy)(pthread_cond_t *);
+ 	static int (*pthread_cond_signal)(pthread_cond_t *);
+ 	static int (*pthread_cond_wait)(pthread_cond_t *,pthread_mutex_t *);
+ 	static int (*pthread_cond_timedwait)(pthread_cond_t *,pthread_mutex_t *,const struct timespec *);
+ 
+ 	static int (*sched_yield)(void);
+ 	static int (*sched_get_priority_min)(int);
+ 	static int (*sched_get_priority_max)(int);
+ #endif
+ 
  	//! thread type
  #if FLEXT_THREADS == FLEXT_THR_MP

Index: flthr.cpp
===================================================================
RCS file: /cvsroot/pure-data/externals/grill/flext/source/flthr.cpp,v
retrieving revision 1.22
retrieving revision 1.23
diff -C2 -d -r1.22 -r1.23
*** flthr.cpp	12 Dec 2003 22:46:40 -0000	1.22
--- flthr.cpp	27 Dec 2003 03:32:55 -0000	1.23
***************
*** 51,54 ****
--- 51,77 ----
  
  
+ #if defined(FLEXT_THREADS) && FLEXT_SYS == FLEXT_SYS_MAX && FLEXT_OS == FLEXT_OS_MAC && FLEXT_THREADS == FLEXT_THR_POSIX
+ //	utility code taken from from Apple's CFM_MachO_CFM example:
+ //
+ //	This function allocates a block of CFM glue code which contains the instructions to call CFM routines
+ //
+ (void (*)(void *))MachOFunctionPointerForCFMFunctionPointer( (void (*)(void *))cfmfp )
+ {
+ 	// Apple utility code for CFM callback glue
+ 	static const UInt32 tmpl[6] = {0x3D800000, 0x618C0000, 0x800C0000, 0x804C0004, 0x7C0903A6, 0x4E800420};
+     UInt32	*mfp = (UInt32*) NewPtr( sizeof(tmpl) );		//	Must later dispose of allocated memory
+     															//	(this is freed with app heap in this object)
+     mfp[0] = tmpl[0] | ((UInt32)cfmfp >> 16);
+     mfp[1] = tmpl[1] | ((UInt32)cfmfp & 0xFFFF);
+     mfp[2] = tmpl[2];
+     mfp[3] = tmpl[3];
+     mfp[4] = tmpl[4];
+     mfp[5] = tmpl[5];
+     MakeDataExecutable( mfp, sizeof(tmpl) );
+     return (void (*)(void *))mfp;
+ }
+ #endif
+ 
+ 
  flext::thrid_t flext::GetSysThreadId() { return thrid; }
  
***************
*** 78,82 ****
--- 101,110 ----
  
  	thrhelpexit = false;
+ #if FLEXT_SYS == FLEXT_SYS_MAX && FLEXT_OS == FLEXT_OS_MAC
+ 	void (*CFMThrHelper)(void *) = MachOFunctionPointerForCFMFunctionPointer(ThrHelper);
+ 	int ret = pthread_create (&thrhelpid,&attr,(void *(*)(void *))CFMThrHelper,NULL);
+ #else
  	int ret = pthread_create (&thrhelpid,&attr,(void *(*)(void *))ThrHelper,NULL);
+ #endif
  	ok = !ret;
  #elif FLEXT_THREADS == FLEXT_THR_MP
***************
*** 100,103 ****
--- 128,135 ----
          // we are ready for threading now!
      }
+     
+ #if FLEXT_THREADS == FLEXT_THR_POSIX
+ 	pthread_attr_destroy(&attr);
+ #endif    
  	return ok;
  }
***************
*** 191,194 ****
--- 223,230 ----
  	delete thrhelpcond;
  	thrhelpcond = NULL;
+ 	
+ #if FLEXT_THREADS == FLEXT_THR_POSIX
+ 	pthread_attr_destroy(&attr);
+ #endif
  }
  






More information about the Pd-cvs mailing list