Blame src/win32/thread.h

Packit ae9e2a
/*
Packit ae9e2a
 * Copyright (C) the libgit2 contributors. All rights reserved.
Packit ae9e2a
 *
Packit ae9e2a
 * This file is part of libgit2, distributed under the GNU GPL v2 with
Packit ae9e2a
 * a Linking Exception. For full terms see the included COPYING file.
Packit ae9e2a
 */
Packit ae9e2a
Packit ae9e2a
#ifndef INCLUDE_win32_thread_h__
Packit ae9e2a
#define INCLUDE_win32_thread_h__
Packit ae9e2a
Packit ae9e2a
#include "../common.h"
Packit ae9e2a
Packit ae9e2a
#if defined (_MSC_VER)
Packit ae9e2a
#	define GIT_RESTRICT __restrict
Packit ae9e2a
#else
Packit ae9e2a
#	define GIT_RESTRICT __restrict__
Packit ae9e2a
#endif
Packit ae9e2a
Packit ae9e2a
typedef struct {
Packit ae9e2a
	HANDLE thread;
Packit ae9e2a
	void *(*proc)(void *);
Packit ae9e2a
	void *param;
Packit ae9e2a
	void *result;
Packit ae9e2a
} git_thread;
Packit ae9e2a
Packit ae9e2a
typedef CRITICAL_SECTION git_mutex;
Packit ae9e2a
typedef HANDLE git_cond;
Packit ae9e2a
Packit ae9e2a
typedef struct { void *Ptr; } GIT_SRWLOCK;
Packit ae9e2a
Packit ae9e2a
typedef struct {
Packit ae9e2a
	union {
Packit ae9e2a
		GIT_SRWLOCK srwl;
Packit ae9e2a
		CRITICAL_SECTION csec;
Packit ae9e2a
	} native;
Packit ae9e2a
} git_rwlock;
Packit ae9e2a
Packit ae9e2a
int git_threads_init(void);
Packit ae9e2a
Packit ae9e2a
int git_thread_create(git_thread *GIT_RESTRICT,
Packit ae9e2a
	void *(*) (void *),
Packit ae9e2a
	void *GIT_RESTRICT);
Packit ae9e2a
int git_thread_join(git_thread *, void **);
Packit ae9e2a
size_t git_thread_currentid(void);
Packit ae9e2a
void git_thread_exit(void *);
Packit ae9e2a
Packit ae9e2a
int git_mutex_init(git_mutex *GIT_RESTRICT mutex);
Packit ae9e2a
int git_mutex_free(git_mutex *);
Packit ae9e2a
int git_mutex_lock(git_mutex *);
Packit ae9e2a
int git_mutex_unlock(git_mutex *);
Packit ae9e2a
Packit ae9e2a
int git_cond_init(git_cond *);
Packit ae9e2a
int git_cond_free(git_cond *);
Packit ae9e2a
int git_cond_wait(git_cond *, git_mutex *);
Packit ae9e2a
int git_cond_signal(git_cond *);
Packit ae9e2a
Packit ae9e2a
int git_rwlock_init(git_rwlock *GIT_RESTRICT lock);
Packit ae9e2a
int git_rwlock_rdlock(git_rwlock *);
Packit ae9e2a
int git_rwlock_rdunlock(git_rwlock *);
Packit ae9e2a
int git_rwlock_wrlock(git_rwlock *);
Packit ae9e2a
int git_rwlock_wrunlock(git_rwlock *);
Packit ae9e2a
int git_rwlock_free(git_rwlock *);
Packit ae9e2a
Packit ae9e2a
#endif /* INCLUDE_win32_thread_h__ */