- 12 Jun, 2013 1 commit
-
-
Vicent Marti committed
-
- 07 Jun, 2013 1 commit
-
-
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.
Russell Belfer committed
-
- 31 May, 2013 2 commits
-
-
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.
Russell Belfer committed -
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.
Russell Belfer committed
-
- 24 May, 2013 1 commit
-
-
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.
Russell Belfer committed
-
- 25 Apr, 2013 1 commit
-
-
Edward Thomson committed
-
- 24 Apr, 2013 1 commit
-
-
Vicent Marti committed
-
- 23 Apr, 2013 1 commit
-
-
Vicent Marti committed
-
- 22 Apr, 2013 13 commits
-
-
Vicent Marti committed
-
Vicent Marti committed
-
Vicent Marti committed
-
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.
Russell Belfer committed -
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.
Russell Belfer committed -
Vicent Marti committed
-
Vicent Marti committed
-
Vicent Marti committed
-
Vicent Marti committed
-
Vicent Marti committed
-
Vicent Marti committed
-
Vicent Marti committed
-
Vicent Marti committed
-
- 08 Jan, 2013 1 commit
-
-
Edward Thomson committed
-
- 09 Dec, 2012 2 commits
-
-
Justin Spahr-Summers committed
-
Justin Spahr-Summers committed
-
- 09 Nov, 2012 1 commit
-
-
Philip Kelley committed
-
- 11 Sep, 2012 1 commit
-
-
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);
Michael Schubert committed
-
- 09 Aug, 2012 1 commit
-
-
Vicent Marti committed
-
- 07 Jun, 2012 1 commit
-
-
Vicent Martí committed
-
- 25 Apr, 2012 1 commit
-
-
Russell Belfer committed
-
- 16 Mar, 2012 1 commit
-
-
Also cleaned up some previously converted code that still had little things to polish.
Russell Belfer committed
-
- 13 Feb, 2012 1 commit
-
-
Signed-off-by: schu <schu-github@schulog.org>
schu committed
-
- 28 Jan, 2012 1 commit
-
-
The object cache is mostly IO-bound, so it makes no sense to have a lock per node.
Vicent Martí committed
-
- 29 Oct, 2011 1 commit
-
-
Ensure that all memory related functions (malloc, calloc, strdup, free, etc) are using their respective `git__` wrappers.
Vicent Marti committed
-
- 18 Sep, 2011 1 commit
-
-
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.
Vicent Marti committed
-
- 30 Aug, 2011 1 commit
-
-
Signed-off-by: Kirill A. Shutemov <kirill@shutemov.name>
Kirill A. Shutemov committed
-
- 16 May, 2011 2 commits
-
-
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.
Vicent Marti committed -
Do not try to adquire the same node lock twice when the cuckoo hashing resolves to the same node.
Vicent Marti committed
-
- 15 May, 2011 2 commits
-
-
Vicent Marti committed
-
nulltoken committed
-
- 14 May, 2011 1 commit
-
-
nulltoken committed
-