Blame src/hdr_thread.c

rpm-build 2ca94e
/**
rpm-build 2ca94e
* hdr_thread.c
rpm-build 2ca94e
* Written by Philip Orwig and released to the public domain,
rpm-build 2ca94e
* as explained at http://creativecommons.org/publicdomain/zero/1.0/
rpm-build 2ca94e
*/
rpm-build 2ca94e
rpm-build 2ca94e
#include <stdlib.h>
rpm-build 2ca94e
#include "hdr_thread.h"
rpm-build 2ca94e
rpm-build 2ca94e
struct hdr_mutex* hdr_mutex_alloc(void)
rpm-build 2ca94e
{
rpm-build 2ca94e
    return malloc(sizeof(hdr_mutex));
rpm-build 2ca94e
}
rpm-build 2ca94e
rpm-build 2ca94e
void hdr_mutex_free(struct hdr_mutex* mutex)
rpm-build 2ca94e
{
rpm-build 2ca94e
    free(mutex);
rpm-build 2ca94e
}
rpm-build 2ca94e
rpm-build 2ca94e
#if defined(_WIN32) || defined(_WIN64) || defined(__CYGWIN__)
rpm-build 2ca94e
rpm-build 2ca94e
#if !defined(WIN32_LEAN_AND_MEAN)
rpm-build 2ca94e
#define WIN32_LEAN_AND_MEAN
rpm-build 2ca94e
#endif
rpm-build 2ca94e
rpm-build 2ca94e
#include <windows.h>
rpm-build 2ca94e
#include <WinSock2.h>
rpm-build 2ca94e
rpm-build 2ca94e
int hdr_mutex_init(struct hdr_mutex* mutex)
rpm-build 2ca94e
{
rpm-build 2ca94e
    InitializeCriticalSection((CRITICAL_SECTION*)(mutex->_critical_section));
rpm-build 2ca94e
    return 0;
rpm-build 2ca94e
}
rpm-build 2ca94e
rpm-build 2ca94e
void hdr_mutex_destroy(struct hdr_mutex* mutex)
rpm-build 2ca94e
{
rpm-build 2ca94e
    DeleteCriticalSection((CRITICAL_SECTION*)(mutex->_critical_section));
rpm-build 2ca94e
}
rpm-build 2ca94e
rpm-build 2ca94e
void hdr_mutex_lock(struct hdr_mutex* mutex)
rpm-build 2ca94e
{
rpm-build 2ca94e
    EnterCriticalSection((CRITICAL_SECTION*)(mutex->_critical_section));
rpm-build 2ca94e
}
rpm-build 2ca94e
rpm-build 2ca94e
void hdr_mutex_unlock(struct hdr_mutex* mutex)
rpm-build 2ca94e
{
rpm-build 2ca94e
    LeaveCriticalSection((CRITICAL_SECTION*)(mutex->_critical_section));
rpm-build 2ca94e
}
rpm-build 2ca94e
rpm-build 2ca94e
void hdr_yield()
rpm-build 2ca94e
{
rpm-build 2ca94e
    Sleep(0);
rpm-build 2ca94e
}
rpm-build 2ca94e
rpm-build 2ca94e
int hdr_usleep(unsigned int useconds)
rpm-build 2ca94e
{
rpm-build 2ca94e
    struct timeval tv;
rpm-build 2ca94e
rpm-build 2ca94e
    tv.tv_sec = (long)useconds / 1000000;
rpm-build 2ca94e
    tv.tv_usec = useconds % 1000000;
rpm-build 2ca94e
    select(0, NULL, NULL, NULL, &tv;;
rpm-build 2ca94e
rpm-build 2ca94e
    return 0;
rpm-build 2ca94e
}
rpm-build 2ca94e
rpm-build 2ca94e
rpm-build 2ca94e
#else
rpm-build 2ca94e
#include <pthread.h>
rpm-build 2ca94e
#include <unistd.h>
rpm-build 2ca94e
rpm-build 2ca94e
int hdr_mutex_init(struct hdr_mutex* mutex)
rpm-build 2ca94e
{
rpm-build 2ca94e
    return pthread_mutex_init(&mutex->_mutex, NULL);
rpm-build 2ca94e
}
rpm-build 2ca94e
rpm-build 2ca94e
void hdr_mutex_destroy(struct hdr_mutex* mutex)
rpm-build 2ca94e
{
rpm-build 2ca94e
    pthread_mutex_destroy(&mutex->_mutex);
rpm-build 2ca94e
}
rpm-build 2ca94e
rpm-build 2ca94e
void hdr_mutex_lock(struct hdr_mutex* mutex)
rpm-build 2ca94e
{
rpm-build 2ca94e
    pthread_mutex_lock(&mutex->_mutex);
rpm-build 2ca94e
}
rpm-build 2ca94e
rpm-build 2ca94e
void hdr_mutex_unlock(struct hdr_mutex* mutex)
rpm-build 2ca94e
{
rpm-build 2ca94e
    pthread_mutex_unlock(&mutex->_mutex);
rpm-build 2ca94e
}
rpm-build 2ca94e
rpm-build 2ca94e
void hdr_yield()
rpm-build 2ca94e
{
rpm-build 2ca94e
    sched_yield();
rpm-build 2ca94e
}
rpm-build 2ca94e
rpm-build 2ca94e
int hdr_usleep(unsigned int useconds)
rpm-build 2ca94e
{
rpm-build 2ca94e
    return usleep(useconds);
rpm-build 2ca94e
}
rpm-build 2ca94e
rpm-build 2ca94e
rpm-build 2ca94e
#endif