Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/libgit2.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
AgeCommit message (Collapse)Author
2013-06-12util: It's called `memzero`Vicent Marti
2013-06-07Add safe memset and use itRussell Belfer
This adds a `git__memset` routine that will not be optimized away and updates the places where I memset() right before a free() call to use it.
2013-06-01Mutex init can failRussell Belfer
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.
2013-06-01Zero memory for major objects before freeingRussell Belfer
By zeroing out the memory when we free larger objects (i.e. those that serve as collections of other data, such as repos, odb, refdb), I'm hoping that it will be easier for libgit2 bindings to find errors in their object management code.
2013-05-24Docs for git_libgit2_opts and cache disable tweakRussell Belfer
This adds docs for the cache control options to git_libgit2_opts and also tweaks the cache code so that if the cache is disabled, then the next time we attempt to insert something into the cache in question, we will actually clear any old cached objects.
2013-04-25git_atomic_ssize for 64-bit atomics only on 64-bit platformsEdward Thomson
2013-04-24repo: Add `git_repository__cleanup`Vicent Marti
2013-04-23opts: Add getter for cached memoryvmg/atomic64Vicent Marti
2013-04-22cache: More aggressive defaultVicent Marti
2013-04-22cache: Shared meter for memory usageVicent Marti
2013-04-22cache: Max cache size, and evict when the cache fills upvmg/new-cacheVicent Marti
2013-04-22Add callback to git_objects_tableRussell Belfer
This adds create and free callback to the git_objects_table so that more of the creation and destruction of objects can be table driven instead of using switch statements. This also makes the semantics of certain object creation functions consistent so that we can make better use of function pointers. This also fixes a theoretical error case where an object allocation fails and we end up storing NULL into the cache.
2013-04-22Add range checking around cache optsRussell Belfer
Add a git_cache_set_max_object_size method that does more checking around setting the max object size. Also add a git_cache_size to read the number of objects currently in the cache. This makes it easier to write tests.
2013-04-22Global option settersVicent Marti
2013-04-22Clear the cache when there are too many items to expireVicent Marti
2013-04-22Some statsVicent Marti
2013-04-22Per-object max sizeVicent Marti
2013-04-22What has science done.Vicent Marti
2013-04-22Random evictionVicent Marti
2013-04-22Per-object filteringVicent Marti
2013-04-22lol this worked first try wtfVicent Marti
2013-01-09update copyrightsEdward Thomson
2012-12-09orite C89Justin Spahr-Summers
2012-12-09Always check the result of git_mutex_lockJustin Spahr-Summers
2012-11-10Fix a mutex/critical section leakPhilip Kelley
2012-09-11cache: fix race conditionMichael Schubert
Example: a cached node is owned only by the cache (refcount == 1). Thread A holds the lock and determines that the entry which should get cached equals the node (git_oid_cmp(&node->oid, &entry->oid) == 0). It frees the given entry to instead return the cached node to the user (entry = node). Now, before Thread A happens to increment the refcount of the node *outside* the cache lock, Thread B tries to store another entry and hits the slot of the node before, decrements its refcount and frees it *before* Thread A gets a chance to increment for the user. git_cached_obj_incref(entry); git_mutex_lock(&cache->lock); { git_cached_obj *node = cache->nodes[hash & cache->size_mask]; if (node == NULL) { cache->nodes[hash & cache->size_mask] = entry; } else if (git_oid_cmp(&node->oid, &entry->oid) == 0) { git_cached_obj_decref(entry, cache->free_obj); entry = node; } else { git_cached_obj_decref(node, cache->free_obj); // Thread B is here cache->nodes[hash & cache->size_mask] = entry; } } git_mutex_unlock(&cache->lock); // Thread A is here /* increase the refcount again, because we are * returning it to the user */ git_cached_obj_incref(entry);
2012-08-10oid: Explicitly include `oid.h` for the inlined CMPVicent Marti
2012-06-08misc: Fix warnings from PVS Studio trialVicent Martí
2012-04-25Moving power-of-two bit utilities into util.hRussell Belfer
2012-03-17Convert attr, ignore, mwindow, status to new errorsRussell Belfer
Also cleaned up some previously converted code that still had little things to polish.
2012-02-13Update Copyright headerschu
Signed-off-by: schu <schu-github@schulog.org>
2012-01-28cache: Simplify locking mechanicsVicent Martí
The object cache is mostly IO-bound, so it makes no sense to have a lock per node.
2011-10-29global: Properly use `git__` memory wrappersVicent Marti
Ensure that all memory related functions (malloc, calloc, strdup, free, etc) are using their respective `git__` wrappers.
2011-09-19Merge pull request #384 from kiryl/warningsVicent Martí
Add more -W flags to CFLAGS
2011-09-19Cleanup legal dataVicent Marti
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.
2011-08-31CMakefile: add -Wstrict-aliasing=2 and fix warningsKirill A. Shutemov
Signed-off-by: Kirill A. Shutemov <kirill@shutemov.name>
2011-05-17cache: Drop cuckoo hashingVicent Marti
Now we use a simple closed-addressing cache. Cuckoo hashing was creating too many issues with race conditions. Fuck that. Let's see what happens performance wise, we may have to roll back or come up with another way to implement an efficient multi-threaded cache.
2011-05-17cache: Fix deadlockVicent Marti
Do not try to adquire the same node lock twice when the cuckoo hashing resolves to the same node.
2011-05-16Return success code on `git_cache_init`Vicent Marti
2011-05-15Move cache.c to the new error handlingnulltoken
2011-05-14Move repository.c to the new error handlingnulltoken
2011-03-21Fix MSVC warningsVicent Marti
2011-03-20I broke your bindingsVicent Marti
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>
2011-03-20Thread safe cacheVicent Marti