diff options
| author | Carlos MartÃn Nieto <carlosmn@github.com> | 2017-11-18 18:41:52 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2017-11-18 18:41:52 +0100 |
| commit | a8f19f819ea5b9a949b439702893f87c2c655141 (patch) | |
| tree | 959fc9096d8d2c618a08be0d2ab898abe9086818 | |
| parent | 530c878d417ea6e736addcd1c26db738cee607f6 (diff) | |
| parent | 585b5dacc7f440a163c20117cfa35fb714a7ba7b (diff) | |
| download | libgit2-a8f19f819ea5b9a949b439702893f87c2c655141.tar.gz | |
Merge pull request #4420 from pks-t/pks/strict-aliasing
refcount: make refcounting conform to aliasing rules
| -rw-r--r-- | src/diff_generate.c | 2 | ||||
| -rw-r--r-- | src/diff_parse.c | 2 | ||||
| -rw-r--r-- | src/patch_generate.c | 2 | ||||
| -rw-r--r-- | src/patch_parse.c | 2 | ||||
| -rw-r--r-- | src/repository.c | 2 | ||||
| -rw-r--r-- | src/util.h | 10 |
6 files changed, 10 insertions, 10 deletions
diff --git a/src/diff_generate.c b/src/diff_generate.c index 6436ab930..6b3fa4fc5 100644 --- a/src/diff_generate.c +++ b/src/diff_generate.c @@ -411,7 +411,7 @@ static git_diff_generated *diff_generated_alloc( if ((diff = git__calloc(1, sizeof(git_diff_generated))) == NULL) return NULL; - GIT_REFCOUNT_INC(diff); + GIT_REFCOUNT_INC(&diff->base); diff->base.type = GIT_DIFF_TYPE_GENERATED; diff->base.repo = repo; diff->base.old_src = old_iter->type; diff --git a/src/diff_parse.c b/src/diff_parse.c index 2838314a2..59fd8612a 100644 --- a/src/diff_parse.c +++ b/src/diff_parse.c @@ -36,7 +36,7 @@ static git_diff_parsed *diff_parsed_alloc(void) if ((diff = git__calloc(1, sizeof(git_diff_parsed))) == NULL) return NULL; - GIT_REFCOUNT_INC(diff); + GIT_REFCOUNT_INC(&diff->base); diff->base.type = GIT_DIFF_TYPE_PARSED; diff->base.strcomp = git__strcmp; diff->base.strncomp = git__strncmp; diff --git a/src/patch_generate.c b/src/patch_generate.c index 3995c56be..29cda8b1c 100644 --- a/src/patch_generate.c +++ b/src/patch_generate.c @@ -139,7 +139,7 @@ static int patch_generated_alloc_from_diff( if (!(error = patch_generated_init(patch, diff, delta_index))) { patch->flags |= GIT_PATCH_GENERATED_ALLOCATED; - GIT_REFCOUNT_INC(patch); + GIT_REFCOUNT_INC(&patch->base); } else { git__free(patch); patch = NULL; diff --git a/src/patch_parse.c b/src/patch_parse.c index fee6afad6..48afcc1ed 100644 --- a/src/patch_parse.c +++ b/src/patch_parse.c @@ -1084,7 +1084,7 @@ int git_patch_parse( patch->base.diff_opts.new_prefix = patch->new_prefix; patch->base.diff_opts.flags |= GIT_DIFF_SHOW_BINARY; - GIT_REFCOUNT_INC(patch); + GIT_REFCOUNT_INC(&patch->base); *out = &patch->base; done: diff --git a/src/repository.c b/src/repository.c index fe0696355..90b778e03 100644 --- a/src/repository.c +++ b/src/repository.c @@ -10,7 +10,6 @@ #include <ctype.h> #include "git2/object.h" -#include "git2/refdb.h" #include "git2/sys/repository.h" #include "common.h" @@ -25,6 +24,7 @@ #include "refs.h" #include "filter.h" #include "odb.h" +#include "refdb.h" #include "remote.h" #include "merge.h" #include "diff_driver.h" diff --git a/src/util.h b/src/util.h index b85e03b6d..7c9a54ff1 100644 --- a/src/util.h +++ b/src/util.h @@ -297,22 +297,22 @@ typedef struct { typedef void (*git_refcount_freeptr)(void *r); #define GIT_REFCOUNT_INC(r) { \ - git_atomic_inc(&((git_refcount *)(r))->refcount); \ + git_atomic_inc(&(r)->rc.refcount); \ } #define GIT_REFCOUNT_DEC(_r, do_free) { \ - git_refcount *r = (git_refcount *)(_r); \ + git_refcount *r = &(_r)->rc; \ int val = git_atomic_dec(&r->refcount); \ if (val <= 0 && r->owner == NULL) { do_free(_r); } \ } #define GIT_REFCOUNT_OWN(r, o) { \ - ((git_refcount *)(r))->owner = o; \ + (r)->rc.owner = o; \ } -#define GIT_REFCOUNT_OWNER(r) (((git_refcount *)(r))->owner) +#define GIT_REFCOUNT_OWNER(r) ((r)->rc.owner) -#define GIT_REFCOUNT_VAL(r) git_atomic_get(&((git_refcount *)(r))->refcount) +#define GIT_REFCOUNT_VAL(r) git_atomic_get((r)->rc.refcount) static signed char from_hex[] = { |
