mirror of
				https://github.com/f4exb/sdrangel.git
				synced 2025-11-03 13:11:20 -05:00 
			
		
		
		
	- pthread barriers implementation. - clock time.h - libiconv link - Support for dylib loading - CMake project fixes QTEditor parent project file.
		
			
				
	
	
		
			77 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			77 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/*
 | 
						|
 * APPLE Compatibility
 | 
						|
 */
 | 
						|
 | 
						|
#ifdef __APPLE__
 | 
						|
 | 
						|
#include <pthread.h>
 | 
						|
#include <errno.h>
 | 
						|
 | 
						|
#include "apple_compat.h"
 | 
						|
 | 
						|
int pthread_barrier_init(pthread_barrier_t *barrier, const pthread_barrierattr_t *attr, unsigned int count)
 | 
						|
{
 | 
						|
    if(count == 0)
 | 
						|
    {
 | 
						|
        errno = EINVAL;
 | 
						|
        return -1;
 | 
						|
    }
 | 
						|
    if(pthread_mutex_init(&barrier->mutex, 0) < 0)
 | 
						|
    {
 | 
						|
        return -1;
 | 
						|
    }
 | 
						|
    if(pthread_cond_init(&barrier->cond, 0) < 0)
 | 
						|
    {
 | 
						|
        pthread_mutex_destroy(&barrier->mutex);
 | 
						|
        return -1;
 | 
						|
    }
 | 
						|
    barrier->tripCount = count;
 | 
						|
    barrier->count = 0;
 | 
						|
 | 
						|
    return 0;
 | 
						|
}
 | 
						|
 | 
						|
int pthread_barrier_destroy(pthread_barrier_t *barrier)
 | 
						|
{
 | 
						|
    pthread_cond_destroy(&barrier->cond);
 | 
						|
    pthread_mutex_destroy(&barrier->mutex);
 | 
						|
    return 0;
 | 
						|
}
 | 
						|
 | 
						|
int pthread_barrier_wait(pthread_barrier_t *barrier)
 | 
						|
{
 | 
						|
    pthread_mutex_lock(&barrier->mutex);
 | 
						|
    ++(barrier->count);
 | 
						|
    if(barrier->count >= barrier->tripCount)
 | 
						|
    {
 | 
						|
        barrier->count = 0;
 | 
						|
        pthread_cond_broadcast(&barrier->cond);
 | 
						|
        pthread_mutex_unlock(&barrier->mutex);
 | 
						|
        return 1;
 | 
						|
    }
 | 
						|
    else
 | 
						|
    {
 | 
						|
        pthread_cond_wait(&barrier->cond, &(barrier->mutex));
 | 
						|
        pthread_mutex_unlock(&barrier->mutex);
 | 
						|
        return 0;
 | 
						|
    }
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
 * Missing POSIX RealTime/Monotonic Clock
 | 
						|
 */
 | 
						|
#include <mach/mach_time.h>
 | 
						|
 | 
						|
int clock_gettime(int clk_id, struct timespec *t) {
 | 
						|
    mach_timebase_info_data_t timebase;
 | 
						|
    mach_timebase_info(&timebase);
 | 
						|
    uint64_t time;
 | 
						|
    time = mach_absolute_time();
 | 
						|
    double nseconds = ((double)time * (double)timebase.numer)/((double)timebase.denom);
 | 
						|
    double seconds = ((double)time * (double)timebase.numer)/((double)timebase.denom * 1e9);
 | 
						|
    t->tv_sec = seconds;
 | 
						|
    t->tv_nsec = nseconds;
 | 
						|
    return 0;
 | 
						|
}
 | 
						|
 | 
						|
#endif // APPLE Compatibility
 |