summaryrefslogtreecommitdiff
path: root/src/thread-utils.h
Commit message (Collapse)AuthorAgeFilesLines
* consistent header guardsethomson/header_guardsEdward Thomson2018-02-011-1/+1
| | | | use consistent names for the #include / #define header guard pattern.
* Provide error on gcc < 4.1 when THREADSAFEethomson/ancient_gcc_not_threadsafeEdward Thomson2017-02-221-0/+6
| | | | | | | | Provide a descriptive error message when compiling THREADSAFE on gcc versions < 4.1. We require the atomic primitives (eg `__sync_synchronize`) that were introduced in that version. (Note, clang setes `__GNUC__` but appears to set its version > 4.1.)
* win32: rename pthread.{c,h} to thread.{c,h}Patrick Steinhardt2016-06-201-1/+1
| | | | | | | | | | The old pthread-file did re-implement the pthreads API with exact symbol matching. As the thread-abstraction has now been split up between Unix- and Windows-specific files within the `git_` namespace to avoid symbol-clashes between libgit2 and pthreads, the rewritten wrappers have nothing to do with pthreads anymore. Rename the Windows-specific pthread-files to honor this change.
* threads: split up OS-dependent rwlock codePatrick Steinhardt2016-06-201-24/+0
|
* threads: split up OS-dependent thread-condition codePatrick Steinhardt2016-06-201-7/+0
|
* threads: remove unused function pthread_cond_broadcastPatrick Steinhardt2016-06-201-1/+0
|
* threads: split up OS-dependent mutex codePatrick Steinhardt2016-06-201-8/+3
|
* threads: split up OS-dependent thread codePatrick Steinhardt2016-06-201-11/+2
|
* mingw: use gcc-like memory barrierEdward Thomson2016-02-081-1/+1
| | | | Use the gcc-like memory barrier (__sync_synchronize) on mingw.
* Clean up various compiler warningsEdward Thomson2014-10-261-2/+4
|
* Fix warnings in thread-utils.h when building without -DTHREADSAFE=ONSam Clegg2014-09-081-2/+2
| | | | | | | | The compiler was generating a bunch of warnings for git_mutex_init and git_mutex_lock when GIT_THREADS was not defined (i.e. when not using -DTHREADSAFE=ON). Also remove an unused variable from tests/path/core.c.
* Move yield to the tests and enable for FreeBSDcmn/sched-yieldCarlos Martín Nieto2014-07-031-7/+0
| | | | | | | Move the definition of git_thread_yield() to the test which needs it and add the correct definition for it for FreeBSD and derivatives. Original patch adding FreeBSD and derivatives by @jacquesg.
* React to review feedbackPhilip Kelley2014-06-071-13/+8
|
* Win32: Fix object::cache::threadmania test on x64Philip Kelley2014-06-071-5/+14
|
* Index locking and entry allocation changesRussell Belfer2014-04-171-0/+7
| | | | | | | | | | | | | | | | | This makes the lock management on the index a little bit broader, having a number of routines hold the lock across looking up the item to be modified and actually making the modification. Still not true thread safety, but more pure index modifications are now safe which allows the simple cases (such as starting up a diff while index modifications are underway) safe enough to get the snapshot without hitting allocation problems. As part of this, I simplified the allocation of index entries to use a flex array and just put the path at the end of the index entry. This makes every entry self-contained and makes it a little easier to feel sure that pointers to strings aren't being accidentally copied and freed while other references are still being held.
* Load SRWLock APIs at runtimeRussell Belfer2013-08-261-4/+0
| | | | | | This loads SRWLock APIs at runtime and in their absence (i.e. on Windows before Vista) falls back on a regular CRITICAL_SECTION that will not permit concurrent readers.
* Drop support for THREADSAFE on Windows XPRussell Belfer2013-08-221-1/+13
| | | | | This makes libgit2 require Windows Vista or newer if it is going to be compiled with the THREADSAFE option
* Add SRWLock implementation of rwlocks for Win32Russell Belfer2013-08-221-2/+7
|
* Convert sortedcache to use rwlockRussell Belfer2013-08-221-2/+25
| | | | | This is the first use we have of pthread_rwlock_t in libgit2. Hopefully it won't cause any serious portability problems.
* Update git__swap thread helperRussell Belfer2013-07-111-14/+43
| | | | | | | | | | | | | This makes git__swap use the __sync_lock_test_and_set primitive with GCC and the InterlockedExchangePointer primitive with MSVC. Previously is used compare_and_swap in a way that was probably unintuitive for most thinking (i.e. it could fail to swap in the value if another thread raced in). Now it will always succeed and the last thread to run in a race will win instead of the first thread. This also fixes up a little confusion between volatile void ** and void * volatile * that came up with the Win32 compiler.
* Add accessors for refcount valueRussell Belfer2013-07-101-0/+5
|
* Fix compilation warningsnulltoken2013-06-291-1/+1
|
* Merge remote-tracking branch 'arrbee/minor-paranoia' into developmentVicent Marti2013-06-121-1/+1
|\
| * Mutex init can failRussell Belfer2013-05-311-1/+1
| | | | | | | | | | | | | | It is obviously quite a serious problem if this happens, but mutex initialization can fail and we should detect it. It's a bit like a memory allocation failure, in that you're probably pretty screwed if this occurs, but at least we'll catch it.
* | Reorganize diff and add basic diff driverRussell Belfer2013-06-101-2/+0
|/ | | | | | | | | | | | | | | | | | This is a significant reorganization of the diff code to break it into a set of more clearly distinct files and to document the new organization. Hopefully this will make the diff code easier to understand and to extend. This adds a new `git_diff_driver` object that looks of diff driver information from the attributes and the config so that things like function content in diff headers can be provided. The full driver spec is not implemented in the commit - this is focused on the reorganization of the code and putting the driver hooks in place. This also removes a few #includes from src/repository.h that were overbroad, but as a result required extra #includes in a variety of places since including src/repository.h no longer results in pulling in the whole world.
* git_atomic_ssize for 64-bit atomics only on 64-bit platformsEdward Thomson2013-04-251-4/+26
|
* atomic: Add an atomic type for 64-bit operationsVicent Marti2013-04-221-0/+42
|
* Make indexer use shared packfile open codeRussell Belfer2013-04-221-1/+1
| | | | | | | | | | | The indexer was creating a packfile object separately from the code in pack.c which was a problem since I put a call to git_mutex_init into just pack.c. This commit updates the pack function for creating a new pack object (i.e. git_packfile_check()) so that it can be used in both places and then makes indexer.c use the shared initialization routine. There are also a few minor formatting and warning message fixes.
* Fixes for Windows cas/threading stuffRussell Belfer2013-04-221-5/+4
|
* Add git__compare_and_swap and use itRussell Belfer2013-04-221-0/+41
| | | | | | | This removes the lock from the repository object and changes the internals to use the new atomic git__compare_and_swap to update the _odb, _config, _index, and _refdb variables in a threadsafe manner.
* update copyrightsEdward Thomson2013-01-081-1/+1
|
* Treat git_mutex_lock as successful when threads are disabledJustin Spahr-Summers2012-12-091-1/+1
|
* Enable pthread condition varsMichael Schubert2012-10-091-7/+7
|
* Update Copyright headerschu2012-02-131-1/+1
| | | | Signed-off-by: schu <schu-github@schulog.org>
* win32: Use the Windows Atomic API on MinGW tooVicent Martí2012-01-261-7/+7
|
* threads: Fix the shared global state with TLSVicent Marti2011-11-161-1/+1
| | | | | | | See `global.c` for a description of what we're doing. When libgit2 is built with GIT_THREADS support, the threading system must be explicitly initialized with `git_threads_init()`.
* Tabify everythingVicent Marti2011-09-191-3/+3
| | | | | | There were quite a few places were spaces were being used instead of tabs. Try to catch them all. This should hopefully not break anything. Except for `git blame`. Oh well.
* Cleanup legal dataVicent Marti2011-09-191-0/+6
| | | | | | | | | | 1. The license header is technically not valid if it doesn't have a copyright signature. 2. The COPYING file has been updated with the different licenses used in the project. 3. The full GPLv2 header in each file annoys me.
* Fix MSVC warnings when building threadsVicent Marti2011-03-221-0/+4
|
* I broke your bindingsVicent Marti2011-03-201-5/+5
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Hey. Apologies in advance -- I broke your bindings. This is a major commit that includes a long-overdue redesign of the whole object-database structure. This is expected to be the last major external API redesign of the library until the first non-alpha release. Please get your bindings up to date with these changes. They will be included in the next minor release. Sorry again! Major features include: - Real caching and refcounting on parsed objects - Real caching and refcounting on objects read from the ODB - Streaming writes & reads from the ODB - Single-method writes for all object types - The external API is now partially thread-safe The speed increases are significant in all aspects, specially when reading an object several times from the ODB (revwalking) and when writing big objects to the ODB. Here's a full changelog for the external API: blob.h ------ - Remove `git_blob_new` - Remove `git_blob_set_rawcontent` - Remove `git_blob_set_rawcontent_fromfile` - Rename `git_blob_writefile` -> `git_blob_create_fromfile` - Change `git_blob_create_fromfile`: The `path` argument is now relative to the repository's working dir - Add `git_blob_create_frombuffer` commit.h -------- - Remove `git_commit_new` - Remove `git_commit_add_parent` - Remove `git_commit_set_message` - Remove `git_commit_set_committer` - Remove `git_commit_set_author` - Remove `git_commit_set_tree` - Add `git_commit_create` - Add `git_commit_create_v` - Add `git_commit_create_o` - Add `git_commit_create_ov` tag.h ----- - Remove `git_tag_new` - Remove `git_tag_set_target` - Remove `git_tag_set_name` - Remove `git_tag_set_tagger` - Remove `git_tag_set_message` - Add `git_tag_create` - Add `git_tag_create_o` tree.h ------ - Change `git_tree_entry_2object`: New signature is `(git_object **object_out, git_repository *repo, git_tree_entry *entry)` - Remove `git_tree_new` - Remove `git_tree_add_entry` - Remove `git_tree_remove_entry_byindex` - Remove `git_tree_remove_entry_byname` - Remove `git_tree_clearentries` - Remove `git_tree_entry_set_id` - Remove `git_tree_entry_set_name` - Remove `git_tree_entry_set_attributes` object.h ------------ - Remove `git_object_new - Remove `git_object_write` - Change `git_object_close`: This method is now *mandatory*. Not closing an object causes a memory leak. odb.h ----- - Remove type `git_rawobj` - Remove `git_rawobj_close` - Rename `git_rawobj_hash` -> `git_odb_hash` - Change `git_odb_hash`: New signature is `(git_oid *id, const void *data, size_t len, git_otype type)` - Add type `git_odb_object` - Add `git_odb_object_close` - Change `git_odb_read`: New signature is `(git_odb_object **out, git_odb *db, const git_oid *id)` - Change `git_odb_read_header`: New signature is `(size_t *len_p, git_otype *type_p, git_odb *db, const git_oid *id)` - Remove `git_odb_write` - Add `git_odb_open_wstream` - Add `git_odb_open_rstream` odb_backend.h ------------- - Change type `git_odb_backend`: New internal signatures are as follows int (* read)(void **, size_t *, git_otype *, struct git_odb_backend *, const git_oid *) int (* read_header)(size_t *, git_otype *, struct git_odb_backend *, const git_oid *) int (* writestream)(struct git_odb_stream **, struct git_odb_backend *, size_t, git_otype) int (* readstream)( struct git_odb_stream **, struct git_odb_backend *, const git_oid *) - Add type `git_odb_stream` - Add enum `git_odb_streammode` Signed-off-by: Vicent Marti <tanoku@gmail.com>
* Thread safe cacheVicent Marti2011-03-201-6/+76
|
* Add proper threading support to libgit2Vicent Marti2011-03-151-101/+20
| | | | | | | We now depend on libpthread on all Unix platforms (should be installed by default) and use a simple wrapper for Windows threads under Win32. Signed-off-by: Vicent Marti <tanoku@gmail.com>
* Fix refcounting initializationVicent Marti2011-02-181-4/+4
| | | | Signed-off-by: Vicent Marti <tanoku@gmail.com>
* Improve the performance when writing Index filesVicent Marti2011-02-171-68/+88
| | | | | | | | | | | | | | In response to issue #60 (git_index_write really slow), the write_index function has been rewritten to improve its performance -- it should now be in par with the performance of git.git. On top of that, if Posix Threads are available when compiling libgit2, a new threaded writing system will be used (3 separate threads take care of solving byte-endianness, hashing the contents of the index and writing to disk, respectively). For very long Index files, this method is up to 3x times faster than git.git. Signed-off-by: Vicent Marti <tanoku@gmail.com>
* Revert "Properly export all external symbols in Win32"Vicent Marti2010-12-231-1/+1
| | | | | | | It is not a good idea to export these internal symbols now that they are not required to run the unit tests. Signed-off-by: Vicent Marti <tanoku@gmail.com>
* Properly export all external symbols in Win32Vicent Marti2010-12-221-1/+1
| | | | | | | Some external functions were not being exported because they were using the 'extern' keyword instead of the generic GIT_EXTERN() macro. Signed-off-by: Vicent Marti <tanoku@gmail.com>
* thread-utils.h: Avoid using a non-standard C constructRamsay Jones2009-06-051-1/+1
| | | | | | | | | | | | | | In particular, in standard C, a struct or union must have at least one member declared (ie. structs and unions cannot be empty). Some compilers allow empty structs as an extension and won't even issue a warning unless asked for it (eg, gcc requires -pedantic). Some compilers allow empty structs as an extension and will only treat it as an error if asked for strict checking (eg Digital-Mars with -A). Some compilers simply treat it as an error (eg MS Visual C/C++). Signed-off-by: Ramsay Jones <ramsay@ramsay1.demon.co.uk> Signed-off-by: Andreas Ericsson <ae@op5.se>
* Change the use of asm/atomic.h to require -DGIT_HAS_ASM_ATOMICShawn O. Pearce2009-01-021-1/+1
| | | | | | | | | These headers aren't always available; they typically come from the Linux kernel, but aren't supposed to be exported into the userspace /usr/include. Modern kernels won't install these and some distros rm -rf the directory post kernel header install. Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
* Fix pthread_mutex based gitrc_decShawn O. Pearce2009-01-021-1/+1
| | | | | | The function should return true only when the counter drops to 0. Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
* Add a mutex and atomic counter abstraction and implementationsShawn O. Pearce2008-12-311-1/+82
| | | | | | | | | These abstractions can be used to implement an efficient resource reference counter and simple mutual exclusion. On pthreads we use pthread_mutex_t, except when we are also on glibc and can directly use its asm/atomic.h definitions. Signed-off-by: Shawn O. Pearce <spearce@spearce.org>