mirror of
				https://git.proxmox.com/git/libgit2
				synced 2025-11-04 10:33:00 +00:00 
			
		
		
		
	threads: split up OS-dependent thread-condition code
This commit is contained in:
		
							parent
							
								
									20d078dff1
								
							
						
					
					
						commit
						139bffa074
					
				@ -46,13 +46,6 @@ typedef git_atomic git_atomic_ssize;
 | 
			
		||||
#   include "unix/pthread.h"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/* Pthreads condition vars */
 | 
			
		||||
#define git_cond pthread_cond_t
 | 
			
		||||
#define git_cond_init(c)	pthread_cond_init(c, NULL)
 | 
			
		||||
#define git_cond_free(c) 	pthread_cond_destroy(c)
 | 
			
		||||
#define git_cond_wait(c, l)	pthread_cond_wait(c, l)
 | 
			
		||||
#define git_cond_signal(c)	pthread_cond_signal(c)
 | 
			
		||||
 | 
			
		||||
/* Pthread (-ish) rwlock
 | 
			
		||||
 *
 | 
			
		||||
 * This differs from normal pthreads rwlocks in two ways:
 | 
			
		||||
 | 
			
		||||
@ -24,4 +24,12 @@ typedef struct {
 | 
			
		||||
#define git_mutex_unlock(a)     pthread_mutex_unlock(a)
 | 
			
		||||
#define git_mutex_free(a)	pthread_mutex_destroy(a)
 | 
			
		||||
 | 
			
		||||
/* Git condition vars */
 | 
			
		||||
#define git_cond pthread_cond_t
 | 
			
		||||
#define git_cond_init(c)	pthread_cond_init(c, NULL)
 | 
			
		||||
#define git_cond_free(c) 	pthread_cond_destroy(c)
 | 
			
		||||
#define git_cond_wait(c, l)	pthread_cond_wait(c, l)
 | 
			
		||||
#define git_cond_signal(c)	pthread_cond_signal(c)
 | 
			
		||||
#define git_cond_broadcast(c)	pthread_cond_broadcast(c)
 | 
			
		||||
 | 
			
		||||
#endif /* INCLUDE_unix_pthread_h__ */
 | 
			
		||||
 | 
			
		||||
@ -91,12 +91,8 @@ int git_mutex_unlock(git_mutex *mutex)
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int pthread_cond_init(pthread_cond_t *cond, const pthread_condattr_t *attr)
 | 
			
		||||
int git_cond_init(git_cond *cond)
 | 
			
		||||
{
 | 
			
		||||
	/* We don't support non-default attributes. */
 | 
			
		||||
	if (attr)
 | 
			
		||||
		return EINVAL;
 | 
			
		||||
 | 
			
		||||
	/* This is an auto-reset event. */
 | 
			
		||||
	*cond = CreateEventW(NULL, FALSE, FALSE, NULL);
 | 
			
		||||
	assert(*cond);
 | 
			
		||||
@ -106,7 +102,7 @@ int pthread_cond_init(pthread_cond_t *cond, const pthread_condattr_t *attr)
 | 
			
		||||
	return *cond ? 0 : ENOMEM;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int pthread_cond_destroy(pthread_cond_t *cond)
 | 
			
		||||
int git_cond_free(git_cond *cond)
 | 
			
		||||
{
 | 
			
		||||
	BOOL closed;
 | 
			
		||||
 | 
			
		||||
@ -121,7 +117,7 @@ int pthread_cond_destroy(pthread_cond_t *cond)
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int pthread_cond_wait(pthread_cond_t *cond, git_mutex *mutex)
 | 
			
		||||
int git_cond_wait(git_cond *cond, git_mutex *mutex)
 | 
			
		||||
{
 | 
			
		||||
	int error;
 | 
			
		||||
	DWORD wait_result;
 | 
			
		||||
@ -142,7 +138,7 @@ int pthread_cond_wait(pthread_cond_t *cond, git_mutex *mutex)
 | 
			
		||||
	return git_mutex_lock(mutex);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int pthread_cond_signal(pthread_cond_t *cond)
 | 
			
		||||
int git_cond_signal(git_cond *cond)
 | 
			
		||||
{
 | 
			
		||||
	BOOL signaled;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -29,7 +29,7 @@ typedef int pthread_attr_t;
 | 
			
		||||
typedef int pthread_rwlockattr_t;
 | 
			
		||||
 | 
			
		||||
typedef CRITICAL_SECTION git_mutex;
 | 
			
		||||
typedef HANDLE pthread_cond_t;
 | 
			
		||||
typedef HANDLE git_cond;
 | 
			
		||||
 | 
			
		||||
typedef struct { void *Ptr; } GIT_SRWLOCK;
 | 
			
		||||
 | 
			
		||||
@ -52,10 +52,10 @@ int git_mutex_free(git_mutex *);
 | 
			
		||||
int git_mutex_lock(git_mutex *);
 | 
			
		||||
int git_mutex_unlock(git_mutex *);
 | 
			
		||||
 | 
			
		||||
int pthread_cond_init(pthread_cond_t *, const pthread_condattr_t *);
 | 
			
		||||
int pthread_cond_destroy(pthread_cond_t *);
 | 
			
		||||
int pthread_cond_wait(pthread_cond_t *, git_mutex *);
 | 
			
		||||
int pthread_cond_signal(pthread_cond_t *);
 | 
			
		||||
int git_cond_init(git_cond *);
 | 
			
		||||
int git_cond_free(git_cond *);
 | 
			
		||||
int git_cond_wait(git_cond *, git_mutex *);
 | 
			
		||||
int git_cond_signal(git_cond *);
 | 
			
		||||
 | 
			
		||||
int pthread_num_processors_np(void);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user