]>
Commit | Line | Data |
---|---|---|
bbcc7ffc | 1 | /* |
bb742ede | 2 | * Copyright (C) 2009-2011 the libgit2 contributors |
bbcc7ffc | 3 | * |
bb742ede VM |
4 | * This file is part of libgit2, distributed under the GNU GPL v2 with |
5 | * a Linking Exception. For full terms see the included COPYING file. | |
bbcc7ffc VM |
6 | */ |
7 | ||
8 | #include "pthread.h" | |
9 | ||
10 | int pthread_create(pthread_t *GIT_RESTRICT thread, | |
87d9869f VM |
11 | const pthread_attr_t *GIT_RESTRICT GIT_UNUSED(attr), |
12 | void *(*start_routine)(void*), void *GIT_RESTRICT arg) | |
bbcc7ffc VM |
13 | { |
14 | GIT_UNUSED_ARG(attr); | |
15 | *thread = (pthread_t) CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)start_routine, arg, 0, NULL); | |
a6d647d2 | 16 | return *thread ? GIT_SUCCESS : git__throw(GIT_EOSERR, "Failed to create pthread"); |
bbcc7ffc VM |
17 | } |
18 | ||
bbcc7ffc VM |
19 | int pthread_join(pthread_t thread, void **value_ptr) |
20 | { | |
87d9869f VM |
21 | int ret; |
22 | ret = WaitForSingleObject(thread, INFINITE); | |
23 | if (ret && value_ptr) | |
24 | GetExitCodeThread(thread, (void*) value_ptr); | |
25 | return -(!!ret); | |
bbcc7ffc VM |
26 | } |
27 | ||
bb3de0c4 | 28 | int pthread_mutex_init(pthread_mutex_t *GIT_RESTRICT mutex, |
87d9869f | 29 | const pthread_mutexattr_t *GIT_RESTRICT GIT_UNUSED(mutexattr)) |
bbcc7ffc | 30 | { |
87d9869f VM |
31 | GIT_UNUSED_ARG(mutexattr); |
32 | InitializeCriticalSection(mutex); | |
33 | return 0; | |
bbcc7ffc VM |
34 | } |
35 | ||
36 | int pthread_mutex_destroy(pthread_mutex_t *mutex) | |
37 | { | |
87d9869f VM |
38 | DeleteCriticalSection(mutex); |
39 | return 0; | |
bbcc7ffc VM |
40 | } |
41 | ||
bb3de0c4 | 42 | int pthread_mutex_lock(pthread_mutex_t *mutex) |
bbcc7ffc | 43 | { |
87d9869f VM |
44 | EnterCriticalSection(mutex); |
45 | return 0; | |
bbcc7ffc VM |
46 | } |
47 | ||
bb3de0c4 | 48 | int pthread_mutex_unlock(pthread_mutex_t *mutex) |
bbcc7ffc | 49 | { |
87d9869f VM |
50 | LeaveCriticalSection(mutex); |
51 | return 0; | |
bbcc7ffc VM |
52 | } |
53 | ||
54 | int pthread_num_processors_np(void) | |
55 | { | |
87d9869f VM |
56 | DWORD_PTR p, s; |
57 | int n = 0; | |
bbcc7ffc | 58 | |
87d9869f VM |
59 | if (GetProcessAffinityMask(GetCurrentProcess(), &p, &s)) |
60 | for (; p; p >>= 1) | |
61 | n += p&1; | |
bbcc7ffc | 62 | |
87d9869f | 63 | return n ? n : 1; |
bbcc7ffc VM |
64 | } |
65 |