git-commit-vandalism/t/helper
Jeff Hostetler 8b604d1951 hashmap: add API to disable item counting when threaded
This is to address concerns raised by ThreadSanitizer on the mailing list
about threaded unprotected R/W access to map.size with my previous "disallow
rehash" change (0607e10009).

See:
https://public-inbox.org/git/adb37b70139fd1e2bac18bfd22c8b96683ae18eb.1502780344.git.martin.agren@gmail.com/

Add API to hashmap to disable item counting and thus automatic rehashing.
Also include API to later re-enable them.

When item counting is disabled, the map.size field is invalid.  So to
prevent accidents, the field has been renamed and an accessor function
hashmap_get_size() has been added.  All direct references to this
field have been been updated.  And the name of the field changed
to map.private_size to communicate this.

Here is the relevant output from ThreadSanitizer showing the problem:

WARNING: ThreadSanitizer: data race (pid=10554)
  Read of size 4 at 0x00000082d488 by thread T2 (mutexes: write M16):
    #0 hashmap_add hashmap.c:209
    #1 hash_dir_entry_with_parent_and_prefix name-hash.c:302
    #2 handle_range_dir name-hash.c:347
    #3 handle_range_1 name-hash.c:415
    #4 lazy_dir_thread_proc name-hash.c:471
    #5 <null> <null>

  Previous write of size 4 at 0x00000082d488 by thread T1 (mutexes: write M31):
    #0 hashmap_add hashmap.c:209
    #1 hash_dir_entry_with_parent_and_prefix name-hash.c:302
    #2 handle_range_dir name-hash.c:347
    #3 handle_range_1 name-hash.c:415
    #4 handle_range_dir name-hash.c:380
    #5 handle_range_1 name-hash.c:415
    #6 lazy_dir_thread_proc name-hash.c:471
    #7 <null> <null>

Martin gives instructions for running TSan on test t3008 in this post:
https://public-inbox.org/git/CAN0heSoJDL9pWELD6ciLTmWf-a=oyxe4EXXOmCKvsG5MSuzxsA@mail.gmail.com/

Signed-off-by: Jeff Hostetler <jeffhost@microsoft.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2017-09-07 09:42:02 +09:00
..
.gitignore Merge branch 'jh/add-index-entry-optim' 2017-04-26 15:39:07 +09:00
test-chmtime.c
test-config.c config: don't include config.h by default 2017-06-15 12:56:22 -07:00
test-ctype.c
test-date.c timestamp_t: a new data type for timestamps 2017-04-27 13:07:39 +09:00
test-delta.c
test-dump-cache-tree.c Convert struct cache_tree to use struct object_id 2017-05-02 10:46:41 +09:00
test-dump-split-index.c
test-dump-untracked-cache.c use QSORT 2016-09-29 15:42:18 -07:00
test-fake-ssh.c
test-genrandom.c
test-hashmap.c hashmap: add API to disable item counting when threaded 2017-09-07 09:42:02 +09:00
test-index-version.c
test-lazy-init-name-hash.c name-hash: add test-lazy-init-name-hash 2017-03-24 11:00:03 -07:00
test-line-buffer.c
test-match-trees.c tree: convert parse_tree_indirect to struct object_id 2017-05-08 15:12:58 +09:00
test-mergesort.c
test-mktemp.c
test-online-cpus.c test-online-cpus: helper to return cpu count 2017-04-12 23:17:19 -07:00
test-parse-options.c timestamp_t: a new data type for timestamps 2017-04-27 13:07:39 +09:00
test-path-utils.c test-path-utils: handle const parameter of basename and dirname 2017-08-07 10:50:08 -07:00
test-prio-queue.c
test-read-cache.c test-read-cache: setup git dir 2017-04-16 20:05:11 -07:00
test-ref-store.c ref_store: take a msg parameter when deleting references 2017-05-23 14:29:53 +09:00
test-regex.c
test-revision-walking.c
test-run-command.c
test-scrap-cache-tree.c hold_locked_index(): align error handling with hold_lockfile_for_update() 2016-12-07 11:31:59 -08:00
test-sha1-array.c Rename sha1_array to oid_array 2017-03-31 08:33:56 -07:00
test-sha1.c
test-sha1.sh
test-sigchain.c
test-strcmp-offset.c Spelling fixes 2017-06-27 10:35:49 -07:00
test-string-list.c perf: add basic sort performance test 2017-01-23 11:02:37 -08:00
test-submodule-config.c submodule: remove gitmodules_config 2017-08-03 13:11:02 -07:00
test-subprocess.c
test-svn-fe.c
test-urlmatch-normalization.c
test-wildmatch.c wildmatch: remove unused wildopts parameter 2017-06-23 18:27:07 -07:00
test-write-cache.c perf: add test for writing the index 2017-08-21 15:56:53 -07:00