diff options
| author | Shawn O. Pearce <spearce@spearce.org> | 2008-12-30 21:49:38 -0800 |
|---|---|---|
| committer | Shawn O. Pearce <spearce@spearce.org> | 2008-12-30 21:56:11 -0800 |
| commit | a1d34bc000cee6d72c3b5e329faa58424641611f (patch) | |
| tree | 89d3150640c0ed5b386bc8113ac8999b20371ece /src/common.h | |
| parent | d74679498086d0fc2293dceb59155c696b11b86c (diff) | |
| download | libgit2-a1d34bc000cee6d72c3b5e329faa58424641611f.tar.gz | |
Support building on Mac OS X by using pthread_getspecific for TLS
The Mach-O format does not permit gcc to implement the __thread
TLS specification, so we must instead emulate it using a single
int cell allocated from memory and stored inside of the thread
specific data associated with the current pthread.
What makes this tricky is git_errno must be a valid lvalue, so
we really need to return a pointer to the caller and deference it
as part of the git_errno macro.
The GCC-specific __attribute__((constructor)) extension is used
to ensure the pthread_key_t is allocated before any Git functions
are executed in the library, as this is necessary to access our
thread specific storage.
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
Diffstat (limited to 'src/common.h')
| -rw-r--r-- | src/common.h | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/src/common.h b/src/common.h index 0e115c5be..d17bf1cee 100644 --- a/src/common.h +++ b/src/common.h @@ -5,6 +5,9 @@ #include "util.h" #include "errors.h" +#ifdef GIT_HAS_PTHREAD +# include <pthread.h> +#endif #include <assert.h> #include <errno.h> #include <stdlib.h> |
