Copy disabled (too large)
Download .txt
Showing preview only (19,956K chars total). Download the full file to get everything.
Repository: redis-io/redis
Branch: unstable
Commit: 2432f55278b8
Files: 1750
Total size: 18.7 MB
Directory structure:
gitextract_z3mis2y8/
├── .codespell/
│ ├── .codespellrc
│ ├── requirements.txt
│ └── wordlist.txt
├── .gitattributes
├── .github/
│ ├── ISSUE_TEMPLATE/
│ │ ├── bug_report.md
│ │ ├── crash_report.md
│ │ ├── feature_request.md
│ │ ├── other_stuff.md
│ │ └── question.md
│ ├── dependabot.yml
│ └── workflows/
│ ├── ci.yml
│ ├── codecov.yml
│ ├── codeql-analysis.yml
│ ├── coverity.yml
│ ├── daily.yml
│ ├── external.yml
│ ├── post-release-automation.yml
│ ├── redis_docs_sync.yaml
│ ├── reply-schemas-linter.yml
│ └── spell-check.yml
├── .gitignore
├── 00-RELEASENOTES
├── BUGS
├── CODE_OF_CONDUCT.md
├── CONTRIBUTING.md
├── INSTALL
├── LICENSE.txt
├── MANIFESTO
├── Makefile
├── README.md
├── REDISCONTRIBUTIONS.txt
├── SECURITY.md
├── TLS.md
├── codecov.yml
├── deps/
│ ├── Makefile
│ ├── README.md
│ ├── fpconv/
│ │ ├── LICENSE.txt
│ │ ├── Makefile
│ │ ├── README.md
│ │ ├── fpconv_dtoa.c
│ │ ├── fpconv_dtoa.h
│ │ └── fpconv_powers.h
│ ├── hdr_histogram/
│ │ ├── COPYING.txt
│ │ ├── LICENSE.txt
│ │ ├── Makefile
│ │ ├── README.md
│ │ ├── hdr_atomic.h
│ │ ├── hdr_histogram.c
│ │ ├── hdr_histogram.h
│ │ ├── hdr_redis_malloc.h
│ │ └── hdr_tests.h
│ ├── hiredis/
│ │ ├── .github/
│ │ │ ├── release-drafter-config.yml
│ │ │ └── workflows/
│ │ │ ├── build.yml
│ │ │ ├── release-drafter.yml
│ │ │ └── test.yml
│ │ ├── .gitignore
│ │ ├── .travis.yml
│ │ ├── CHANGELOG.md
│ │ ├── CMakeLists.txt
│ │ ├── COPYING
│ │ ├── Makefile
│ │ ├── README.md
│ │ ├── adapters/
│ │ │ ├── ae.h
│ │ │ ├── glib.h
│ │ │ ├── ivykis.h
│ │ │ ├── libev.h
│ │ │ ├── libevent.h
│ │ │ ├── libhv.h
│ │ │ ├── libsdevent.h
│ │ │ ├── libuv.h
│ │ │ ├── macosx.h
│ │ │ ├── poll.h
│ │ │ ├── qt.h
│ │ │ └── redismoduleapi.h
│ │ ├── alloc.c
│ │ ├── alloc.h
│ │ ├── appveyor.yml
│ │ ├── async.c
│ │ ├── async.h
│ │ ├── async_private.h
│ │ ├── dict.c
│ │ ├── dict.h
│ │ ├── examples/
│ │ │ ├── CMakeLists.txt
│ │ │ ├── example-ae.c
│ │ │ ├── example-glib.c
│ │ │ ├── example-ivykis.c
│ │ │ ├── example-libev.c
│ │ │ ├── example-libevent-ssl.c
│ │ │ ├── example-libevent.c
│ │ │ ├── example-libhv.c
│ │ │ ├── example-libsdevent.c
│ │ │ ├── example-libuv.c
│ │ │ ├── example-macosx.c
│ │ │ ├── example-poll.c
│ │ │ ├── example-push.c
│ │ │ ├── example-qt.cpp
│ │ │ ├── example-qt.h
│ │ │ ├── example-redismoduleapi.c
│ │ │ ├── example-ssl.c
│ │ │ └── example.c
│ │ ├── fmacros.h
│ │ ├── fuzzing/
│ │ │ └── format_command_fuzzer.c
│ │ ├── hiredis-config.cmake.in
│ │ ├── hiredis.c
│ │ ├── hiredis.h
│ │ ├── hiredis.pc.in
│ │ ├── hiredis.targets
│ │ ├── hiredis_ssl-config.cmake.in
│ │ ├── hiredis_ssl.h
│ │ ├── hiredis_ssl.pc.in
│ │ ├── net.c
│ │ ├── net.h
│ │ ├── read.c
│ │ ├── read.h
│ │ ├── sds.c
│ │ ├── sds.h
│ │ ├── sdsalloc.h
│ │ ├── sdscompat.h
│ │ ├── sockcompat.c
│ │ ├── sockcompat.h
│ │ ├── ssl.c
│ │ ├── test.c
│ │ ├── test.sh
│ │ └── win32.h
│ ├── jemalloc/
│ │ ├── .appveyor.yml
│ │ ├── .autom4te.cfg
│ │ ├── .cirrus.yml
│ │ ├── .clang-format
│ │ ├── .gitattributes
│ │ ├── .gitignore
│ │ ├── .travis.yml
│ │ ├── COPYING
│ │ ├── ChangeLog
│ │ ├── INSTALL.md
│ │ ├── Makefile.in
│ │ ├── README
│ │ ├── TUNING.md
│ │ ├── VERSION
│ │ ├── autogen.sh
│ │ ├── bin/
│ │ │ ├── jemalloc-config.in
│ │ │ ├── jemalloc.sh.in
│ │ │ └── jeprof.in
│ │ ├── build-aux/
│ │ │ ├── config.guess
│ │ │ ├── config.sub
│ │ │ └── install-sh
│ │ ├── config.stamp.in
│ │ ├── configure
│ │ ├── configure.ac
│ │ ├── doc/
│ │ │ ├── html.xsl.in
│ │ │ ├── jemalloc.xml.in
│ │ │ ├── manpages.xsl.in
│ │ │ └── stylesheet.xsl
│ │ ├── doc_internal/
│ │ │ └── PROFILING_INTERNALS.md
│ │ ├── include/
│ │ │ ├── jemalloc/
│ │ │ │ ├── internal/
│ │ │ │ │ ├── activity_callback.h
│ │ │ │ │ ├── arena_externs.h
│ │ │ │ │ ├── arena_inlines_a.h
│ │ │ │ │ ├── arena_inlines_b.h
│ │ │ │ │ ├── arena_stats.h
│ │ │ │ │ ├── arena_structs.h
│ │ │ │ │ ├── arena_types.h
│ │ │ │ │ ├── assert.h
│ │ │ │ │ ├── atomic.h
│ │ │ │ │ ├── atomic_c11.h
│ │ │ │ │ ├── atomic_gcc_atomic.h
│ │ │ │ │ ├── atomic_gcc_sync.h
│ │ │ │ │ ├── atomic_msvc.h
│ │ │ │ │ ├── background_thread_externs.h
│ │ │ │ │ ├── background_thread_inlines.h
│ │ │ │ │ ├── background_thread_structs.h
│ │ │ │ │ ├── base.h
│ │ │ │ │ ├── bin.h
│ │ │ │ │ ├── bin_info.h
│ │ │ │ │ ├── bin_stats.h
│ │ │ │ │ ├── bin_types.h
│ │ │ │ │ ├── bit_util.h
│ │ │ │ │ ├── bitmap.h
│ │ │ │ │ ├── buf_writer.h
│ │ │ │ │ ├── cache_bin.h
│ │ │ │ │ ├── ckh.h
│ │ │ │ │ ├── counter.h
│ │ │ │ │ ├── ctl.h
│ │ │ │ │ ├── decay.h
│ │ │ │ │ ├── div.h
│ │ │ │ │ ├── ecache.h
│ │ │ │ │ ├── edata.h
│ │ │ │ │ ├── edata_cache.h
│ │ │ │ │ ├── ehooks.h
│ │ │ │ │ ├── emap.h
│ │ │ │ │ ├── emitter.h
│ │ │ │ │ ├── eset.h
│ │ │ │ │ ├── exp_grow.h
│ │ │ │ │ ├── extent.h
│ │ │ │ │ ├── extent_dss.h
│ │ │ │ │ ├── extent_mmap.h
│ │ │ │ │ ├── fb.h
│ │ │ │ │ ├── fxp.h
│ │ │ │ │ ├── hash.h
│ │ │ │ │ ├── hook.h
│ │ │ │ │ ├── hpa.h
│ │ │ │ │ ├── hpa_hooks.h
│ │ │ │ │ ├── hpa_opts.h
│ │ │ │ │ ├── hpdata.h
│ │ │ │ │ ├── inspect.h
│ │ │ │ │ ├── jemalloc_internal_decls.h
│ │ │ │ │ ├── jemalloc_internal_defs.h.in
│ │ │ │ │ ├── jemalloc_internal_externs.h
│ │ │ │ │ ├── jemalloc_internal_includes.h
│ │ │ │ │ ├── jemalloc_internal_inlines_a.h
│ │ │ │ │ ├── jemalloc_internal_inlines_b.h
│ │ │ │ │ ├── jemalloc_internal_inlines_c.h
│ │ │ │ │ ├── jemalloc_internal_macros.h
│ │ │ │ │ ├── jemalloc_internal_types.h
│ │ │ │ │ ├── jemalloc_preamble.h.in
│ │ │ │ │ ├── large_externs.h
│ │ │ │ │ ├── lockedint.h
│ │ │ │ │ ├── log.h
│ │ │ │ │ ├── malloc_io.h
│ │ │ │ │ ├── mpsc_queue.h
│ │ │ │ │ ├── mutex.h
│ │ │ │ │ ├── mutex_prof.h
│ │ │ │ │ ├── nstime.h
│ │ │ │ │ ├── pa.h
│ │ │ │ │ ├── pac.h
│ │ │ │ │ ├── pages.h
│ │ │ │ │ ├── pai.h
│ │ │ │ │ ├── peak.h
│ │ │ │ │ ├── peak_event.h
│ │ │ │ │ ├── ph.h
│ │ │ │ │ ├── private_namespace.sh
│ │ │ │ │ ├── private_symbols.sh
│ │ │ │ │ ├── prng.h
│ │ │ │ │ ├── prof_data.h
│ │ │ │ │ ├── prof_externs.h
│ │ │ │ │ ├── prof_hook.h
│ │ │ │ │ ├── prof_inlines.h
│ │ │ │ │ ├── prof_log.h
│ │ │ │ │ ├── prof_recent.h
│ │ │ │ │ ├── prof_stats.h
│ │ │ │ │ ├── prof_structs.h
│ │ │ │ │ ├── prof_sys.h
│ │ │ │ │ ├── prof_types.h
│ │ │ │ │ ├── psset.h
│ │ │ │ │ ├── public_namespace.sh
│ │ │ │ │ ├── public_unnamespace.sh
│ │ │ │ │ ├── ql.h
│ │ │ │ │ ├── qr.h
│ │ │ │ │ ├── quantum.h
│ │ │ │ │ ├── rb.h
│ │ │ │ │ ├── rtree.h
│ │ │ │ │ ├── rtree_tsd.h
│ │ │ │ │ ├── safety_check.h
│ │ │ │ │ ├── san.h
│ │ │ │ │ ├── san_bump.h
│ │ │ │ │ ├── sc.h
│ │ │ │ │ ├── sec.h
│ │ │ │ │ ├── sec_opts.h
│ │ │ │ │ ├── seq.h
│ │ │ │ │ ├── slab_data.h
│ │ │ │ │ ├── smoothstep.h
│ │ │ │ │ ├── smoothstep.sh
│ │ │ │ │ ├── spin.h
│ │ │ │ │ ├── stats.h
│ │ │ │ │ ├── sz.h
│ │ │ │ │ ├── tcache_externs.h
│ │ │ │ │ ├── tcache_inlines.h
│ │ │ │ │ ├── tcache_structs.h
│ │ │ │ │ ├── tcache_types.h
│ │ │ │ │ ├── test_hooks.h
│ │ │ │ │ ├── thread_event.h
│ │ │ │ │ ├── ticker.h
│ │ │ │ │ ├── tsd.h
│ │ │ │ │ ├── tsd_generic.h
│ │ │ │ │ ├── tsd_malloc_thread_cleanup.h
│ │ │ │ │ ├── tsd_tls.h
│ │ │ │ │ ├── tsd_types.h
│ │ │ │ │ ├── tsd_win.h
│ │ │ │ │ ├── typed_list.h
│ │ │ │ │ ├── util.h
│ │ │ │ │ └── witness.h
│ │ │ │ ├── jemalloc.sh
│ │ │ │ ├── jemalloc_defs.h.in
│ │ │ │ ├── jemalloc_macros.h.in
│ │ │ │ ├── jemalloc_mangle.sh
│ │ │ │ ├── jemalloc_protos.h.in
│ │ │ │ ├── jemalloc_rename.sh
│ │ │ │ └── jemalloc_typedefs.h.in
│ │ │ └── msvc_compat/
│ │ │ ├── C99/
│ │ │ │ ├── stdbool.h
│ │ │ │ └── stdint.h
│ │ │ ├── strings.h
│ │ │ └── windows_extra.h
│ │ ├── jemalloc.pc.in
│ │ ├── m4/
│ │ │ └── ax_cxx_compile_stdcxx.m4
│ │ ├── msvc/
│ │ │ ├── ReadMe.txt
│ │ │ ├── jemalloc_vc2015.sln
│ │ │ ├── jemalloc_vc2017.sln
│ │ │ ├── projects/
│ │ │ │ ├── vc2015/
│ │ │ │ │ ├── jemalloc/
│ │ │ │ │ │ ├── jemalloc.vcxproj
│ │ │ │ │ │ └── jemalloc.vcxproj.filters
│ │ │ │ │ └── test_threads/
│ │ │ │ │ ├── test_threads.vcxproj
│ │ │ │ │ └── test_threads.vcxproj.filters
│ │ │ │ └── vc2017/
│ │ │ │ ├── jemalloc/
│ │ │ │ │ ├── jemalloc.vcxproj
│ │ │ │ │ └── jemalloc.vcxproj.filters
│ │ │ │ └── test_threads/
│ │ │ │ ├── test_threads.vcxproj
│ │ │ │ └── test_threads.vcxproj.filters
│ │ │ └── test_threads/
│ │ │ ├── test_threads.cpp
│ │ │ ├── test_threads.h
│ │ │ └── test_threads_main.cpp
│ │ ├── run_tests.sh
│ │ ├── scripts/
│ │ │ ├── check-formatting.sh
│ │ │ ├── freebsd/
│ │ │ │ ├── before_install.sh
│ │ │ │ ├── before_script.sh
│ │ │ │ └── script.sh
│ │ │ ├── gen_run_tests.py
│ │ │ ├── gen_travis.py
│ │ │ ├── linux/
│ │ │ │ └── before_install.sh
│ │ │ └── windows/
│ │ │ ├── before_install.sh
│ │ │ ├── before_script.sh
│ │ │ └── script.sh
│ │ ├── src/
│ │ │ ├── arena.c
│ │ │ ├── background_thread.c
│ │ │ ├── base.c
│ │ │ ├── bin.c
│ │ │ ├── bin_info.c
│ │ │ ├── bitmap.c
│ │ │ ├── buf_writer.c
│ │ │ ├── cache_bin.c
│ │ │ ├── ckh.c
│ │ │ ├── counter.c
│ │ │ ├── ctl.c
│ │ │ ├── decay.c
│ │ │ ├── div.c
│ │ │ ├── ecache.c
│ │ │ ├── edata.c
│ │ │ ├── edata_cache.c
│ │ │ ├── ehooks.c
│ │ │ ├── emap.c
│ │ │ ├── eset.c
│ │ │ ├── exp_grow.c
│ │ │ ├── extent.c
│ │ │ ├── extent_dss.c
│ │ │ ├── extent_mmap.c
│ │ │ ├── fxp.c
│ │ │ ├── hook.c
│ │ │ ├── hpa.c
│ │ │ ├── hpa_hooks.c
│ │ │ ├── hpdata.c
│ │ │ ├── inspect.c
│ │ │ ├── jemalloc.c
│ │ │ ├── jemalloc_cpp.cpp
│ │ │ ├── large.c
│ │ │ ├── log.c
│ │ │ ├── malloc_io.c
│ │ │ ├── mutex.c
│ │ │ ├── nstime.c
│ │ │ ├── pa.c
│ │ │ ├── pa_extra.c
│ │ │ ├── pac.c
│ │ │ ├── pages.c
│ │ │ ├── pai.c
│ │ │ ├── peak_event.c
│ │ │ ├── prof.c
│ │ │ ├── prof_data.c
│ │ │ ├── prof_log.c
│ │ │ ├── prof_recent.c
│ │ │ ├── prof_stats.c
│ │ │ ├── prof_sys.c
│ │ │ ├── psset.c
│ │ │ ├── rtree.c
│ │ │ ├── safety_check.c
│ │ │ ├── san.c
│ │ │ ├── san_bump.c
│ │ │ ├── sc.c
│ │ │ ├── sec.c
│ │ │ ├── stats.c
│ │ │ ├── sz.c
│ │ │ ├── tcache.c
│ │ │ ├── test_hooks.c
│ │ │ ├── thread_event.c
│ │ │ ├── ticker.c
│ │ │ ├── ticker.py
│ │ │ ├── tsd.c
│ │ │ ├── witness.c
│ │ │ └── zone.c
│ │ └── test/
│ │ ├── analyze/
│ │ │ ├── prof_bias.c
│ │ │ ├── rand.c
│ │ │ └── sizes.c
│ │ ├── include/
│ │ │ └── test/
│ │ │ ├── SFMT-alti.h
│ │ │ ├── SFMT-params.h
│ │ │ ├── SFMT-params11213.h
│ │ │ ├── SFMT-params1279.h
│ │ │ ├── SFMT-params132049.h
│ │ │ ├── SFMT-params19937.h
│ │ │ ├── SFMT-params216091.h
│ │ │ ├── SFMT-params2281.h
│ │ │ ├── SFMT-params4253.h
│ │ │ ├── SFMT-params44497.h
│ │ │ ├── SFMT-params607.h
│ │ │ ├── SFMT-params86243.h
│ │ │ ├── SFMT-sse2.h
│ │ │ ├── SFMT.h
│ │ │ ├── arena_util.h
│ │ │ ├── bench.h
│ │ │ ├── bgthd.h
│ │ │ ├── btalloc.h
│ │ │ ├── extent_hooks.h
│ │ │ ├── jemalloc_test.h.in
│ │ │ ├── jemalloc_test_defs.h.in
│ │ │ ├── math.h
│ │ │ ├── mq.h
│ │ │ ├── mtx.h
│ │ │ ├── nbits.h
│ │ │ ├── san.h
│ │ │ ├── sleep.h
│ │ │ ├── test.h
│ │ │ ├── thd.h
│ │ │ └── timer.h
│ │ ├── integration/
│ │ │ ├── MALLOCX_ARENA.c
│ │ │ ├── aligned_alloc.c
│ │ │ ├── allocated.c
│ │ │ ├── cpp/
│ │ │ │ ├── basic.cpp
│ │ │ │ ├── infallible_new_false.cpp
│ │ │ │ ├── infallible_new_false.sh
│ │ │ │ ├── infallible_new_true.cpp
│ │ │ │ └── infallible_new_true.sh
│ │ │ ├── extent.c
│ │ │ ├── extent.sh
│ │ │ ├── malloc.c
│ │ │ ├── mallocx.c
│ │ │ ├── mallocx.sh
│ │ │ ├── overflow.c
│ │ │ ├── posix_memalign.c
│ │ │ ├── rallocx.c
│ │ │ ├── sdallocx.c
│ │ │ ├── slab_sizes.c
│ │ │ ├── slab_sizes.sh
│ │ │ ├── smallocx.c
│ │ │ ├── smallocx.sh
│ │ │ ├── thread_arena.c
│ │ │ ├── thread_tcache_enabled.c
│ │ │ ├── xallocx.c
│ │ │ └── xallocx.sh
│ │ ├── src/
│ │ │ ├── SFMT.c
│ │ │ ├── btalloc.c
│ │ │ ├── btalloc_0.c
│ │ │ ├── btalloc_1.c
│ │ │ ├── math.c
│ │ │ ├── mtx.c
│ │ │ ├── sleep.c
│ │ │ ├── test.c
│ │ │ ├── thd.c
│ │ │ └── timer.c
│ │ ├── stress/
│ │ │ ├── batch_alloc.c
│ │ │ ├── fill_flush.c
│ │ │ ├── hookbench.c
│ │ │ ├── large_microbench.c
│ │ │ ├── mallctl.c
│ │ │ └── microbench.c
│ │ ├── test.sh.in
│ │ └── unit/
│ │ ├── SFMT.c
│ │ ├── a0.c
│ │ ├── arena_decay.c
│ │ ├── arena_decay.sh
│ │ ├── arena_reset.c
│ │ ├── arena_reset_prof.c
│ │ ├── arena_reset_prof.sh
│ │ ├── atomic.c
│ │ ├── background_thread.c
│ │ ├── background_thread_enable.c
│ │ ├── base.c
│ │ ├── batch_alloc.c
│ │ ├── batch_alloc.sh
│ │ ├── batch_alloc_prof.c
│ │ ├── batch_alloc_prof.sh
│ │ ├── binshard.c
│ │ ├── binshard.sh
│ │ ├── bit_util.c
│ │ ├── bitmap.c
│ │ ├── buf_writer.c
│ │ ├── cache_bin.c
│ │ ├── ckh.c
│ │ ├── counter.c
│ │ ├── decay.c
│ │ ├── div.c
│ │ ├── double_free.c
│ │ ├── double_free.h
│ │ ├── edata_cache.c
│ │ ├── emitter.c
│ │ ├── extent_quantize.c
│ │ ├── fb.c
│ │ ├── fork.c
│ │ ├── fxp.c
│ │ ├── hash.c
│ │ ├── hook.c
│ │ ├── hpa.c
│ │ ├── hpa_background_thread.c
│ │ ├── hpa_background_thread.sh
│ │ ├── hpdata.c
│ │ ├── huge.c
│ │ ├── inspect.c
│ │ ├── inspect.sh
│ │ ├── junk.c
│ │ ├── junk.sh
│ │ ├── junk_alloc.c
│ │ ├── junk_alloc.sh
│ │ ├── junk_free.c
│ │ ├── junk_free.sh
│ │ ├── log.c
│ │ ├── mallctl.c
│ │ ├── malloc_conf_2.c
│ │ ├── malloc_conf_2.sh
│ │ ├── malloc_io.c
│ │ ├── math.c
│ │ ├── mpsc_queue.c
│ │ ├── mq.c
│ │ ├── mtx.c
│ │ ├── nstime.c
│ │ ├── oversize_threshold.c
│ │ ├── pa.c
│ │ ├── pack.c
│ │ ├── pack.sh
│ │ ├── pages.c
│ │ ├── peak.c
│ │ ├── ph.c
│ │ ├── prng.c
│ │ ├── prof_accum.c
│ │ ├── prof_accum.sh
│ │ ├── prof_active.c
│ │ ├── prof_active.sh
│ │ ├── prof_gdump.c
│ │ ├── prof_gdump.sh
│ │ ├── prof_hook.c
│ │ ├── prof_hook.sh
│ │ ├── prof_idump.c
│ │ ├── prof_idump.sh
│ │ ├── prof_log.c
│ │ ├── prof_log.sh
│ │ ├── prof_mdump.c
│ │ ├── prof_mdump.sh
│ │ ├── prof_recent.c
│ │ ├── prof_recent.sh
│ │ ├── prof_reset.c
│ │ ├── prof_reset.sh
│ │ ├── prof_stats.c
│ │ ├── prof_stats.sh
│ │ ├── prof_sys_thread_name.c
│ │ ├── prof_sys_thread_name.sh
│ │ ├── prof_tctx.c
│ │ ├── prof_tctx.sh
│ │ ├── prof_thread_name.c
│ │ ├── prof_thread_name.sh
│ │ ├── psset.c
│ │ ├── ql.c
│ │ ├── qr.c
│ │ ├── rb.c
│ │ ├── retained.c
│ │ ├── rtree.c
│ │ ├── safety_check.c
│ │ ├── safety_check.sh
│ │ ├── san.c
│ │ ├── san.sh
│ │ ├── san_bump.c
│ │ ├── sc.c
│ │ ├── sec.c
│ │ ├── seq.c
│ │ ├── size_check.c
│ │ ├── size_check.sh
│ │ ├── size_classes.c
│ │ ├── slab.c
│ │ ├── smoothstep.c
│ │ ├── spin.c
│ │ ├── stats.c
│ │ ├── stats_print.c
│ │ ├── sz.c
│ │ ├── tcache_max.c
│ │ ├── tcache_max.sh
│ │ ├── test_hooks.c
│ │ ├── thread_event.c
│ │ ├── thread_event.sh
│ │ ├── ticker.c
│ │ ├── tsd.c
│ │ ├── uaf.c
│ │ ├── witness.c
│ │ ├── zero.c
│ │ ├── zero.sh
│ │ ├── zero_realloc_abort.c
│ │ ├── zero_realloc_abort.sh
│ │ ├── zero_realloc_alloc.c
│ │ ├── zero_realloc_alloc.sh
│ │ ├── zero_realloc_free.c
│ │ ├── zero_realloc_free.sh
│ │ ├── zero_reallocs.c
│ │ └── zero_reallocs.sh
│ ├── linenoise/
│ │ ├── .gitignore
│ │ ├── Makefile
│ │ ├── README.markdown
│ │ ├── example.c
│ │ ├── linenoise.c
│ │ └── linenoise.h
│ ├── lua/
│ │ ├── COPYRIGHT
│ │ ├── HISTORY
│ │ ├── INSTALL
│ │ ├── Makefile
│ │ ├── README
│ │ ├── doc/
│ │ │ ├── contents.html
│ │ │ ├── lua.1
│ │ │ ├── lua.css
│ │ │ ├── lua.html
│ │ │ ├── luac.1
│ │ │ ├── luac.html
│ │ │ ├── manual.css
│ │ │ ├── manual.html
│ │ │ └── readme.html
│ │ ├── etc/
│ │ │ ├── Makefile
│ │ │ ├── README
│ │ │ ├── all.c
│ │ │ ├── lua.hpp
│ │ │ ├── lua.pc
│ │ │ ├── luavs.bat
│ │ │ ├── min.c
│ │ │ ├── noparser.c
│ │ │ └── strict.lua
│ │ ├── src/
│ │ │ ├── Makefile
│ │ │ ├── fpconv.c
│ │ │ ├── fpconv.h
│ │ │ ├── lapi.c
│ │ │ ├── lapi.h
│ │ │ ├── lauxlib.c
│ │ │ ├── lauxlib.h
│ │ │ ├── lbaselib.c
│ │ │ ├── lcode.c
│ │ │ ├── lcode.h
│ │ │ ├── ldblib.c
│ │ │ ├── ldebug.c
│ │ │ ├── ldebug.h
│ │ │ ├── ldo.c
│ │ │ ├── ldo.h
│ │ │ ├── ldump.c
│ │ │ ├── lfunc.c
│ │ │ ├── lfunc.h
│ │ │ ├── lgc.c
│ │ │ ├── lgc.h
│ │ │ ├── linit.c
│ │ │ ├── liolib.c
│ │ │ ├── llex.c
│ │ │ ├── llex.h
│ │ │ ├── llimits.h
│ │ │ ├── lmathlib.c
│ │ │ ├── lmem.c
│ │ │ ├── lmem.h
│ │ │ ├── loadlib.c
│ │ │ ├── lobject.c
│ │ │ ├── lobject.h
│ │ │ ├── lopcodes.c
│ │ │ ├── lopcodes.h
│ │ │ ├── loslib.c
│ │ │ ├── lparser.c
│ │ │ ├── lparser.h
│ │ │ ├── lstate.c
│ │ │ ├── lstate.h
│ │ │ ├── lstring.c
│ │ │ ├── lstring.h
│ │ │ ├── lstrlib.c
│ │ │ ├── ltable.c
│ │ │ ├── ltable.h
│ │ │ ├── ltablib.c
│ │ │ ├── ltm.c
│ │ │ ├── ltm.h
│ │ │ ├── lua.c
│ │ │ ├── lua.h
│ │ │ ├── lua_bit.c
│ │ │ ├── lua_cjson.c
│ │ │ ├── lua_cmsgpack.c
│ │ │ ├── lua_struct.c
│ │ │ ├── luac.c
│ │ │ ├── luaconf.h
│ │ │ ├── lualib.h
│ │ │ ├── lundump.c
│ │ │ ├── lundump.h
│ │ │ ├── lvm.c
│ │ │ ├── lvm.h
│ │ │ ├── lzio.c
│ │ │ ├── lzio.h
│ │ │ ├── print.c
│ │ │ ├── strbuf.c
│ │ │ └── strbuf.h
│ │ └── test/
│ │ ├── README
│ │ ├── bisect.lua
│ │ ├── cf.lua
│ │ ├── echo.lua
│ │ ├── env.lua
│ │ ├── factorial.lua
│ │ ├── fib.lua
│ │ ├── fibfor.lua
│ │ ├── globals.lua
│ │ ├── hello.lua
│ │ ├── life.lua
│ │ ├── luac.lua
│ │ ├── printf.lua
│ │ ├── readonly.lua
│ │ ├── sieve.lua
│ │ ├── sort.lua
│ │ ├── table.lua
│ │ ├── trace-calls.lua
│ │ ├── trace-globals.lua
│ │ └── xd.lua
│ └── xxhash/
│ ├── .gitignore
│ ├── LICENSE
│ ├── Makefile
│ ├── build/
│ │ └── make/
│ │ ├── README.md
│ │ └── multiconf.make
│ ├── xxhash.c
│ └── xxhash.h
├── modules/
│ ├── Makefile
│ ├── common.mk
│ ├── redisbloom/
│ │ └── Makefile
│ ├── redisearch/
│ │ └── Makefile
│ ├── redisjson/
│ │ └── Makefile
│ ├── redistimeseries/
│ │ └── Makefile
│ └── vector-sets/
│ ├── .gitignore
│ ├── Makefile
│ ├── README.md
│ ├── commands.json
│ ├── examples/
│ │ ├── cli-tool/
│ │ │ ├── .gitignore
│ │ │ ├── README.md
│ │ │ └── cli.py
│ │ ├── glove-100/
│ │ │ ├── README
│ │ │ ├── insert.py
│ │ │ └── recall.py
│ │ └── movies/
│ │ ├── .gitignore
│ │ ├── README
│ │ └── insert.py
│ ├── expr.c
│ ├── fastjson.c
│ ├── fastjson_test.c
│ ├── hnsw.c
│ ├── hnsw.h
│ ├── mixer.h
│ ├── test.py
│ ├── tests/
│ │ ├── basic_commands.py
│ │ ├── basic_similarity.py
│ │ ├── bin_vectorization.py
│ │ ├── concurrent_vadd_cas_del_vsim.py
│ │ ├── concurrent_vsim_and_del.py
│ │ ├── debug_digest.py
│ │ ├── deletion.py
│ │ ├── dimension_validation.py
│ │ ├── epsilon.py
│ │ ├── evict_empty.py
│ │ ├── filter_expr.py
│ │ ├── filter_int.py
│ │ ├── large_scale.py
│ │ ├── memory_usage.py
│ │ ├── node_update.py
│ │ ├── persistence.py
│ │ ├── q8_similarity.py
│ │ ├── q8_vectorization.py
│ │ ├── reduce.py
│ │ ├── replication.py
│ │ ├── threading_config.py
│ │ ├── vadd_cas.py
│ │ ├── vemb.py
│ │ ├── vismember.py
│ │ ├── vrand-ping-pong.py
│ │ ├── vrandmember.py
│ │ ├── vrange.py
│ │ ├── vsim_duplicate_filter.py
│ │ ├── vsim_filter_error_leak.py
│ │ ├── vsim_limit_efsearch.py
│ │ └── with.py
│ ├── vset.c
│ ├── vset_config.c
│ ├── vset_config.h
│ └── w2v.c
├── redis-full.conf
├── redis.conf
├── runtest
├── runtest-cluster
├── runtest-moduleapi
├── runtest-sentinel
├── sentinel.conf
├── src/
│ ├── .gitignore
│ ├── Makefile
│ ├── acl.c
│ ├── adlist.c
│ ├── adlist.h
│ ├── ae.c
│ ├── ae.h
│ ├── ae_epoll.c
│ ├── ae_evport.c
│ ├── ae_kqueue.c
│ ├── ae_select.c
│ ├── anet.c
│ ├── anet.h
│ ├── aof.c
│ ├── asciilogo.h
│ ├── atomicvar.h
│ ├── bio.c
│ ├── bio.h
│ ├── bitops.c
│ ├── blocked.c
│ ├── call_reply.c
│ ├── call_reply.h
│ ├── childinfo.c
│ ├── chk.c
│ ├── chk.h
│ ├── cli_commands.c
│ ├── cli_commands.h
│ ├── cli_common.c
│ ├── cli_common.h
│ ├── cluster.c
│ ├── cluster.h
│ ├── cluster_asm.c
│ ├── cluster_asm.h
│ ├── cluster_legacy.c
│ ├── cluster_legacy.h
│ ├── cluster_slot_stats.c
│ ├── cluster_slot_stats.h
│ ├── commands/
│ │ ├── README.md
│ │ ├── acl-cat.json
│ │ ├── acl-deluser.json
│ │ ├── acl-dryrun.json
│ │ ├── acl-genpass.json
│ │ ├── acl-getuser.json
│ │ ├── acl-help.json
│ │ ├── acl-list.json
│ │ ├── acl-load.json
│ │ ├── acl-log.json
│ │ ├── acl-save.json
│ │ ├── acl-setuser.json
│ │ ├── acl-users.json
│ │ ├── acl-whoami.json
│ │ ├── acl.json
│ │ ├── append.json
│ │ ├── asking.json
│ │ ├── auth.json
│ │ ├── bgrewriteaof.json
│ │ ├── bgsave.json
│ │ ├── bitcount.json
│ │ ├── bitfield.json
│ │ ├── bitfield_ro.json
│ │ ├── bitop.json
│ │ ├── bitpos.json
│ │ ├── blmove.json
│ │ ├── blmpop.json
│ │ ├── blpop.json
│ │ ├── brpop.json
│ │ ├── brpoplpush.json
│ │ ├── bzmpop.json
│ │ ├── bzpopmax.json
│ │ ├── bzpopmin.json
│ │ ├── client-caching.json
│ │ ├── client-getname.json
│ │ ├── client-getredir.json
│ │ ├── client-help.json
│ │ ├── client-id.json
│ │ ├── client-info.json
│ │ ├── client-kill.json
│ │ ├── client-list.json
│ │ ├── client-no-evict.json
│ │ ├── client-no-touch.json
│ │ ├── client-pause.json
│ │ ├── client-reply.json
│ │ ├── client-setinfo.json
│ │ ├── client-setname.json
│ │ ├── client-tracking.json
│ │ ├── client-trackinginfo.json
│ │ ├── client-unblock.json
│ │ ├── client-unpause.json
│ │ ├── client.json
│ │ ├── cluster-addslots.json
│ │ ├── cluster-addslotsrange.json
│ │ ├── cluster-bumpepoch.json
│ │ ├── cluster-count-failure-reports.json
│ │ ├── cluster-countkeysinslot.json
│ │ ├── cluster-delslots.json
│ │ ├── cluster-delslotsrange.json
│ │ ├── cluster-failover.json
│ │ ├── cluster-flushslots.json
│ │ ├── cluster-forget.json
│ │ ├── cluster-getkeysinslot.json
│ │ ├── cluster-help.json
│ │ ├── cluster-info.json
│ │ ├── cluster-keyslot.json
│ │ ├── cluster-links.json
│ │ ├── cluster-meet.json
│ │ ├── cluster-migration.json
│ │ ├── cluster-myid.json
│ │ ├── cluster-myshardid.json
│ │ ├── cluster-nodes.json
│ │ ├── cluster-replicas.json
│ │ ├── cluster-replicate.json
│ │ ├── cluster-reset.json
│ │ ├── cluster-saveconfig.json
│ │ ├── cluster-set-config-epoch.json
│ │ ├── cluster-setslot.json
│ │ ├── cluster-shards.json
│ │ ├── cluster-slaves.json
│ │ ├── cluster-slot-stats.json
│ │ ├── cluster-slots.json
│ │ ├── cluster-syncslots.json
│ │ ├── cluster.json
│ │ ├── command-count.json
│ │ ├── command-docs.json
│ │ ├── command-getkeys.json
│ │ ├── command-getkeysandflags.json
│ │ ├── command-help.json
│ │ ├── command-info.json
│ │ ├── command-list.json
│ │ ├── command.json
│ │ ├── config-get.json
│ │ ├── config-help.json
│ │ ├── config-resetstat.json
│ │ ├── config-rewrite.json
│ │ ├── config-set.json
│ │ ├── config.json
│ │ ├── copy.json
│ │ ├── dbsize.json
│ │ ├── debug.json
│ │ ├── decr.json
│ │ ├── decrby.json
│ │ ├── del.json
│ │ ├── delex.json
│ │ ├── digest.json
│ │ ├── discard.json
│ │ ├── dump.json
│ │ ├── echo.json
│ │ ├── eval.json
│ │ ├── eval_ro.json
│ │ ├── evalsha.json
│ │ ├── evalsha_ro.json
│ │ ├── exec.json
│ │ ├── exists.json
│ │ ├── expire.json
│ │ ├── expireat.json
│ │ ├── expiretime.json
│ │ ├── failover.json
│ │ ├── fcall.json
│ │ ├── fcall_ro.json
│ │ ├── flushall.json
│ │ ├── flushdb.json
│ │ ├── function-delete.json
│ │ ├── function-dump.json
│ │ ├── function-flush.json
│ │ ├── function-help.json
│ │ ├── function-kill.json
│ │ ├── function-list.json
│ │ ├── function-load.json
│ │ ├── function-restore.json
│ │ ├── function-stats.json
│ │ ├── function.json
│ │ ├── gcra.json
│ │ ├── gcrasetvalue.json
│ │ ├── geoadd.json
│ │ ├── geodist.json
│ │ ├── geohash.json
│ │ ├── geopos.json
│ │ ├── georadius.json
│ │ ├── georadius_ro.json
│ │ ├── georadiusbymember.json
│ │ ├── georadiusbymember_ro.json
│ │ ├── geosearch.json
│ │ ├── geosearchstore.json
│ │ ├── get.json
│ │ ├── getbit.json
│ │ ├── getdel.json
│ │ ├── getex.json
│ │ ├── getrange.json
│ │ ├── getset.json
│ │ ├── hdel.json
│ │ ├── hello.json
│ │ ├── hexists.json
│ │ ├── hexpire.json
│ │ ├── hexpireat.json
│ │ ├── hexpiretime.json
│ │ ├── hget.json
│ │ ├── hgetall.json
│ │ ├── hgetdel.json
│ │ ├── hgetex.json
│ │ ├── hincrby.json
│ │ ├── hincrbyfloat.json
│ │ ├── hkeys.json
│ │ ├── hlen.json
│ │ ├── hmget.json
│ │ ├── hmset.json
│ │ ├── hotkeys-get.json
│ │ ├── hotkeys-help.json
│ │ ├── hotkeys-reset.json
│ │ ├── hotkeys-start.json
│ │ ├── hotkeys-stop.json
│ │ ├── hotkeys.json
│ │ ├── hpersist.json
│ │ ├── hpexpire.json
│ │ ├── hpexpireat.json
│ │ ├── hpexpiretime.json
│ │ ├── hpttl.json
│ │ ├── hrandfield.json
│ │ ├── hscan.json
│ │ ├── hset.json
│ │ ├── hsetex.json
│ │ ├── hsetnx.json
│ │ ├── hstrlen.json
│ │ ├── httl.json
│ │ ├── hvals.json
│ │ ├── incr.json
│ │ ├── incrby.json
│ │ ├── incrbyfloat.json
│ │ ├── info.json
│ │ ├── keys.json
│ │ ├── lastsave.json
│ │ ├── latency-doctor.json
│ │ ├── latency-graph.json
│ │ ├── latency-help.json
│ │ ├── latency-histogram.json
│ │ ├── latency-history.json
│ │ ├── latency-latest.json
│ │ ├── latency-reset.json
│ │ ├── latency.json
│ │ ├── lcs.json
│ │ ├── lindex.json
│ │ ├── linsert.json
│ │ ├── llen.json
│ │ ├── lmove.json
│ │ ├── lmpop.json
│ │ ├── lolwut.json
│ │ ├── lpop.json
│ │ ├── lpos.json
│ │ ├── lpush.json
│ │ ├── lpushx.json
│ │ ├── lrange.json
│ │ ├── lrem.json
│ │ ├── lset.json
│ │ ├── ltrim.json
│ │ ├── memory-doctor.json
│ │ ├── memory-help.json
│ │ ├── memory-malloc-stats.json
│ │ ├── memory-purge.json
│ │ ├── memory-stats.json
│ │ ├── memory-usage.json
│ │ ├── memory.json
│ │ ├── mget.json
│ │ ├── migrate.json
│ │ ├── module-help.json
│ │ ├── module-list.json
│ │ ├── module-load.json
│ │ ├── module-loadex.json
│ │ ├── module-unload.json
│ │ ├── module.json
│ │ ├── monitor.json
│ │ ├── move.json
│ │ ├── mset.json
│ │ ├── msetex.json
│ │ ├── msetnx.json
│ │ ├── multi.json
│ │ ├── object-encoding.json
│ │ ├── object-freq.json
│ │ ├── object-help.json
│ │ ├── object-idletime.json
│ │ ├── object-refcount.json
│ │ ├── object.json
│ │ ├── persist.json
│ │ ├── pexpire.json
│ │ ├── pexpireat.json
│ │ ├── pexpiretime.json
│ │ ├── pfadd.json
│ │ ├── pfcount.json
│ │ ├── pfdebug.json
│ │ ├── pfmerge.json
│ │ ├── pfselftest.json
│ │ ├── ping.json
│ │ ├── psetex.json
│ │ ├── psubscribe.json
│ │ ├── psync.json
│ │ ├── pttl.json
│ │ ├── publish.json
│ │ ├── pubsub-channels.json
│ │ ├── pubsub-help.json
│ │ ├── pubsub-numpat.json
│ │ ├── pubsub-numsub.json
│ │ ├── pubsub-shardchannels.json
│ │ ├── pubsub-shardnumsub.json
│ │ ├── pubsub.json
│ │ ├── punsubscribe.json
│ │ ├── quit.json
│ │ ├── randomkey.json
│ │ ├── readonly.json
│ │ ├── readwrite.json
│ │ ├── rename.json
│ │ ├── renamenx.json
│ │ ├── replconf.json
│ │ ├── replicaof.json
│ │ ├── reset.json
│ │ ├── restore-asking.json
│ │ ├── restore.json
│ │ ├── role.json
│ │ ├── rpop.json
│ │ ├── rpoplpush.json
│ │ ├── rpush.json
│ │ ├── rpushx.json
│ │ ├── sadd.json
│ │ ├── save.json
│ │ ├── scan.json
│ │ ├── scard.json
│ │ ├── script-debug.json
│ │ ├── script-exists.json
│ │ ├── script-flush.json
│ │ ├── script-help.json
│ │ ├── script-kill.json
│ │ ├── script-load.json
│ │ ├── script.json
│ │ ├── sdiff.json
│ │ ├── sdiffstore.json
│ │ ├── select.json
│ │ ├── sentinel-ckquorum.json
│ │ ├── sentinel-config.json
│ │ ├── sentinel-debug.json
│ │ ├── sentinel-failover.json
│ │ ├── sentinel-flushconfig.json
│ │ ├── sentinel-get-master-addr-by-name.json
│ │ ├── sentinel-help.json
│ │ ├── sentinel-info-cache.json
│ │ ├── sentinel-is-master-down-by-addr.json
│ │ ├── sentinel-master.json
│ │ ├── sentinel-masters.json
│ │ ├── sentinel-monitor.json
│ │ ├── sentinel-myid.json
│ │ ├── sentinel-pending-scripts.json
│ │ ├── sentinel-remove.json
│ │ ├── sentinel-replicas.json
│ │ ├── sentinel-reset.json
│ │ ├── sentinel-sentinels.json
│ │ ├── sentinel-set.json
│ │ ├── sentinel-simulate-failure.json
│ │ ├── sentinel-slaves.json
│ │ ├── sentinel.json
│ │ ├── set.json
│ │ ├── setbit.json
│ │ ├── setex.json
│ │ ├── setnx.json
│ │ ├── setrange.json
│ │ ├── sflush.json
│ │ ├── shutdown.json
│ │ ├── sinter.json
│ │ ├── sintercard.json
│ │ ├── sinterstore.json
│ │ ├── sismember.json
│ │ ├── slaveof.json
│ │ ├── slowlog-get.json
│ │ ├── slowlog-help.json
│ │ ├── slowlog-len.json
│ │ ├── slowlog-reset.json
│ │ ├── slowlog.json
│ │ ├── smembers.json
│ │ ├── smismember.json
│ │ ├── smove.json
│ │ ├── sort.json
│ │ ├── sort_ro.json
│ │ ├── spop.json
│ │ ├── spublish.json
│ │ ├── srandmember.json
│ │ ├── srem.json
│ │ ├── sscan.json
│ │ ├── ssubscribe.json
│ │ ├── strlen.json
│ │ ├── subscribe.json
│ │ ├── substr.json
│ │ ├── sunion.json
│ │ ├── sunionstore.json
│ │ ├── sunsubscribe.json
│ │ ├── swapdb.json
│ │ ├── sync.json
│ │ ├── time.json
│ │ ├── touch.json
│ │ ├── trimslots.json
│ │ ├── ttl.json
│ │ ├── type.json
│ │ ├── unlink.json
│ │ ├── unsubscribe.json
│ │ ├── unwatch.json
│ │ ├── wait.json
│ │ ├── waitaof.json
│ │ ├── watch.json
│ │ ├── xack.json
│ │ ├── xackdel.json
│ │ ├── xadd.json
│ │ ├── xautoclaim.json
│ │ ├── xcfgset.json
│ │ ├── xclaim.json
│ │ ├── xdel.json
│ │ ├── xdelex.json
│ │ ├── xgroup-create.json
│ │ ├── xgroup-createconsumer.json
│ │ ├── xgroup-delconsumer.json
│ │ ├── xgroup-destroy.json
│ │ ├── xgroup-help.json
│ │ ├── xgroup-setid.json
│ │ ├── xgroup.json
│ │ ├── xidmprecord.json
│ │ ├── xinfo-consumers.json
│ │ ├── xinfo-groups.json
│ │ ├── xinfo-help.json
│ │ ├── xinfo-stream.json
│ │ ├── xinfo.json
│ │ ├── xlen.json
│ │ ├── xnack.json
│ │ ├── xpending.json
│ │ ├── xrange.json
│ │ ├── xread.json
│ │ ├── xreadgroup.json
│ │ ├── xrevrange.json
│ │ ├── xsetid.json
│ │ ├── xtrim.json
│ │ ├── zadd.json
│ │ ├── zcard.json
│ │ ├── zcount.json
│ │ ├── zdiff.json
│ │ ├── zdiffstore.json
│ │ ├── zincrby.json
│ │ ├── zinter.json
│ │ ├── zintercard.json
│ │ ├── zinterstore.json
│ │ ├── zlexcount.json
│ │ ├── zmpop.json
│ │ ├── zmscore.json
│ │ ├── zpopmax.json
│ │ ├── zpopmin.json
│ │ ├── zrandmember.json
│ │ ├── zrange.json
│ │ ├── zrangebylex.json
│ │ ├── zrangebyscore.json
│ │ ├── zrangestore.json
│ │ ├── zrank.json
│ │ ├── zrem.json
│ │ ├── zremrangebylex.json
│ │ ├── zremrangebyrank.json
│ │ ├── zremrangebyscore.json
│ │ ├── zrevrange.json
│ │ ├── zrevrangebylex.json
│ │ ├── zrevrangebyscore.json
│ │ ├── zrevrank.json
│ │ ├── zscan.json
│ │ ├── zscore.json
│ │ ├── zunion.json
│ │ └── zunionstore.json
│ ├── commands.c
│ ├── commands.def
│ ├── commands.h
│ ├── config.c
│ ├── config.h
│ ├── connection.c
│ ├── connection.h
│ ├── connhelpers.h
│ ├── crc16.c
│ ├── crc16_slottable.h
│ ├── crc64.c
│ ├── crc64.h
│ ├── crccombine.c
│ ├── crccombine.h
│ ├── crcspeed.c
│ ├── crcspeed.h
│ ├── db.c
│ ├── debug.c
│ ├── debugmacro.h
│ ├── defrag.c
│ ├── dict.c
│ ├── dict.h
│ ├── ebuckets.c
│ ├── ebuckets.h
│ ├── endianconv.c
│ ├── endianconv.h
│ ├── entry.c
│ ├── entry.h
│ ├── estore.c
│ ├── estore.h
│ ├── eval.c
│ ├── eventnotifier.c
│ ├── eventnotifier.h
│ ├── evict.c
│ ├── expire.c
│ ├── fast_float_strtod.c
│ ├── fast_float_strtod.h
│ ├── fmacros.h
│ ├── fmtargs.h
│ ├── function_lua.c
│ ├── functions.c
│ ├── functions.h
│ ├── fwtree.c
│ ├── fwtree.h
│ ├── gcra.c
│ ├── geo.c
│ ├── geo.h
│ ├── geohash.c
│ ├── geohash.h
│ ├── geohash_helper.c
│ ├── geohash_helper.h
│ ├── hotkeys.c
│ ├── hyperloglog.c
│ ├── intset.c
│ ├── intset.h
│ ├── iothread.c
│ ├── keymeta.c
│ ├── keymeta.h
│ ├── kvstore.c
│ ├── kvstore.h
│ ├── latency.c
│ ├── latency.h
│ ├── lazyfree.c
│ ├── listpack.c
│ ├── listpack.h
│ ├── listpack_malloc.h
│ ├── localtime.c
│ ├── logreqres.c
│ ├── lolwut.c
│ ├── lolwut.h
│ ├── lolwut5.c
│ ├── lolwut6.c
│ ├── lolwut8.c
│ ├── lzf.h
│ ├── lzfP.h
│ ├── lzf_c.c
│ ├── lzf_d.c
│ ├── memory_prefetch.c
│ ├── memory_prefetch.h
│ ├── memtest.c
│ ├── mkreleasehdr.sh
│ ├── module.c
│ ├── modules/
│ │ ├── .gitignore
│ │ ├── Makefile
│ │ ├── helloacl.c
│ │ ├── helloblock.c
│ │ ├── hellocluster.c
│ │ ├── hellodict.c
│ │ ├── hellohook.c
│ │ ├── hellotimer.c
│ │ ├── hellotype.c
│ │ └── helloworld.c
│ ├── monotonic.c
│ ├── monotonic.h
│ ├── mstr.c
│ ├── mstr.h
│ ├── mt19937-64.c
│ ├── mt19937-64.h
│ ├── multi.c
│ ├── networking.c
│ ├── notify.c
│ ├── object.c
│ ├── object.h
│ ├── pqsort.c
│ ├── pqsort.h
│ ├── pubsub.c
│ ├── quicklist.c
│ ├── quicklist.h
│ ├── rand.c
│ ├── rand.h
│ ├── rax.c
│ ├── rax.h
│ ├── rax_malloc.h
│ ├── rdb.c
│ ├── rdb.h
│ ├── redis-benchmark.c
│ ├── redis-check-aof.c
│ ├── redis-check-rdb.c
│ ├── redis-cli.c
│ ├── redis-trib.rb
│ ├── redisassert.c
│ ├── redisassert.h
│ ├── redismodule.h
│ ├── release.c
│ ├── replication.c
│ ├── resp_parser.c
│ ├── resp_parser.h
│ ├── rio.c
│ ├── rio.h
│ ├── script.c
│ ├── script.h
│ ├── script_lua.c
│ ├── script_lua.h
│ ├── sds.c
│ ├── sds.h
│ ├── sdsalloc.h
│ ├── sentinel.c
│ ├── server.c
│ ├── server.h
│ ├── setcpuaffinity.c
│ ├── setproctitle.c
│ ├── sha1.c
│ ├── sha1.h
│ ├── sha256.c
│ ├── sha256.h
│ ├── siphash.c
│ ├── slowlog.c
│ ├── slowlog.h
│ ├── socket.c
│ ├── solarisfixes.h
│ ├── sort.c
│ ├── sparkline.c
│ ├── sparkline.h
│ ├── stream.h
│ ├── strl.c
│ ├── syncio.c
│ ├── syscheck.c
│ ├── syscheck.h
│ ├── t_hash.c
│ ├── t_list.c
│ ├── t_set.c
│ ├── t_stream.c
│ ├── t_string.c
│ ├── t_zset.c
│ ├── testhelp.h
│ ├── threads_mngr.c
│ ├── threads_mngr.h
│ ├── timeout.c
│ ├── tls.c
│ ├── tracking.c
│ ├── tsan.sup
│ ├── unix.c
│ ├── util.c
│ ├── util.h
│ ├── valgrind.sup
│ ├── vector.c
│ ├── vector.h
│ ├── version.h
│ ├── ziplist.c
│ ├── ziplist.h
│ ├── zipmap.c
│ ├── zipmap.h
│ ├── zmalloc.c
│ └── zmalloc.h
├── tests/
│ ├── README.md
│ ├── assets/
│ │ ├── corrupt_empty_keys.rdb
│ │ ├── corrupt_ziplist.rdb
│ │ ├── default.conf
│ │ ├── encodings.rdb
│ │ ├── hash-ziplist.rdb
│ │ ├── hash-zipmap.rdb
│ │ ├── list-quicklist.rdb
│ │ ├── minimal.conf
│ │ ├── nodefaultuser.acl
│ │ ├── rdb-preamble.aof
│ │ ├── scriptbackup.rdb
│ │ ├── test_cli_hint_suite.txt
│ │ ├── user.acl
│ │ ├── userwithselectors.acl
│ │ └── zset-ziplist.rdb
│ ├── cluster/
│ │ ├── cluster.tcl
│ │ ├── run.tcl
│ │ ├── tests/
│ │ │ ├── 00-base.tcl
│ │ │ ├── 01-faildet.tcl
│ │ │ ├── 02-failover.tcl
│ │ │ ├── 03-failover-loop.tcl
│ │ │ ├── 04-resharding.tcl
│ │ │ ├── 05-slave-selection.tcl
│ │ │ ├── 06-slave-stop-cond.tcl
│ │ │ ├── 07-replica-migration.tcl
│ │ │ ├── 08-update-msg.tcl
│ │ │ ├── 09-pubsub.tcl
│ │ │ ├── 10-manual-failover.tcl
│ │ │ ├── 11-manual-takeover.tcl
│ │ │ ├── 12-replica-migration-2.tcl
│ │ │ ├── 12.1-replica-migration-3.tcl
│ │ │ ├── 13-no-failover-option.tcl
│ │ │ ├── 14-consistency-check.tcl
│ │ │ ├── 15-cluster-slots.tcl
│ │ │ ├── 16-transactions-on-replica.tcl
│ │ │ ├── 17-diskless-load-swapdb.tcl
│ │ │ ├── 18-info.tcl
│ │ │ ├── 19-cluster-nodes-slots.tcl
│ │ │ ├── 20-half-migrated-slot.tcl
│ │ │ ├── 21-many-slot-migration.tcl
│ │ │ ├── 22-replica-in-sync.tcl
│ │ │ ├── 25-pubsubshard-slot-migration.tcl
│ │ │ ├── 26-pubsubshard.tcl
│ │ │ ├── 28-cluster-shards.tcl
│ │ │ ├── 29-slot-migration-response.tcl
│ │ │ ├── helpers/
│ │ │ │ └── onlydots.tcl
│ │ │ └── includes/
│ │ │ ├── init-tests.tcl
│ │ │ └── utils.tcl
│ │ └── tmp/
│ │ └── .gitignore
│ ├── helpers/
│ │ ├── bg_block_op.tcl
│ │ ├── bg_complex_data.tcl
│ │ ├── fake_redis_node.tcl
│ │ └── gen_write_load.tcl
│ ├── instances.tcl
│ ├── integration/
│ │ ├── aof-multi-part.tcl
│ │ ├── aof-race.tcl
│ │ ├── aof.tcl
│ │ ├── block-repl.tcl
│ │ ├── convert-ziplist-hash-on-load.tcl
│ │ ├── convert-ziplist-zset-on-load.tcl
│ │ ├── convert-zipmap-hash-on-load.tcl
│ │ ├── corrupt-dump-fuzzer.tcl
│ │ ├── corrupt-dump.tcl
│ │ ├── dismiss-mem.tcl
│ │ ├── failover.tcl
│ │ ├── logging.tcl
│ │ ├── psync2-master-restart.tcl
│ │ ├── psync2-pingoff.tcl
│ │ ├── psync2-reg.tcl
│ │ ├── psync2.tcl
│ │ ├── rdb.tcl
│ │ ├── redis-benchmark.tcl
│ │ ├── redis-cli.tcl
│ │ ├── replication-2.tcl
│ │ ├── replication-3.tcl
│ │ ├── replication-4.tcl
│ │ ├── replication-buffer.tcl
│ │ ├── replication-iothreads.tcl
│ │ ├── replication-psync.tcl
│ │ ├── replication-rdbchannel.tcl
│ │ ├── replication.tcl
│ │ └── shutdown.tcl
│ ├── modules/
│ │ ├── Makefile
│ │ ├── aclcheck.c
│ │ ├── atomicslotmigration.c
│ │ ├── auth.c
│ │ ├── basics.c
│ │ ├── blockedclient.c
│ │ ├── blockonbackground.c
│ │ ├── blockonkeys.c
│ │ ├── cmdintrospection.c
│ │ ├── commandfilter.c
│ │ ├── configaccess.c
│ │ ├── crash.c
│ │ ├── datatype.c
│ │ ├── datatype2.c
│ │ ├── defragtest.c
│ │ ├── eventloop.c
│ │ ├── fork.c
│ │ ├── getchannels.c
│ │ ├── getkeys.c
│ │ ├── hash.c
│ │ ├── hooks.c
│ │ ├── infotest.c
│ │ ├── internalsecret.c
│ │ ├── keymeta_notify.c
│ │ ├── keyspace_events.c
│ │ ├── keyspecs.c
│ │ ├── list.c
│ │ ├── mallocsize.c
│ │ ├── misc.c
│ │ ├── moduleauthtwo.c
│ │ ├── moduleconfigs.c
│ │ ├── moduleconfigstwo.c
│ │ ├── postnotifications.c
│ │ ├── propagate.c
│ │ ├── publish.c
│ │ ├── rdbloadsave.c
│ │ ├── reply.c
│ │ ├── scan.c
│ │ ├── stream.c
│ │ ├── subcommands.c
│ │ ├── test_keymeta.c
│ │ ├── test_lazyfree.c
│ │ ├── testrdb.c
│ │ ├── timer.c
│ │ ├── usercall.c
│ │ └── zset.c
│ ├── sentinel/
│ │ ├── run.tcl
│ │ ├── tests/
│ │ │ ├── 00-base.tcl
│ │ │ ├── 01-conf-update.tcl
│ │ │ ├── 02-slaves-reconf.tcl
│ │ │ ├── 03-runtime-reconf.tcl
│ │ │ ├── 04-slave-selection.tcl
│ │ │ ├── 05-manual.tcl
│ │ │ ├── 06-ckquorum.tcl
│ │ │ ├── 07-down-conditions.tcl
│ │ │ ├── 08-hostname-conf.tcl
│ │ │ ├── 09-acl-support.tcl
│ │ │ ├── 10-replica-priority.tcl
│ │ │ ├── 11-port-0.tcl
│ │ │ ├── 12-master-reboot.tcl
│ │ │ ├── 13-info-command.tcl
│ │ │ ├── 14-debug-command.tcl
│ │ │ ├── 15-config-set-config-get.tcl
│ │ │ ├── helpers/
│ │ │ │ └── check_leaked_fds.tcl
│ │ │ └── includes/
│ │ │ ├── init-tests.tcl
│ │ │ ├── sentinel.conf
│ │ │ ├── start-init-tests.tcl
│ │ │ └── utils.tcl
│ │ └── tmp/
│ │ └── .gitignore
│ ├── support/
│ │ ├── aofmanifest.tcl
│ │ ├── benchmark.tcl
│ │ ├── cli.tcl
│ │ ├── cluster.tcl
│ │ ├── cluster_util.tcl
│ │ ├── redis.tcl
│ │ ├── response_transformers.tcl
│ │ ├── server.tcl
│ │ ├── test.tcl
│ │ ├── tmpfile.tcl
│ │ └── util.tcl
│ ├── test_helper.tcl
│ ├── unit/
│ │ ├── acl-v2.tcl
│ │ ├── acl.tcl
│ │ ├── aofrw.tcl
│ │ ├── auth.tcl
│ │ ├── bitfield.tcl
│ │ ├── bitops.tcl
│ │ ├── client-eviction.tcl
│ │ ├── cluster/
│ │ │ ├── announced-endpoints.tcl
│ │ │ ├── atomic-slot-migration.tcl
│ │ │ ├── cli.tcl
│ │ │ ├── cluster-response-tls.tcl
│ │ │ ├── failure-marking.tcl
│ │ │ ├── hostnames.tcl
│ │ │ ├── human-announced-nodename.tcl
│ │ │ ├── internal-secret.tcl
│ │ │ ├── links.tcl
│ │ │ ├── misc.tcl
│ │ │ ├── multi-slot-operations.tcl
│ │ │ ├── scripting.tcl
│ │ │ ├── sharded-pubsub.tcl
│ │ │ ├── slot-ownership.tcl
│ │ │ └── slot-stats.tcl
│ │ ├── dump.tcl
│ │ ├── expire.tcl
│ │ ├── functions.tcl
│ │ ├── gcra.tcl
│ │ ├── geo.tcl
│ │ ├── hotkeys.tcl
│ │ ├── hyperloglog.tcl
│ │ ├── info-command.tcl
│ │ ├── info-keysizes.tcl
│ │ ├── info.tcl
│ │ ├── introspection-2.tcl
│ │ ├── introspection.tcl
│ │ ├── keyspace.tcl
│ │ ├── latency-monitor.tcl
│ │ ├── lazyfree.tcl
│ │ ├── limits.tcl
│ │ ├── maxmemory.tcl
│ │ ├── memefficiency.tcl
│ │ ├── moduleapi/
│ │ │ ├── aclcheck.tcl
│ │ │ ├── async_rm_call.tcl
│ │ │ ├── auth.tcl
│ │ │ ├── basics.tcl
│ │ │ ├── blockedclient.tcl
│ │ │ ├── blockonbackground.tcl
│ │ │ ├── blockonkeys.tcl
│ │ │ ├── cluster.tcl
│ │ │ ├── cmdintrospection.tcl
│ │ │ ├── commandfilter.tcl
│ │ │ ├── configaccess.tcl
│ │ │ ├── crash.tcl
│ │ │ ├── datatype.tcl
│ │ │ ├── datatype2.tcl
│ │ │ ├── defrag.tcl
│ │ │ ├── eventloop.tcl
│ │ │ ├── fork.tcl
│ │ │ ├── getchannels.tcl
│ │ │ ├── getkeys.tcl
│ │ │ ├── hash.tcl
│ │ │ ├── hooks.tcl
│ │ │ ├── infotest.tcl
│ │ │ ├── infra.tcl
│ │ │ ├── internalsecret.tcl
│ │ │ ├── keymeta.tcl
│ │ │ ├── keyspace_events.tcl
│ │ │ ├── keyspecs.tcl
│ │ │ ├── ksn_notify_side_effect.tcl
│ │ │ ├── list.tcl
│ │ │ ├── mallocsize.tcl
│ │ │ ├── misc.tcl
│ │ │ ├── moduleauth.tcl
│ │ │ ├── moduleconfigs.tcl
│ │ │ ├── postnotifications.tcl
│ │ │ ├── propagate.tcl
│ │ │ ├── publish.tcl
│ │ │ ├── rdbloadsave.tcl
│ │ │ ├── reply.tcl
│ │ │ ├── scan.tcl
│ │ │ ├── stream.tcl
│ │ │ ├── subcommands.tcl
│ │ │ ├── test_lazyfree.tcl
│ │ │ ├── testrdb.tcl
│ │ │ ├── timer.tcl
│ │ │ ├── usercall.tcl
│ │ │ └── zset.tcl
│ │ ├── multi.tcl
│ │ ├── networking.tcl
│ │ ├── obuf-limits.tcl
│ │ ├── oom-score-adj.tcl
│ │ ├── other.tcl
│ │ ├── pause.tcl
│ │ ├── printver.tcl
│ │ ├── protocol.tcl
│ │ ├── pubsub.tcl
│ │ ├── pubsubshard.tcl
│ │ ├── querybuf.tcl
│ │ ├── quit.tcl
│ │ ├── replybufsize.tcl
│ │ ├── scan.tcl
│ │ ├── scripting.tcl
│ │ ├── shutdown.tcl
│ │ ├── slowlog.tcl
│ │ ├── sort.tcl
│ │ ├── tls.tcl
│ │ ├── tracking.tcl
│ │ ├── type/
│ │ │ ├── hash-field-expire.tcl
│ │ │ ├── hash.tcl
│ │ │ ├── incr.tcl
│ │ │ ├── list-2.tcl
│ │ │ ├── list-3.tcl
│ │ │ ├── list.tcl
│ │ │ ├── set.tcl
│ │ │ ├── stream-cgroups.tcl
│ │ │ ├── stream.tcl
│ │ │ ├── string.tcl
│ │ │ └── zset.tcl
│ │ ├── violations.tcl
│ │ └── wait.tcl
│ └── vectorset/
│ └── vectorset.tcl
└── utils/
├── build-static-symbols.tcl
├── cluster_fail_time.tcl
├── corrupt_rdb.c
├── create-cluster/
│ ├── .gitignore
│ ├── README
│ └── create-cluster
├── gen-test-certs.sh
├── generate-command-code.py
├── generate-commands-json.py
├── generate-fmtargs.py
├── generate-module-api-doc.rb
├── graphs/
│ └── commits-over-time/
│ ├── README.md
│ └── genhtml.tcl
├── hyperloglog/
│ ├── .gitignore
│ ├── hll-err.rb
│ └── hll-gnuplot-graph.rb
├── install_server.sh
├── lru/
│ ├── README
│ ├── lfu-simulation.c
│ └── test-lru.rb
├── redis-copy.rb
├── redis-sha1.rb
├── redis_init_script
├── redis_init_script.tpl
├── releasetools/
│ ├── 01_create_tarball.sh
│ ├── 02_upload_tarball.sh
│ ├── 03_test_release.sh
│ ├── 04_release_hash.sh
│ └── changelog.tcl
├── reply_schema_linter.js
├── req-res-log-validator.py
├── req-res-validator/
│ └── requirements.txt
├── speed-regression.tcl
├── srandmember/
│ ├── README.md
│ ├── showdist.rb
│ └── showfreq.rb
├── systemd-redis_multiple_servers@.service
├── systemd-redis_server.service
├── tracking_collisions.c
└── whatisdoing.sh
================================================
FILE CONTENTS
================================================
================================================
FILE: .codespell/.codespellrc
================================================
[codespell]
quiet-level = 2
count =
skip = ./deps,./src/crc16_slottable.h,tmp*,./.git,./lcov-html
ignore-words = ./.codespell/wordlist.txt
================================================
FILE: .codespell/requirements.txt
================================================
codespell==2.2.5
================================================
FILE: .codespell/wordlist.txt
================================================
ake
bale
fle
fo
gameboy
mutli
nd
nees
oll
optin
ot
smove
te
tre
cancelability
ist
statics
filetest
ro
exat
clen
================================================
FILE: .gitattributes
================================================
# We set commands.c's merge driver to `binary` so when it conflicts during a
# merge git will leave the local version unmodified. This way our Makefile
# will rebuild it based on src/commands/*.json before trying to compile it.
# Otherwise the file gets modified and gets the same timestamp as the .json
# files. So the Makefile doesn't attempt to rebuild it before compiling.
src/commands.c merge=binary
================================================
FILE: .github/ISSUE_TEMPLATE/bug_report.md
================================================
---
name: Bug report
about: Help us improve Redis by reporting a bug
title: '[BUG]'
labels: ''
assignees: ''
---
**Describe the bug**
A short description of the bug.
**To reproduce**
Steps to reproduce the behavior and/or a minimal code sample.
**Expected behavior**
A description of what you expected to happen.
**Additional information**
Any additional information that is relevant to the problem.
================================================
FILE: .github/ISSUE_TEMPLATE/crash_report.md
================================================
---
name: Crash report
about: Submit a crash report
title: '[CRASH] <short description>'
labels: ''
assignees: ''
---
Notice!
- If a Redis module was involved, please open an issue in the module's repo instead!
- If you're using docker on Apple M1, please make sure the image you're using was compiled for ARM!
**Crash report**
Paste the complete crash log between the quotes below. Please include a few lines from the log preceding the crash report to provide some context.
```
```
**Additional information**
1. OS distribution and version
2. Steps to reproduce (if any)
================================================
FILE: .github/ISSUE_TEMPLATE/feature_request.md
================================================
---
name: Feature request
about: Suggest a feature for Redis
title: '[NEW]'
labels: ''
assignees: ''
---
**The problem/use-case that the feature addresses**
A description of the problem that the feature will solve, or the use-case with which the feature will be used.
**Description of the feature**
A description of what you want to happen.
**Alternatives you've considered**
Any alternative solutions or features you've considered, including references to existing open and closed feature requests in this repository.
**Additional information**
Any additional information that is relevant to the feature request.
================================================
FILE: .github/ISSUE_TEMPLATE/other_stuff.md
================================================
---
name: Other
about: Can't find the right issue type? Use this one!
title: ''
labels: ''
assignees: ''
---
================================================
FILE: .github/ISSUE_TEMPLATE/question.md
================================================
---
name: Question
about: Ask the Redis developers
title: '[QUESTION]'
labels: ''
assignees: ''
---
Please keep in mind that this issue tracker should be used for reporting bugs or proposing improvements to the Redis server.
Generally, questions about using Redis should be directed to the [community](https://redis.io/community):
* [the mailing list](https://groups.google.com/forum/#!forum/redis-db)
* [the `redis` tag at StackOverflow](http://stackoverflow.com/questions/tagged/redis)
* [/r/redis subreddit](http://www.reddit.com/r/redis)
* [github discussions](https://github.com/redis/redis/discussions)
It is also possible that your question was already asked here, so please do a quick issues search before submitting. Lastly, if your question is about one of Redis' [clients](https://redis.io/clients), you may to contact your client's developers for help.
That said, please feel free to replace all this with your question :)
================================================
FILE: .github/dependabot.yml
================================================
# To get started with Dependabot version updates, you'll need to specify which
# package ecosystems to update and where the package manifests are located.
# Please see the documentation for all configuration options:
# https://help.github.com/github/administering-a-repository/configuration-options-for-dependency-updates
version: 2
updates:
- package-ecosystem: github-actions
directory: /
schedule:
interval: weekly
- package-ecosystem: pip
directory: /.codespell
schedule:
interval: weekly
================================================
FILE: .github/workflows/ci.yml
================================================
name: CI
on: [push, pull_request]
jobs:
test-ubuntu-latest:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: make
# Fail build if there are warnings
# build with TLS just for compilation coverage
run: make REDIS_CFLAGS='-Werror' BUILD_TLS=yes
- name: test
run: |
sudo apt-get install tcl8.6 tclx
./runtest --verbose --tags -slow --dump-logs
- name: validate commands.def up to date
run: |
touch src/commands/ping.json
make commands.def
dirty=$(git diff)
if [[ ! -z $dirty ]]; then echo $dirty; exit 1; fi
test-sanitizer-address:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: make
# build with TLS module just for compilation coverage
run: make SANITIZER=address REDIS_CFLAGS='-Werror -DDEBUG_ASSERTIONS -DREDIS_TEST' BUILD_TLS=module
- name: testprep
run: sudo apt-get install tcl8.6 tclx -y
- name: test
run: ./runtest --verbose --tags -slow --dump-logs
build-debian-old:
runs-on: ubuntu-latest
container: debian:buster
steps:
- uses: actions/checkout@v4
- name: make
run: |
sed -i 's|http://deb.debian.org/debian|http://archive.debian.org/debian|g' /etc/apt/sources.list
sed -i 's|http://security.debian.org|http://archive.debian.org/debian-security|g' /etc/apt/sources.list
apt-get update && apt-get install -y build-essential
make REDIS_CFLAGS='-Werror'
build-macos-latest:
runs-on: macos-latest
steps:
- uses: actions/checkout@v4
- name: make
# Fail build if there are warnings
# build with TLS just for compilation coverage
run: make REDIS_CFLAGS='-Werror' BUILD_TLS=yes
build-32bit:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: make
run: |
sudo apt-get update && sudo apt-get install libc6-dev-i386 gcc-multilib
make REDIS_CFLAGS='-Werror' 32bit
build-libc-malloc:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: make
run: make REDIS_CFLAGS='-Werror' MALLOC=libc
build-centos-jemalloc:
runs-on: ubuntu-latest
container: quay.io/centos/centos:stream9
steps:
- uses: actions/checkout@v4
- name: make
run: |
dnf -y install which gcc make
make REDIS_CFLAGS='-Werror'
build-old-chain-jemalloc:
runs-on: ubuntu-latest
container: ubuntu:20.04
steps:
- uses: actions/checkout@v4
- name: make
run: |
apt-get update
apt-get install -y gnupg2
echo "deb http://archive.ubuntu.com/ubuntu/ xenial main" >> /etc/apt/sources.list
echo "deb http://archive.ubuntu.com/ubuntu/ xenial universe" >> /etc/apt/sources.list
apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 40976EAF437D05B5
apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 3B4FE6ACC0B21F32
apt-get update
apt-get install -y make gcc-4.8
update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8 100
make CC=gcc REDIS_CFLAGS='-Werror'
================================================
FILE: .github/workflows/codecov.yml
================================================
name: "Codecov"
# Enabling on each push is to display the coverage changes in every PR,
# where each PR needs to be compared against the coverage of the head commit
on: [push, pull_request]
permissions:
contents: read
jobs:
code-coverage:
if: ${{ github.repository == 'redis/redis' }}
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Install lcov and run test
run: |
sudo apt-get install lcov
make lcov
- name: Upload coverage reports to Codecov
uses: codecov/codecov-action@57e3a136b779b570ffcdbf80b3bdc90e7fab3de2 # v6
env:
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
with:
files: ./src/redis.info
disable_search: true
fail_ci_if_error: true
================================================
FILE: .github/workflows/codeql-analysis.yml
================================================
name: "CodeQL"
on:
pull_request:
schedule:
# run weekly new vulnerability was added to the database
- cron: '0 0 * * 0'
jobs:
analyze:
name: Analyze
runs-on: ubuntu-latest
if: github.event_name != 'schedule' || github.repository == 'redis/redis'
strategy:
fail-fast: false
matrix:
language: [ 'cpp' ]
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Initialize CodeQL
uses: github/codeql-action/init@v3
with:
languages: ${{ matrix.language }}
- name: Autobuild
uses: github/codeql-action/autobuild@v3
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v3
================================================
FILE: .github/workflows/coverity.yml
================================================
# Creates and uploads a Coverity build on a schedule
name: Coverity Scan
on:
schedule:
# Run once daily, since below 500k LOC can have 21 builds per week, per https://scan.coverity.com/faq#frequency
- cron: '0 0 * * *'
# Support manual execution
workflow_dispatch:
jobs:
coverity:
if: github.repository == 'redis/redis'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@main
- name: Download and extract the Coverity Build Tool
run: |
wget -q https://scan.coverity.com/download/cxx/linux64 --post-data "token=${COVERITY_SCAN_TOKEN}&project=redis-unstable" -O cov-analysis-linux64.tar.gz
mkdir cov-analysis-linux64
tar xzf cov-analysis-linux64.tar.gz --strip 1 -C cov-analysis-linux64
env:
COVERITY_SCAN_TOKEN: ${{ secrets.COVERITY_SCAN_TOKEN }}
- name: Install Redis dependencies
run: sudo apt install -y gcc tcl8.6 tclx procps libssl-dev
- name: Build with cov-build
run: cov-analysis-linux64/bin/cov-build --dir cov-int make
- name: Upload the result
run: |
tar czvf cov-int.tgz cov-int
curl \
--form project=redis-unstable \
--form email="${COVERITY_SCAN_EMAIL}" \
--form token="${COVERITY_SCAN_TOKEN}" \
--form file=@cov-int.tgz \
https://scan.coverity.com/builds
env:
COVERITY_SCAN_EMAIL: ${{ secrets.COVERITY_SCAN_EMAIL }}
COVERITY_SCAN_TOKEN: ${{ secrets.COVERITY_SCAN_TOKEN }}
================================================
FILE: .github/workflows/daily.yml
================================================
name: Daily
on:
pull_request:
branches:
# any PR to a release branch.
- '[0-9].[0-9]'
schedule:
- cron: '0 0 * * *'
workflow_dispatch:
inputs:
skipjobs:
description: 'jobs to skip (delete the ones you wanna keep, do not leave empty)'
default: 'valgrind,sanitizer,tls,freebsd,macos,alpine,32bit,iothreads,ubuntu,centos,malloc,specific,fortify,reply-schema,oldTC,defrag,vectorset,assert-keyspace,arm'
skiptests:
description: 'tests to skip (delete the ones you wanna keep, do not leave empty)'
default: 'redis,modules,sentinel,cluster,unittest'
test_args:
description: 'extra test arguments'
default: ''
cluster_test_args:
description: 'extra cluster / sentinel test arguments'
default: ''
use_repo:
description: 'repo owner and name'
default: 'redis/redis'
use_git_ref:
description: 'git branch or sha to use'
default: 'unstable'
jobs:
test-ubuntu-jemalloc:
runs-on: ubuntu-latest
if: |
(github.event_name == 'workflow_dispatch' || (github.event_name != 'workflow_dispatch' && github.repository == 'redis/redis')) &&
!contains(github.event.inputs.skipjobs, 'ubuntu')
timeout-minutes: 360
steps:
- name: prep
if: github.event_name == 'workflow_dispatch'
run: |
echo "GITHUB_REPOSITORY=${{github.event.inputs.use_repo}}" >> $GITHUB_ENV
echo "GITHUB_HEAD_REF=${{github.event.inputs.use_git_ref}}" >> $GITHUB_ENV
echo "skipjobs: ${{github.event.inputs.skipjobs}}"
echo "skiptests: ${{github.event.inputs.skiptests}}"
echo "test_args: ${{github.event.inputs.test_args}}"
echo "cluster_test_args: ${{github.event.inputs.cluster_test_args}}"
- uses: actions/checkout@v4
with:
repository: ${{ env.GITHUB_REPOSITORY }}
ref: ${{ env.GITHUB_HEAD_REF }}
- name: make
run: make REDIS_CFLAGS='-Werror -DREDIS_TEST -DDEBUG_ASSERTIONS'
- name: testprep
run: sudo apt-get install tcl8.6 tclx
- name: test
if: true && !contains(github.event.inputs.skiptests, 'redis')
run: ./runtest --accurate --verbose --dump-logs ${{github.event.inputs.test_args}}
- name: sentinel tests
if: true && !contains(github.event.inputs.skiptests, 'sentinel')
run: ./runtest-sentinel ${{github.event.inputs.cluster_test_args}}
- name: cluster tests
if: true && !contains(github.event.inputs.skiptests, 'cluster')
run: ./runtest-cluster ${{github.event.inputs.cluster_test_args}}
- name: unittest
if: true && !contains(github.event.inputs.skiptests, 'unittest')
run: ./src/redis-server test all --accurate
test-ubuntu-arm:
runs-on: ubuntu-24.04-arm
if: |
(github.event_name == 'workflow_dispatch' || (github.event_name != 'workflow_dispatch' && github.repository == 'redis/redis')) &&
!contains(github.event.inputs.skipjobs, 'arm')
timeout-minutes: 360
steps:
- name: prep
if: github.event_name == 'workflow_dispatch'
run: |
echo "GITHUB_REPOSITORY=${{github.event.inputs.use_repo}}" >> $GITHUB_ENV
echo "GITHUB_HEAD_REF=${{github.event.inputs.use_git_ref}}" >> $GITHUB_ENV
echo "skipjobs: ${{github.event.inputs.skipjobs}}"
echo "skiptests: ${{github.event.inputs.skiptests}}"
echo "test_args: ${{github.event.inputs.test_args}}"
echo "cluster_test_args: ${{github.event.inputs.cluster_test_args}}"
- uses: actions/checkout@v4
with:
repository: ${{ env.GITHUB_REPOSITORY }}
ref: ${{ env.GITHUB_HEAD_REF }}
- name: make
run: make REDIS_CFLAGS='-Werror -DREDIS_TEST'
- name: testprep
run: |
sudo apt-get update
sudo apt-get install -y tcl8.6 tclx
- name: test
if: true && !contains(github.event.inputs.skiptests, 'redis')
run: ./runtest --accurate --verbose --dump-logs ${{github.event.inputs.test_args}}
- name: sentinel tests
if: true && !contains(github.event.inputs.skiptests, 'sentinel')
run: ./runtest-sentinel ${{github.event.inputs.cluster_test_args}}
- name: cluster tests
if: true && !contains(github.event.inputs.skiptests, 'cluster')
run: ./runtest-cluster ${{github.event.inputs.cluster_test_args}}
- name: unittest
if: true && !contains(github.event.inputs.skiptests, 'unittest')
run: ./src/redis-server test all --accurate
test-ubuntu-arm-libc-malloc:
runs-on: ubuntu-24.04-arm
if: |
(github.event_name == 'workflow_dispatch' || (github.event_name != 'workflow_dispatch' && github.repository == 'redis/redis')) &&
(!contains(github.event.inputs.skipjobs, 'arm') || !contains(github.event.inputs.skipjobs, 'malloc'))
timeout-minutes: 360
steps:
- name: prep
if: github.event_name == 'workflow_dispatch'
run: |
echo "GITHUB_REPOSITORY=${{github.event.inputs.use_repo}}" >> $GITHUB_ENV
echo "GITHUB_HEAD_REF=${{github.event.inputs.use_git_ref}}" >> $GITHUB_ENV
echo "skipjobs: ${{github.event.inputs.skipjobs}}"
echo "skiptests: ${{github.event.inputs.skiptests}}"
echo "test_args: ${{github.event.inputs.test_args}}"
echo "cluster_test_args: ${{github.event.inputs.cluster_test_args}}"
- uses: actions/checkout@v4
with:
repository: ${{ env.GITHUB_REPOSITORY }}
ref: ${{ env.GITHUB_HEAD_REF }}
- name: make
run: make MALLOC=libc REDIS_CFLAGS='-Werror -DREDIS_TEST'
- name: testprep
run: |
sudo apt-get update
sudo apt-get install -y tcl8.6 tclx
- name: test
if: true && !contains(github.event.inputs.skiptests, 'redis')
run: ./runtest --accurate --verbose --dump-logs ${{github.event.inputs.test_args}}
- name: sentinel tests
if: true && !contains(github.event.inputs.skiptests, 'sentinel')
run: ./runtest-sentinel ${{github.event.inputs.cluster_test_args}}
- name: cluster tests
if: true && !contains(github.event.inputs.skiptests, 'cluster')
run: ./runtest-cluster ${{github.event.inputs.cluster_test_args}}
test-ubuntu-arm-tls:
runs-on: ubuntu-24.04-arm
if: |
(github.event_name == 'workflow_dispatch' || (github.event_name != 'workflow_dispatch' && github.repository == 'redis/redis')) &&
(!contains(github.event.inputs.skipjobs, 'arm') || !contains(github.event.inputs.skipjobs, 'tls'))
timeout-minutes: 360
steps:
- name: prep
if: github.event_name == 'workflow_dispatch'
run: |
echo "GITHUB_REPOSITORY=${{github.event.inputs.use_repo}}" >> $GITHUB_ENV
echo "GITHUB_HEAD_REF=${{github.event.inputs.use_git_ref}}" >> $GITHUB_ENV
echo "skipjobs: ${{github.event.inputs.skipjobs}}"
echo "skiptests: ${{github.event.inputs.skiptests}}"
echo "test_args: ${{github.event.inputs.test_args}}"
echo "cluster_test_args: ${{github.event.inputs.cluster_test_args}}"
- uses: actions/checkout@v4
with:
repository: ${{ env.GITHUB_REPOSITORY }}
ref: ${{ env.GITHUB_HEAD_REF }}
- name: make
run: make BUILD_TLS=yes REDIS_CFLAGS='-Werror -DREDIS_TEST'
- name: testprep
run: |
sudo apt-get update
sudo apt-get install -y tcl8.6 tclx tcl-tls
./utils/gen-test-certs.sh
- name: test
if: true && !contains(github.event.inputs.skiptests, 'redis')
run: ./runtest --accurate --verbose --tls --dump-logs ${{github.event.inputs.test_args}}
- name: sentinel tests
if: true && !contains(github.event.inputs.skiptests, 'sentinel')
run: ./runtest-sentinel --tls ${{github.event.inputs.cluster_test_args}}
- name: cluster tests
if: true && !contains(github.event.inputs.skiptests, 'cluster')
run: ./runtest-cluster --tls ${{github.event.inputs.cluster_test_args}}
# Test with DEBUG_ASSERT_KEYSPACE enabled to verify keyspace consistency.
# This enables additional runtime checks after each command for:
# - Info keysizes histogram
# - Cluster slot stats
# Skips slow and defrag tests to avoid timeouts while maintaining good coverage.
test-debug-assert-keyspace:
runs-on: ubuntu-latest
if: |
(github.event_name == 'workflow_dispatch' || (github.event_name != 'workflow_dispatch' && github.repository == 'redis/redis')) &&
!contains(github.event.inputs.skipjobs, 'assert-keyspace')
timeout-minutes: 360
steps:
- name: prep
if: github.event_name == 'workflow_dispatch'
run: |
echo "GITHUB_REPOSITORY=${{github.event.inputs.use_repo}}" >> $GITHUB_ENV
echo "GITHUB_HEAD_REF=${{github.event.inputs.use_git_ref}}" >> $GITHUB_ENV
echo "skipjobs: ${{github.event.inputs.skipjobs}}"
echo "skiptests: ${{github.event.inputs.skiptests}}"
echo "test_args: ${{github.event.inputs.test_args}}"
echo "cluster_test_args: ${{github.event.inputs.cluster_test_args}}"
- uses: actions/checkout@v4
with:
repository: ${{ env.GITHUB_REPOSITORY }}
ref: ${{ env.GITHUB_HEAD_REF }}
- name: make
run: make REDIS_CFLAGS='-Werror -DREDIS_TEST -DDEBUG_ASSERT_KEYSPACE -DDEBUG_ASSERTIONS'
- name: testprep
run: sudo apt-get install tcl8.6 tclx
- name: test
if: true && !contains(github.event.inputs.skiptests, 'redis')
run: |
./runtest --verbose --tags "-slow -defrag" \
--dump-logs ${{github.event.inputs.test_args}}
- name: cluster tests
if: true && !contains(github.event.inputs.skiptests, 'cluster')
run: ./runtest-cluster ${{github.event.inputs.cluster_test_args}}
test-ubuntu-jemalloc-fortify:
runs-on: ubuntu-latest
if: |
(github.event_name == 'workflow_dispatch' || (github.event_name != 'workflow_dispatch' && github.repository == 'redis/redis')) &&
!contains(github.event.inputs.skipjobs, 'fortify')
timeout-minutes: 360
steps:
- name: prep
if: github.event_name == 'workflow_dispatch'
run: |
echo "GITHUB_REPOSITORY=${{github.event.inputs.use_repo}}" >> $GITHUB_ENV
echo "GITHUB_HEAD_REF=${{github.event.inputs.use_git_ref}}" >> $GITHUB_ENV
echo "skipjobs: ${{github.event.inputs.skipjobs}}"
echo "skiptests: ${{github.event.inputs.skiptests}}"
echo "test_args: ${{github.event.inputs.test_args}}"
echo "cluster_test_args: ${{github.event.inputs.cluster_test_args}}"
- uses: actions/checkout@v4
with:
repository: ${{ env.GITHUB_REPOSITORY }}
ref: ${{ env.GITHUB_HEAD_REF }}
- name: make
run: |
apt-get update && apt-get install -y make gcc
make CC=gcc REDIS_CFLAGS='-Werror -DREDIS_TEST -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=3'
- name: testprep
run: sudo apt-get install -y tcl8.6 tclx procps
- name: test
if: true && !contains(github.event.inputs.skiptests, 'redis')
run: ./runtest --accurate --verbose --dump-logs ${{github.event.inputs.test_args}}
- name: sentinel tests
if: true && !contains(github.event.inputs.skiptests, 'sentinel')
run: ./runtest-sentinel ${{github.event.inputs.cluster_test_args}}
- name: cluster tests
if: true && !contains(github.event.inputs.skiptests, 'cluster')
run: ./runtest-cluster ${{github.event.inputs.cluster_test_args}}
- name: unittest
if: true && !contains(github.event.inputs.skiptests, 'unittest')
run: ./src/redis-server test all --accurate
test-ubuntu-libc-malloc:
runs-on: ubuntu-latest
if: |
(github.event_name == 'workflow_dispatch' || (github.event_name != 'workflow_dispatch' && github.repository == 'redis/redis')) &&
!contains(github.event.inputs.skipjobs, 'malloc')
timeout-minutes: 360
steps:
- name: prep
if: github.event_name == 'workflow_dispatch'
run: |
echo "GITHUB_REPOSITORY=${{github.event.inputs.use_repo}}" >> $GITHUB_ENV
echo "GITHUB_HEAD_REF=${{github.event.inputs.use_git_ref}}" >> $GITHUB_ENV
echo "skipjobs: ${{github.event.inputs.skipjobs}}"
echo "skiptests: ${{github.event.inputs.skiptests}}"
echo "test_args: ${{github.event.inputs.test_args}}"
echo "cluster_test_args: ${{github.event.inputs.cluster_test_args}}"
- uses: actions/checkout@v4
with:
repository: ${{ env.GITHUB_REPOSITORY }}
ref: ${{ env.GITHUB_HEAD_REF }}
- name: make
run: make MALLOC=libc REDIS_CFLAGS='-Werror'
- name: testprep
run: sudo apt-get install tcl8.6 tclx
- name: test
if: true && !contains(github.event.inputs.skiptests, 'redis')
run: ./runtest --accurate --verbose --dump-logs ${{github.event.inputs.test_args}}
- name: sentinel tests
if: true && !contains(github.event.inputs.skiptests, 'sentinel')
run: ./runtest-sentinel ${{github.event.inputs.cluster_test_args}}
- name: cluster tests
if: true && !contains(github.event.inputs.skiptests, 'cluster')
run: ./runtest-cluster ${{github.event.inputs.cluster_test_args}}
test-ubuntu-no-malloc-usable-size:
runs-on: ubuntu-latest
if: |
(github.event_name == 'workflow_dispatch' || (github.event_name != 'workflow_dispatch' && github.repository == 'redis/redis')) &&
!contains(github.event.inputs.skipjobs, 'malloc')
timeout-minutes: 360
steps:
- name: prep
if: github.event_name == 'workflow_dispatch'
run: |
echo "GITHUB_REPOSITORY=${{github.event.inputs.use_repo}}" >> $GITHUB_ENV
echo "GITHUB_HEAD_REF=${{github.event.inputs.use_git_ref}}" >> $GITHUB_ENV
echo "skipjobs: ${{github.event.inputs.skipjobs}}"
echo "skiptests: ${{github.event.inputs.skiptests}}"
echo "test_args: ${{github.event.inputs.test_args}}"
echo "cluster_test_args: ${{github.event.inputs.cluster_test_args}}"
- uses: actions/checkout@v4
with:
repository: ${{ env.GITHUB_REPOSITORY }}
ref: ${{ env.GITHUB_HEAD_REF }}
- name: make
run: make MALLOC=libc CFLAGS=-DNO_MALLOC_USABLE_SIZE REDIS_CFLAGS='-Werror'
- name: testprep
run: sudo apt-get install tcl8.6 tclx
- name: test
if: true && !contains(github.event.inputs.skiptests, 'redis')
run: ./runtest --accurate --verbose --dump-logs ${{github.event.inputs.test_args}}
- name: sentinel tests
if: true && !contains(github.event.inputs.skiptests, 'sentinel')
run: ./runtest-sentinel ${{github.event.inputs.cluster_test_args}}
- name: cluster tests
if: true && !contains(github.event.inputs.skiptests, 'cluster')
run: ./runtest-cluster ${{github.event.inputs.cluster_test_args}}
test-ubuntu-32bit:
runs-on: ubuntu-latest
if: |
(github.event_name == 'workflow_dispatch' || (github.event_name != 'workflow_dispatch' && github.repository == 'redis/redis')) &&
!contains(github.event.inputs.skipjobs, '32bit')
timeout-minutes: 360
steps:
- name: prep
if: github.event_name == 'workflow_dispatch'
run: |
echo "GITHUB_REPOSITORY=${{github.event.inputs.use_repo}}" >> $GITHUB_ENV
echo "GITHUB_HEAD_REF=${{github.event.inputs.use_git_ref}}" >> $GITHUB_ENV
echo "skipjobs: ${{github.event.inputs.skipjobs}}"
echo "skiptests: ${{github.event.inputs.skiptests}}"
echo "test_args: ${{github.event.inputs.test_args}}"
echo "cluster_test_args: ${{github.event.inputs.cluster_test_args}}"
- uses: actions/checkout@v4
with:
repository: ${{ env.GITHUB_REPOSITORY }}
ref: ${{ env.GITHUB_HEAD_REF }}
- name: make
run: |
sudo apt-get update && sudo apt-get install libc6-dev-i386 gcc-multilib
make 32bit REDIS_CFLAGS='-Werror -DREDIS_TEST'
make -C tests/modules 32bit # the script below doesn't have an argument, we must build manually ahead of time
- name: testprep
run: sudo apt-get install tcl8.6 tclx
- name: test
if: true && !contains(github.event.inputs.skiptests, 'redis')
run: ./runtest --accurate --verbose --dump-logs ${{github.event.inputs.test_args}}
- name: sentinel tests
if: true && !contains(github.event.inputs.skiptests, 'sentinel')
run: ./runtest-sentinel ${{github.event.inputs.cluster_test_args}}
- name: cluster tests
if: true && !contains(github.event.inputs.skiptests, 'cluster')
run: ./runtest-cluster ${{github.event.inputs.cluster_test_args}}
- name: unittest
if: true && !contains(github.event.inputs.skiptests, 'unittest')
run: ./src/redis-server test all --accurate
test-ubuntu-tls:
runs-on: ubuntu-latest
if: |
(github.event_name == 'workflow_dispatch' || (github.event_name != 'workflow_dispatch' && github.repository == 'redis/redis')) &&
!contains(github.event.inputs.skipjobs, 'tls')
timeout-minutes: 360
steps:
- name: prep
if: github.event_name == 'workflow_dispatch'
run: |
echo "GITHUB_REPOSITORY=${{github.event.inputs.use_repo}}" >> $GITHUB_ENV
echo "GITHUB_HEAD_REF=${{github.event.inputs.use_git_ref}}" >> $GITHUB_ENV
echo "skipjobs: ${{github.event.inputs.skipjobs}}"
echo "skiptests: ${{github.event.inputs.skiptests}}"
echo "test_args: ${{github.event.inputs.test_args}}"
echo "cluster_test_args: ${{github.event.inputs.cluster_test_args}}"
- uses: actions/checkout@v4
with:
repository: ${{ env.GITHUB_REPOSITORY }}
ref: ${{ env.GITHUB_HEAD_REF }}
- name: make
run: |
make BUILD_TLS=yes REDIS_CFLAGS='-Werror'
- name: testprep
run: |
sudo apt-get install tcl8.6 tclx tcl-tls
./utils/gen-test-certs.sh
- name: test
if: true && !contains(github.event.inputs.skiptests, 'redis')
run: |
./runtest --accurate --verbose --dump-logs --tls --dump-logs ${{github.event.inputs.test_args}}
- name: sentinel tests
if: true && !contains(github.event.inputs.skiptests, 'sentinel')
run: |
./runtest-sentinel --tls ${{github.event.inputs.cluster_test_args}}
- name: cluster tests
if: true && !contains(github.event.inputs.skiptests, 'cluster')
run: |
./runtest-cluster --tls ${{github.event.inputs.cluster_test_args}}
test-ubuntu-tls-no-tls:
runs-on: ubuntu-latest
if: |
(github.event_name == 'workflow_dispatch' || (github.event_name != 'workflow_dispatch' && github.repository == 'redis/redis')) &&
!contains(github.event.inputs.skipjobs, 'tls')
timeout-minutes: 360
steps:
- name: prep
if: github.event_name == 'workflow_dispatch'
run: |
echo "GITHUB_REPOSITORY=${{github.event.inputs.use_repo}}" >> $GITHUB_ENV
echo "GITHUB_HEAD_REF=${{github.event.inputs.use_git_ref}}" >> $GITHUB_ENV
echo "skipjobs: ${{github.event.inputs.skipjobs}}"
echo "skiptests: ${{github.event.inputs.skiptests}}"
echo "test_args: ${{github.event.inputs.test_args}}"
echo "cluster_test_args: ${{github.event.inputs.cluster_test_args}}"
- uses: actions/checkout@v4
with:
repository: ${{ env.GITHUB_REPOSITORY }}
ref: ${{ env.GITHUB_HEAD_REF }}
- name: make
run: |
make BUILD_TLS=yes REDIS_CFLAGS='-Werror'
- name: testprep
run: |
sudo apt-get install tcl8.6 tclx tcl-tls
./utils/gen-test-certs.sh
- name: test
if: true && !contains(github.event.inputs.skiptests, 'redis')
run: |
./runtest --accurate --verbose --dump-logs ${{github.event.inputs.test_args}}
- name: sentinel tests
if: true && !contains(github.event.inputs.skiptests, 'sentinel')
run: |
./runtest-sentinel ${{github.event.inputs.cluster_test_args}}
- name: cluster tests
if: true && !contains(github.event.inputs.skiptests, 'cluster')
run: |
./runtest-cluster ${{github.event.inputs.cluster_test_args}}
test-ubuntu-io-threads:
runs-on: ubuntu-latest
if: |
(github.event_name == 'workflow_dispatch' || (github.event_name != 'workflow_dispatch' && github.repository == 'redis/redis')) &&
!contains(github.event.inputs.skipjobs, 'iothreads')
timeout-minutes: 360
steps:
- name: prep
if: github.event_name == 'workflow_dispatch'
run: |
echo "GITHUB_REPOSITORY=${{github.event.inputs.use_repo}}" >> $GITHUB_ENV
echo "GITHUB_HEAD_REF=${{github.event.inputs.use_git_ref}}" >> $GITHUB_ENV
echo "skipjobs: ${{github.event.inputs.skipjobs}}"
echo "skiptests: ${{github.event.inputs.skiptests}}"
echo "test_args: ${{github.event.inputs.test_args}}"
echo "cluster_test_args: ${{github.event.inputs.cluster_test_args}}"
- uses: actions/checkout@v4
with:
repository: ${{ env.GITHUB_REPOSITORY }}
ref: ${{ env.GITHUB_HEAD_REF }}
- name: make
run: |
make REDIS_CFLAGS='-Werror'
- name: testprep
run: sudo apt-get install tcl8.6 tclx
- name: test
if: true && !contains(github.event.inputs.skiptests, 'redis')
run: ./runtest --config io-threads 4 --accurate --verbose --tags "network iothreads psync2 repl failover" --dump-logs ${{github.event.inputs.test_args}}
- name: cluster tests
if: true && !contains(github.event.inputs.skiptests, 'cluster')
run: ./runtest-cluster --config io-threads 4 ${{github.event.inputs.cluster_test_args}}
test-ubuntu-reclaim-cache:
runs-on: ubuntu-latest
if: |
(github.event_name == 'workflow_dispatch' || (github.event_name != 'workflow_dispatch' && github.repository == 'redis/redis')) &&
!contains(github.event.inputs.skipjobs, 'specific')
timeout-minutes: 360
steps:
- name: prep
if: github.event_name == 'workflow_dispatch'
run: |
echo "GITHUB_REPOSITORY=${{github.event.inputs.use_repo}}" >> $GITHUB_ENV
echo "GITHUB_HEAD_REF=${{github.event.inputs.use_git_ref}}" >> $GITHUB_ENV
echo "skipjobs: ${{github.event.inputs.skipjobs}}"
echo "skiptests: ${{github.event.inputs.skiptests}}"
echo "test_args: ${{github.event.inputs.test_args}}"
echo "cluster_test_args: ${{github.event.inputs.cluster_test_args}}"
- uses: actions/checkout@v4
with:
repository: ${{ env.GITHUB_REPOSITORY }}
ref: ${{ env.GITHUB_HEAD_REF }}
- name: make
run: |
make REDIS_CFLAGS='-Werror'
- name: testprep
run: |
sudo apt-get install vmtouch
mkdir /tmp/master
mkdir /tmp/slave
- name: warm up
run: |
./src/redis-server --daemonize yes --logfile /dev/null
./src/redis-benchmark -n 1 > /dev/null
./src/redis-cli save | grep OK > /dev/null
vmtouch -v ./dump.rdb > /dev/null
- name: test
run: |
echo "test SAVE doesn't increase cache"
CACHE0=$(grep -w file /sys/fs/cgroup/memory.stat | awk '{print $2}')
echo "$CACHE0"
./src/redis-server --daemonize yes --logfile /dev/null --dir /tmp/master --port 8080 --repl-diskless-sync no --pidfile /tmp/master/redis.pid --rdbcompression no --enable-debug-command yes
./src/redis-cli -p 8080 debug populate 10000 k 102400
./src/redis-server --daemonize yes --logfile /dev/null --dir /tmp/slave --port 8081 --repl-diskless-load disabled --rdbcompression no
./src/redis-cli -p 8080 save > /dev/null
VMOUT=$(vmtouch -v /tmp/master/dump.rdb)
echo $VMOUT
grep -q " 0%" <<< $VMOUT
CACHE=$(grep -w file /sys/fs/cgroup/memory.stat | awk '{print $2}')
echo "$CACHE"
if [ "$(( $CACHE-$CACHE0 ))" -gt "8000000" ]; then exit 1; fi
echo "test replication doesn't increase cache"
./src/redis-cli -p 8081 REPLICAOF 127.0.0.1 8080 > /dev/null
while [ $(./src/redis-cli -p 8081 info replication | grep "master_link_status:down") ]; do sleep 1; done;
sleep 1 # wait for the completion of cache reclaim bio
VMOUT=$(vmtouch -v /tmp/master/dump.rdb)
echo $VMOUT
grep -q " 0%" <<< $VMOUT
VMOUT=$(vmtouch -v /tmp/slave/dump.rdb)
echo $VMOUT
grep -q " 0%" <<< $VMOUT
CACHE=$(grep -w file /sys/fs/cgroup/memory.stat | awk '{print $2}')
echo "$CACHE"
if [ "$(( $CACHE-$CACHE0 ))" -gt "8000000" ]; then exit 1; fi
echo "test reboot doesn't increase cache"
PID=$(cat /tmp/master/redis.pid)
kill -15 $PID
while [ -x /proc/${PID} ]; do sleep 1; done
./src/redis-server --daemonize yes --logfile /dev/null --dir /tmp/master --port 8080
while [ $(./src/redis-cli -p 8080 info persistence | grep "loading:1") ]; do sleep 1; done;
sleep 1 # wait for the completion of cache reclaim bio
VMOUT=$(vmtouch -v /tmp/master/dump.rdb)
echo $VMOUT
grep -q " 0%" <<< $VMOUT
CACHE=$(grep -w file /sys/fs/cgroup/memory.stat | awk '{print $2}')
echo "$CACHE"
if [ "$(( $CACHE-$CACHE0 ))" -gt "8000000" ]; then exit 1; fi
test-valgrind-test:
runs-on: ubuntu-latest
if: |
(github.event_name == 'workflow_dispatch' || (github.event_name != 'workflow_dispatch' && github.repository == 'redis/redis')) &&
!contains(github.event.inputs.skipjobs, 'valgrind') && !contains(github.event.inputs.skiptests, 'redis')
timeout-minutes: 360
steps:
- name: prep
if: github.event_name == 'workflow_dispatch'
run: |
echo "GITHUB_REPOSITORY=${{github.event.inputs.use_repo}}" >> $GITHUB_ENV
echo "GITHUB_HEAD_REF=${{github.event.inputs.use_git_ref}}" >> $GITHUB_ENV
echo "skipjobs: ${{github.event.inputs.skipjobs}}"
echo "skiptests: ${{github.event.inputs.skiptests}}"
echo "test_args: ${{github.event.inputs.test_args}}"
echo "cluster_test_args: ${{github.event.inputs.cluster_test_args}}"
- uses: actions/checkout@v4
with:
repository: ${{ env.GITHUB_REPOSITORY }}
ref: ${{ env.GITHUB_HEAD_REF }}
- name: make
run: make valgrind REDIS_CFLAGS='-Werror -DREDIS_TEST'
- name: testprep
run: |
sudo apt-get update
sudo apt-get install tcl8.6 tclx valgrind -y
- name: test
if: true && !contains(github.event.inputs.skiptests, 'redis')
# Note that valgrind's overhead doesn't pair well with io-threads so we
# explicitly disable tests tagged with 'iothreads' - these are tests that
# always run with io-threads enabled.
run: ./runtest --valgrind --no-latency --verbose --clients 1 --timeout 2400 --tags -iothreads --dump-logs ${{github.event.inputs.test_args}}
test-valgrind-misc:
runs-on: ubuntu-latest
if: |
(github.event_name == 'workflow_dispatch' || (github.event_name != 'workflow_dispatch' && github.repository == 'redis/redis')) &&
!contains(github.event.inputs.skipjobs, 'valgrind') && !(contains(github.event.inputs.skiptests, 'modules') && contains(github.event.inputs.skiptests, 'unittest'))
timeout-minutes: 360
steps:
- name: prep
if: github.event_name == 'workflow_dispatch'
run: |
echo "GITHUB_REPOSITORY=${{github.event.inputs.use_repo}}" >> $GITHUB_ENV
echo "GITHUB_HEAD_REF=${{github.event.inputs.use_git_ref}}" >> $GITHUB_ENV
echo "skipjobs: ${{github.event.inputs.skipjobs}}"
echo "skiptests: ${{github.event.inputs.skiptests}}"
echo "test_args: ${{github.event.inputs.test_args}}"
echo "cluster_test_args: ${{github.event.inputs.cluster_test_args}}"
- uses: actions/checkout@v4
with:
repository: ${{ env.GITHUB_REPOSITORY }}
ref: ${{ env.GITHUB_HEAD_REF }}
- name: make
run: make valgrind REDIS_CFLAGS='-Werror -DREDIS_TEST'
- name: testprep
run: |
sudo apt-get update
sudo apt-get install tcl8.6 tclx valgrind -y
- name: unittest
if: true && !contains(github.event.inputs.skiptests, 'unittest')
run: |
valgrind --track-origins=yes --suppressions=./src/valgrind.sup --show-reachable=no --show-possibly-lost=no --leak-check=full --log-file=err.txt ./src/redis-server test all --valgrind
if grep -q 0x err.txt; then cat err.txt; exit 1; fi
test-valgrind-no-malloc-usable-size-test:
runs-on: ubuntu-latest
if: |
(github.event_name == 'workflow_dispatch' || (github.event_name != 'workflow_dispatch' && github.repository == 'redis/redis')) &&
!contains(github.event.inputs.skipjobs, 'valgrind') && !contains(github.event.inputs.skiptests, 'redis')
timeout-minutes: 360
steps:
- name: prep
if: github.event_name == 'workflow_dispatch'
run: |
echo "GITHUB_REPOSITORY=${{github.event.inputs.use_repo}}" >> $GITHUB_ENV
echo "GITHUB_HEAD_REF=${{github.event.inputs.use_git_ref}}" >> $GITHUB_ENV
echo "skipjobs: ${{github.event.inputs.skipjobs}}"
echo "skiptests: ${{github.event.inputs.skiptests}}"
echo "test_args: ${{github.event.inputs.test_args}}"
echo "cluster_test_args: ${{github.event.inputs.cluster_test_args}}"
- uses: actions/checkout@v4
with:
repository: ${{ env.GITHUB_REPOSITORY }}
ref: ${{ env.GITHUB_HEAD_REF }}
- name: make
run: make valgrind CFLAGS="-DNO_MALLOC_USABLE_SIZE -DREDIS_TEST" REDIS_CFLAGS='-Werror'
- name: testprep
run: |
sudo apt-get update
sudo apt-get install tcl8.6 tclx valgrind -y
- name: test
if: true && !contains(github.event.inputs.skiptests, 'redis')
run: ./runtest --valgrind --tags -iothreads --no-latency --verbose --clients 1 --timeout 2400 --dump-logs ${{github.event.inputs.test_args}}
test-valgrind-no-malloc-usable-size-misc:
runs-on: ubuntu-latest
if: |
(github.event_name == 'workflow_dispatch' || (github.event_name != 'workflow_dispatch' && github.repository == 'redis/redis')) &&
!contains(github.event.inputs.skipjobs, 'valgrind') && !(contains(github.event.inputs.skiptests, 'modules') && contains(github.event.inputs.skiptests, 'unittest'))
timeout-minutes: 360
steps:
- name: prep
if: github.event_name == 'workflow_dispatch'
run: |
echo "GITHUB_REPOSITORY=${{github.event.inputs.use_repo}}" >> $GITHUB_ENV
echo "GITHUB_HEAD_REF=${{github.event.inputs.use_git_ref}}" >> $GITHUB_ENV
echo "skipjobs: ${{github.event.inputs.skipjobs}}"
echo "skiptests: ${{github.event.inputs.skiptests}}"
echo "test_args: ${{github.event.inputs.test_args}}"
echo "cluster_test_args: ${{github.event.inputs.cluster_test_args}}"
- uses: actions/checkout@v4
with:
repository: ${{ env.GITHUB_REPOSITORY }}
ref: ${{ env.GITHUB_HEAD_REF }}
- name: make
run: make valgrind CFLAGS="-DNO_MALLOC_USABLE_SIZE -DREDIS_TEST" REDIS_CFLAGS='-Werror'
- name: testprep
run: |
sudo apt-get update
sudo apt-get install tcl8.6 tclx valgrind -y
- name: unittest
if: true && !contains(github.event.inputs.skiptests, 'unittest')
run: |
valgrind --track-origins=yes --suppressions=./src/valgrind.sup --show-reachable=no --show-possibly-lost=no --leak-check=full --log-file=err.txt ./src/redis-server test all --valgrind
if grep -q 0x err.txt; then cat err.txt; exit 1; fi
test-sanitizer-address:
runs-on: ubuntu-latest
if: |
(github.event_name == 'workflow_dispatch' || (github.event_name != 'workflow_dispatch' && github.repository == 'redis/redis')) &&
!contains(github.event.inputs.skipjobs, 'sanitizer')
timeout-minutes: 360
strategy:
matrix:
compiler: [ gcc, clang ]
env:
CC: ${{ matrix.compiler }}
steps:
- name: prep
if: github.event_name == 'workflow_dispatch'
run: |
echo "GITHUB_REPOSITORY=${{github.event.inputs.use_repo}}" >> $GITHUB_ENV
echo "GITHUB_HEAD_REF=${{github.event.inputs.use_git_ref}}" >> $GITHUB_ENV
echo "skipjobs: ${{github.event.inputs.skipjobs}}"
echo "skiptests: ${{github.event.inputs.skiptests}}"
echo "test_args: ${{github.event.inputs.test_args}}"
echo "cluster_test_args: ${{github.event.inputs.cluster_test_args}}"
- uses: actions/checkout@v4
with:
repository: ${{ env.GITHUB_REPOSITORY }}
ref: ${{ env.GITHUB_HEAD_REF }}
- name: make
run: make SANITIZER=address REDIS_CFLAGS='-DREDIS_TEST -Werror -DDEBUG_ASSERTIONS'
- name: testprep
run: |
sudo apt-get update
sudo apt-get install tcl8.6 tclx -y
- name: test
if: true && !contains(github.event.inputs.skiptests, 'redis')
run: ./runtest --accurate --verbose --dump-logs ${{github.event.inputs.test_args}}
- name: sentinel tests
if: true && !contains(github.event.inputs.skiptests, 'sentinel')
run: ./runtest-sentinel ${{github.event.inputs.cluster_test_args}}
- name: cluster tests
if: true && !contains(github.event.inputs.skiptests, 'cluster')
run: ./runtest-cluster ${{github.event.inputs.cluster_test_args}}
- name: unittest
if: true && !contains(github.event.inputs.skiptests, 'unittest')
run: ./src/redis-server test all
test-sanitizer-memory:
runs-on: ubuntu-latest
if: |
(github.event_name == 'workflow_dispatch' || (github.event_name != 'workflow_dispatch' && github.repository == 'redis/redis')) &&
!contains(github.event.inputs.skipjobs, 'sanitizer')
timeout-minutes: 360
env:
CC: clang # MSan works only with clang
steps:
- name: prep
if: github.event_name == 'workflow_dispatch'
run: |
echo "GITHUB_REPOSITORY=${{github.event.inputs.use_repo}}" >> $GITHUB_ENV
echo "GITHUB_HEAD_REF=${{github.event.inputs.use_git_ref}}" >> $GITHUB_ENV
echo "skipjobs: ${{github.event.inputs.skipjobs}}"
echo "skiptests: ${{github.event.inputs.skiptests}}"
echo "test_args: ${{github.event.inputs.test_args}}"
echo "cluster_test_args: ${{github.event.inputs.cluster_test_args}}"
- uses: actions/checkout@v4
with:
repository: ${{ env.GITHUB_REPOSITORY }}
ref: ${{ env.GITHUB_HEAD_REF }}
- name: make
run: make SANITIZER=memory REDIS_CFLAGS='-DREDIS_TEST -Werror -DDEBUG_ASSERTIONS'
- name: testprep
run: |
sudo apt-get update
sudo apt-get install tcl8.6 tclx -y
- name: test
if: true && !contains(github.event.inputs.skiptests, 'redis')
run: ./runtest --accurate --verbose --dump-logs ${{github.event.inputs.test_args}}
- name: sentinel tests
if: true && !contains(github.event.inputs.skiptests, 'sentinel')
run: ./runtest-sentinel ${{github.event.inputs.cluster_test_args}}
- name: cluster tests
if: true && !contains(github.event.inputs.skiptests, 'cluster')
run: ./runtest-cluster ${{github.event.inputs.cluster_test_args}}
- name: unittest
if: true && !contains(github.event.inputs.skiptests, 'unittest')
run: ./src/redis-server test all
test-sanitizer-undefined:
runs-on: ubuntu-latest
if: |
(github.event_name == 'workflow_dispatch' || (github.event_name != 'workflow_dispatch' && github.repository == 'redis/redis')) &&
!contains(github.event.inputs.skipjobs, 'sanitizer')
timeout-minutes: 360
strategy:
matrix:
compiler: [ gcc, clang ]
env:
CC: ${{ matrix.compiler }}
steps:
- name: prep
if: github.event_name == 'workflow_dispatch'
run: |
echo "GITHUB_REPOSITORY=${{github.event.inputs.use_repo}}" >> $GITHUB_ENV
echo "GITHUB_HEAD_REF=${{github.event.inputs.use_git_ref}}" >> $GITHUB_ENV
echo "skipjobs: ${{github.event.inputs.skipjobs}}"
echo "skiptests: ${{github.event.inputs.skiptests}}"
echo "test_args: ${{github.event.inputs.test_args}}"
echo "cluster_test_args: ${{github.event.inputs.cluster_test_args}}"
- uses: actions/checkout@v4
with:
repository: ${{ env.GITHUB_REPOSITORY }}
ref: ${{ env.GITHUB_HEAD_REF }}
- name: make
run: make SANITIZER=undefined REDIS_CFLAGS='-DREDIS_TEST -Werror' SKIP_VEC_SETS=yes LUA_DEBUG=yes # we (ab)use this flow to also check Lua C API violations
- name: testprep
run: |
sudo apt-get update
sudo apt-get install tcl8.6 tclx -y
- name: test
if: true && !contains(github.event.inputs.skiptests, 'redis')
run: ./runtest --accurate --verbose --dump-logs ${{github.event.inputs.test_args}}
- name: sentinel tests
if: true && !contains(github.event.inputs.skiptests, 'sentinel')
run: ./runtest-sentinel ${{github.event.inputs.cluster_test_args}}
- name: cluster tests
if: true && !contains(github.event.inputs.skiptests, 'cluster')
run: ./runtest-cluster ${{github.event.inputs.cluster_test_args}}
- name: unittest
if: true && !contains(github.event.inputs.skiptests, 'unittest')
run: ./src/redis-server test all --accurate
test-sanitizer-thread:
runs-on: ubuntu-latest
if: |
(github.event_name == 'workflow_dispatch' || (github.event_name != 'workflow_dispatch' && github.repository == 'redis/redis')) &&
!contains(github.event.inputs.skipjobs, 'sanitizer')
timeout-minutes: 360
strategy:
fail-fast: false # let gcc and clang both run until the end even if one of them fails
matrix:
compiler: [ gcc, clang ]
env:
CC: ${{ matrix.compiler }}
steps:
- name: prep
if: github.event_name == 'workflow_dispatch'
run: |
echo "GITHUB_REPOSITORY=${{github.event.inputs.use_repo}}" >> $GITHUB_ENV
echo "GITHUB_HEAD_REF=${{github.event.inputs.use_git_ref}}" >> $GITHUB_ENV
echo "skipjobs: ${{github.event.inputs.skipjobs}}"
echo "skiptests: ${{github.event.inputs.skiptests}}"
echo "test_args: ${{github.event.inputs.test_args}}"
echo "cluster_test_args: ${{github.event.inputs.cluster_test_args}}"
- uses: actions/checkout@v4
with:
repository: ${{ env.GITHUB_REPOSITORY }}
ref: ${{ env.GITHUB_HEAD_REF }}
- name: make
# TODO Investigate why jemalloc with clang TSan crash on start;
# with gcc TSan, jemalloc works modulo sentinel tests hanging.
run: make SANITIZER=thread USE_JEMALLOC=no REDIS_CFLAGS='-DREDIS_TEST -Werror -DDEBUG_ASSERTIONS'
- name: testprep
run: |
sudo apt-get update
sudo apt-get install tcl8.6 tclx -y
- name: test
if: true && !contains(github.event.inputs.skiptests, 'redis')
run: ./runtest --tsan --clients 1 --config io-threads 4 --accurate --verbose --dump-logs ${{github.event.inputs.test_args}}
- name: sentinel tests
if: true && !contains(github.event.inputs.skiptests, 'sentinel')
run: ./runtest-sentinel --tsan ${{github.event.inputs.cluster_test_args}}
- name: cluster tests
if: true && !contains(github.event.inputs.skiptests, 'cluster')
run: ./runtest-cluster --config io-threads 2 ${{github.event.inputs.cluster_test_args}}
test-centos-jemalloc:
runs-on: ubuntu-latest
if: |
(github.event_name == 'workflow_dispatch' || (github.event_name != 'workflow_dispatch' && github.repository == 'redis/redis')) &&
!contains(github.event.inputs.skipjobs, 'centos')
container: quay.io/centos/centos:stream9
timeout-minutes: 360
steps:
- name: prep
if: github.event_name == 'workflow_dispatch'
run: |
echo "GITHUB_REPOSITORY=${{github.event.inputs.use_repo}}" >> $GITHUB_ENV
echo "GITHUB_HEAD_REF=${{github.event.inputs.use_git_ref}}" >> $GITHUB_ENV
echo "skipjobs: ${{github.event.inputs.skipjobs}}"
echo "skiptests: ${{github.event.inputs.skiptests}}"
echo "test_args: ${{github.event.inputs.test_args}}"
echo "cluster_test_args: ${{github.event.inputs.cluster_test_args}}"
- uses: actions/checkout@v4
with:
repository: ${{ env.GITHUB_REPOSITORY }}
ref: ${{ env.GITHUB_HEAD_REF }}
- name: make
run: |
dnf -y install which gcc make
make REDIS_CFLAGS='-Werror'
- name: testprep
run: |
dnf -y install epel-release
dnf -y install tcl tcltls procps-ng /usr/bin/kill
- name: test
if: true && !contains(github.event.inputs.skiptests, 'redis')
run: ./runtest --accurate --verbose --dump-logs ${{github.event.inputs.test_args}}
- name: sentinel tests
if: true && !contains(github.event.inputs.skiptests, 'sentinel')
run: ./runtest-sentinel ${{github.event.inputs.cluster_test_args}}
- name: cluster tests
if: true && !contains(github.event.inputs.skiptests, 'cluster')
run: ./runtest-cluster ${{github.event.inputs.cluster_test_args}}
test-centos-tls-module:
runs-on: ubuntu-latest
if: |
(github.event_name == 'workflow_dispatch' || (github.event_name != 'workflow_dispatch' && github.repository == 'redis/redis')) &&
!contains(github.event.inputs.skipjobs, 'tls')
container: quay.io/centos/centos:stream9
timeout-minutes: 360
steps:
- name: prep
if: github.event_name == 'workflow_dispatch'
run: |
echo "GITHUB_REPOSITORY=${{github.event.inputs.use_repo}}" >> $GITHUB_ENV
echo "GITHUB_HEAD_REF=${{github.event.inputs.use_git_ref}}" >> $GITHUB_ENV
echo "skipjobs: ${{github.event.inputs.skipjobs}}"
echo "skiptests: ${{github.event.inputs.skiptests}}"
echo "test_args: ${{github.event.inputs.test_args}}"
echo "cluster_test_args: ${{github.event.inputs.cluster_test_args}}"
- uses: actions/checkout@v4
with:
repository: ${{ env.GITHUB_REPOSITORY }}
ref: ${{ env.GITHUB_HEAD_REF }}
- name: make
run: |
dnf -y install which gcc make openssl-devel openssl
make BUILD_TLS=module REDIS_CFLAGS='-Werror'
- name: testprep
run: |
dnf -y install epel-release
dnf -y install tcl tcltls procps-ng /usr/bin/kill
./utils/gen-test-certs.sh
- name: test
if: true && !contains(github.event.inputs.skiptests, 'redis')
run: |
./runtest --accurate --verbose --dump-logs --tls-module --dump-logs ${{github.event.inputs.test_args}}
- name: sentinel tests
if: true && !contains(github.event.inputs.skiptests, 'sentinel')
run: |
./runtest-sentinel ${{github.event.inputs.cluster_test_args}}
- name: cluster tests
if: true && !contains(github.event.inputs.skiptests, 'cluster')
run: |
./runtest-cluster --tls-module ${{github.event.inputs.cluster_test_args}}
test-centos-tls-module-no-tls:
runs-on: ubuntu-latest
if: |
(github.event_name == 'workflow_dispatch' || (github.event_name != 'workflow_dispatch' && github.repository == 'redis/redis')) &&
!contains(github.event.inputs.skipjobs, 'tls')
container: quay.io/centos/centos:stream9
timeout-minutes: 360
steps:
- name: prep
if: github.event_name == 'workflow_dispatch'
run: |
echo "GITHUB_REPOSITORY=${{github.event.inputs.use_repo}}" >> $GITHUB_ENV
echo "GITHUB_HEAD_REF=${{github.event.inputs.use_git_ref}}" >> $GITHUB_ENV
echo "skipjobs: ${{github.event.inputs.skipjobs}}"
echo "skiptests: ${{github.event.inputs.skiptests}}"
echo "test_args: ${{github.event.inputs.test_args}}"
echo "cluster_test_args: ${{github.event.inputs.cluster_test_args}}"
- uses: actions/checkout@v4
with:
repository: ${{ env.GITHUB_REPOSITORY }}
ref: ${{ env.GITHUB_HEAD_REF }}
- name: make
run: |
dnf -y install which gcc make openssl-devel openssl
make BUILD_TLS=module REDIS_CFLAGS='-Werror'
- name: testprep
run: |
dnf -y install epel-release
dnf -y install tcl tcltls procps-ng /usr/bin/kill
./utils/gen-test-certs.sh
- name: test
if: true && !contains(github.event.inputs.skiptests, 'redis')
run: |
./runtest --accurate --verbose --dump-logs ${{github.event.inputs.test_args}}
- name: sentinel tests
if: true && !contains(github.event.inputs.skiptests, 'sentinel')
run: |
./runtest-sentinel ${{github.event.inputs.cluster_test_args}}
- name: cluster tests
if: true && !contains(github.event.inputs.skiptests, 'cluster')
run: |
./runtest-cluster ${{github.event.inputs.cluster_test_args}}
test-macos-latest:
runs-on: macos-latest
if: |
(github.event_name == 'workflow_dispatch' || (github.event_name != 'workflow_dispatch' && github.repository == 'redis/redis')) &&
!contains(github.event.inputs.skipjobs, 'macos') && !(contains(github.event.inputs.skiptests, 'redis') && contains(github.event.inputs.skiptests, 'modules'))
timeout-minutes: 360
steps:
- name: prep
if: github.event_name == 'workflow_dispatch'
run: |
echo "GITHUB_REPOSITORY=${{github.event.inputs.use_repo}}" >> $GITHUB_ENV
echo "GITHUB_HEAD_REF=${{github.event.inputs.use_git_ref}}" >> $GITHUB_ENV
echo "skipjobs: ${{github.event.inputs.skipjobs}}"
echo "skiptests: ${{github.event.inputs.skiptests}}"
echo "test_args: ${{github.event.inputs.test_args}}"
echo "cluster_test_args: ${{github.event.inputs.cluster_test_args}}"
- uses: actions/checkout@v4
with:
repository: ${{ env.GITHUB_REPOSITORY }}
ref: ${{ env.GITHUB_HEAD_REF }}
- name: make
run: make REDIS_CFLAGS='-Werror'
- name: test
if: true && !contains(github.event.inputs.skiptests, 'redis')
run: ./runtest --accurate --verbose --clients 1 --no-latency --dump-logs ${{github.event.inputs.test_args}}
test-macos-latest-sentinel:
runs-on: macos-latest
if: |
(github.event_name == 'workflow_dispatch' || (github.event_name != 'workflow_dispatch' && github.repository == 'redis/redis')) &&
!contains(github.event.inputs.skipjobs, 'macos') && !contains(github.event.inputs.skiptests, 'sentinel')
timeout-minutes: 360
steps:
- name: prep
if: github.event_name == 'workflow_dispatch'
run: |
echo "GITHUB_REPOSITORY=${{github.event.inputs.use_repo}}" >> $GITHUB_ENV
echo "GITHUB_HEAD_REF=${{github.event.inputs.use_git_ref}}" >> $GITHUB_ENV
echo "skipjobs: ${{github.event.inputs.skipjobs}}"
echo "skiptests: ${{github.event.inputs.skiptests}}"
echo "test_args: ${{github.event.inputs.test_args}}"
echo "cluster_test_args: ${{github.event.inputs.cluster_test_args}}"
- uses: actions/checkout@v4
with:
repository: ${{ env.GITHUB_REPOSITORY }}
ref: ${{ env.GITHUB_HEAD_REF }}
- name: make
run: make REDIS_CFLAGS='-Werror'
- name: sentinel tests
if: true && !contains(github.event.inputs.skiptests, 'sentinel')
run: ./runtest-sentinel ${{github.event.inputs.cluster_test_args}}
test-macos-latest-cluster:
runs-on: macos-latest
if: |
(github.event_name == 'workflow_dispatch' || (github.event_name != 'workflow_dispatch' && github.repository == 'redis/redis')) &&
!contains(github.event.inputs.skipjobs, 'macos') && !contains(github.event.inputs.skiptests, 'cluster')
timeout-minutes: 360
steps:
- name: prep
if: github.event_name == 'workflow_dispatch'
run: |
echo "GITHUB_REPOSITORY=${{github.event.inputs.use_repo}}" >> $GITHUB_ENV
echo "GITHUB_HEAD_REF=${{github.event.inputs.use_git_ref}}" >> $GITHUB_ENV
echo "skipjobs: ${{github.event.inputs.skipjobs}}"
echo "skiptests: ${{github.event.inputs.skiptests}}"
echo "test_args: ${{github.event.inputs.test_args}}"
echo "cluster_test_args: ${{github.event.inputs.cluster_test_args}}"
- uses: actions/checkout@v4
with:
repository: ${{ env.GITHUB_REPOSITORY }}
ref: ${{ env.GITHUB_HEAD_REF }}
- name: make
run: make REDIS_CFLAGS='-Werror'
- name: cluster tests
if: true && !contains(github.event.inputs.skiptests, 'cluster')
run: ./runtest-cluster ${{github.event.inputs.cluster_test_args}}
build-macos:
strategy:
matrix:
os: [macos-14, macos-26]
runs-on: ${{ matrix.os }}
if: |
(github.event_name == 'workflow_dispatch' || (github.event_name != 'workflow_dispatch' && github.repository == 'redis/redis')) &&
!contains(github.event.inputs.skipjobs, 'macos')
timeout-minutes: 360
steps:
- uses: maxim-lobanov/setup-xcode@v1
with:
xcode-version: latest
- name: prep
if: github.event_name == 'workflow_dispatch'
run: |
echo "GITHUB_REPOSITORY=${{github.event.inputs.use_repo}}" >> $GITHUB_ENV
echo "GITHUB_HEAD_REF=${{github.event.inputs.use_git_ref}}" >> $GITHUB_ENV
echo "skipjobs: ${{github.event.inputs.skipjobs}}"
echo "skiptests: ${{github.event.inputs.skiptests}}"
echo "test_args: ${{github.event.inputs.test_args}}"
echo "cluster_test_args: ${{github.event.inputs.cluster_test_args}}"
- uses: actions/checkout@v4
with:
repository: ${{ env.GITHUB_REPOSITORY }}
ref: ${{ env.GITHUB_HEAD_REF }}
- name: make
run: make REDIS_CFLAGS='-Werror -DREDIS_TEST'
test-freebsd:
runs-on: ubuntu-latest
if: |
(github.event_name == 'workflow_dispatch' || (github.event_name != 'workflow_dispatch' && github.repository == 'redis/redis')) &&
!contains(github.event.inputs.skipjobs, 'freebsd')
timeout-minutes: 360
steps:
- name: prep
if: github.event_name == 'workflow_dispatch'
run: |
echo "GITHUB_REPOSITORY=${{github.event.inputs.use_repo}}" >> $GITHUB_ENV
echo "GITHUB_HEAD_REF=${{github.event.inputs.use_git_ref}}" >> $GITHUB_ENV
- uses: actions/checkout@v4
with:
repository: ${{ env.GITHUB_REPOSITORY }}
ref: ${{ env.GITHUB_HEAD_REF }}
- name: test
uses: cross-platform-actions/action@v0.30.0
with:
operating_system: freebsd
environment_variables: MAKE
version: 13.2
shell: bash
run: |
sudo pkg install -y bash gmake lang/tcl86 lang/tclX gcc
gmake
./runtest --single unit/keyspace --single unit/auth --single unit/networking --single unit/protocol
test-alpine-jemalloc:
runs-on: ubuntu-latest
if: |
(github.event_name == 'workflow_dispatch' || (github.event_name != 'workflow_dispatch' && github.repository == 'redis/redis')) &&
!contains(github.event.inputs.skipjobs, 'alpine')
container: alpine:latest
steps:
- name: prep
if: github.event_name == 'workflow_dispatch'
run: |
echo "GITHUB_REPOSITORY=${{github.event.inputs.use_repo}}" >> $GITHUB_ENV
echo "GITHUB_HEAD_REF=${{github.event.inputs.use_git_ref}}" >> $GITHUB_ENV
echo "skipjobs: ${{github.event.inputs.skipjobs}}"
echo "skiptests: ${{github.event.inputs.skiptests}}"
echo "test_args: ${{github.event.inputs.test_args}}"
echo "cluster_test_args: ${{github.event.inputs.cluster_test_args}}"
- uses: actions/checkout@v4
with:
repository: ${{ env.GITHUB_REPOSITORY }}
ref: ${{ env.GITHUB_HEAD_REF }}
- name: make
run: |
apk add build-base
make REDIS_CFLAGS='-Werror'
- name: testprep
run: apk add tcl procps tclx
- name: test
if: true && !contains(github.event.inputs.skiptests, 'redis')
run: ./runtest --accurate --verbose --dump-logs ${{github.event.inputs.test_args}}
- name: sentinel tests
if: true && !contains(github.event.inputs.skiptests, 'sentinel')
run: ./runtest-sentinel ${{github.event.inputs.cluster_test_args}}
- name: cluster tests
if: true && !contains(github.event.inputs.skiptests, 'cluster')
run: ./runtest-cluster ${{github.event.inputs.cluster_test_args}}
test-alpine-libc-malloc:
runs-on: ubuntu-latest
if: |
(github.event_name == 'workflow_dispatch' || (github.event_name != 'workflow_dispatch' && github.repository == 'redis/redis')) &&
!contains(github.event.inputs.skipjobs, 'alpine')
container: alpine:latest
steps:
- name: prep
if: github.event_name == 'workflow_dispatch'
run: |
echo "GITHUB_REPOSITORY=${{github.event.inputs.use_repo}}" >> $GITHUB_ENV
echo "GITHUB_HEAD_REF=${{github.event.inputs.use_git_ref}}" >> $GITHUB_ENV
echo "skipjobs: ${{github.event.inputs.skipjobs}}"
echo "skiptests: ${{github.event.inputs.skiptests}}"
echo "test_args: ${{github.event.inputs.test_args}}"
echo "cluster_test_args: ${{github.event.inputs.cluster_test_args}}"
- uses: actions/checkout@v4
with:
repository: ${{ env.GITHUB_REPOSITORY }}
ref: ${{ env.GITHUB_HEAD_REF }}
- name: make
run: |
apk add build-base
make REDIS_CFLAGS='-Werror' USE_JEMALLOC=no CFLAGS=-DUSE_MALLOC_USABLE_SIZE
- name: testprep
run: apk add tcl procps tclx
- name: test
if: true && !contains(github.event.inputs.skiptests, 'redis')
run: ./runtest --accurate --verbose --dump-logs ${{github.event.inputs.test_args}}
- name: sentinel tests
if: true && !contains(github.event.inputs.skiptests, 'sentinel')
run: ./runtest-sentinel ${{github.event.inputs.cluster_test_args}}
- name: cluster tests
if: true && !contains(github.event.inputs.skiptests, 'cluster')
run: ./runtest-cluster ${{github.event.inputs.cluster_test_args}}
reply-schemas-validator:
runs-on: ubuntu-latest
timeout-minutes: 360
if: |
(github.event_name == 'workflow_dispatch' || (github.event_name != 'workflow_dispatch' && github.repository == 'redis/redis')) &&
!contains(github.event.inputs.skipjobs, 'reply-schema')
steps:
- name: prep
if: github.event_name == 'workflow_dispatch'
run: |
echo "GITHUB_REPOSITORY=${{github.event.inputs.use_repo}}" >> $GITHUB_ENV
echo "GITHUB_HEAD_REF=${{github.event.inputs.use_git_ref}}" >> $GITHUB_ENV
echo "skipjobs: ${{github.event.inputs.skipjobs}}"
echo "skiptests: ${{github.event.inputs.skiptests}}"
echo "test_args: ${{github.event.inputs.test_args}}"
echo "cluster_test_args: ${{github.event.inputs.cluster_test_args}}"
- uses: actions/checkout@v4
with:
repository: ${{ env.GITHUB_REPOSITORY }}
ref: ${{ env.GITHUB_HEAD_REF }}
- name: make
run: make REDIS_CFLAGS='-Werror -DLOG_REQ_RES'
- name: testprep
run: sudo apt-get install tcl8.6 tclx
- name: test
if: true && !contains(github.event.inputs.skiptests, 'redis')
run: ./runtest --log-req-res --no-latency --dont-clean --force-resp3 --tags -slow --verbose --dump-logs ${{github.event.inputs.test_args}}
- name: sentinel tests
if: true && !contains(github.event.inputs.skiptests, 'sentinel')
run: ./runtest-sentinel --log-req-res --dont-clean --force-resp3 ${{github.event.inputs.cluster_test_args}}
- name: cluster tests
if: true && !contains(github.event.inputs.skiptests, 'cluster')
run: ./runtest-cluster --log-req-res --dont-clean --force-resp3 ${{github.event.inputs.cluster_test_args}}
- name: Install Python dependencies
uses: py-actions/py-dependency-install@30aa0023464ed4b5b116bd9fbdab87acf01a484e # v4.1.0
with:
path: "./utils/req-res-validator/requirements.txt"
- name: validator
run: ./utils/req-res-log-validator.py --verbose --fail-missing-reply-schemas ${{ (!contains(github.event.inputs.skiptests, 'redis') && !contains(github.event.inputs.skiptests, 'module') && !contains(github.event.inputs.sentinel, 'redis') && !contains(github.event.inputs.skiptests, 'cluster')) && github.event.inputs.test_args == '' && github.event.inputs.cluster_test_args == '' && '--fail-commands-not-all-hit' || '' }}
test-old-chain-jemalloc:
runs-on: ubuntu-latest
if: |
(github.event_name == 'workflow_dispatch' || (github.event_name != 'workflow_dispatch' && github.repository == 'redis/redis')) &&
!contains(github.event.inputs.skipjobs, 'oldTC')
container: ubuntu:20.04
timeout-minutes: 360
steps:
- name: prep
if: github.event_name == 'workflow_dispatch'
run: |
echo "GITHUB_REPOSITORY=${{github.event.inputs.use_repo}}" >> $GITHUB_ENV
echo "GITHUB_HEAD_REF=${{github.event.inputs.use_git_ref}}" >> $GITHUB_ENV
echo "skipjobs: ${{github.event.inputs.skipjobs}}"
echo "skiptests: ${{github.event.inputs.skiptests}}"
echo "test_args: ${{github.event.inputs.test_args}}"
echo "cluster_test_args: ${{github.event.inputs.cluster_test_args}}"
- uses: actions/checkout@v4
with:
repository: ${{ env.GITHUB_REPOSITORY }}
ref: ${{ env.GITHUB_HEAD_REF }}
- name: make
run: |
apt-get update
apt-get install -y gnupg2
echo "deb http://archive.ubuntu.com/ubuntu/ xenial main" >> /etc/apt/sources.list
echo "deb http://archive.ubuntu.com/ubuntu/ xenial universe" >> /etc/apt/sources.list
apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 40976EAF437D05B5
apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 3B4FE6ACC0B21F32
apt-get update
apt-get install -y make gcc-4.8
update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8 100
make CC=gcc REDIS_CFLAGS='-Werror'
- name: testprep
run: apt-get install -y tcl tcltls tclx
- name: test
if: true && !contains(github.event.inputs.skiptests, 'redis')
run: ./runtest --accurate --verbose --dump-logs ${{github.event.inputs.test_args}}
- name: sentinel tests
if: true && !contains(github.event.inputs.skiptests, 'sentinel')
run: ./runtest-sentinel ${{github.event.inputs.cluster_test_args}}
- name: cluster tests
if: true && !contains(github.event.inputs.skiptests, 'cluster')
run: ./runtest-cluster ${{github.event.inputs.cluster_test_args}}
test-old-chain-tls-module:
runs-on: ubuntu-latest
if: |
(github.event_name == 'workflow_dispatch' || (github.event_name != 'workflow_dispatch' && github.repository == 'redis/redis')) &&
!contains(github.event.inputs.skipjobs, 'tls') && !contains(github.event.inputs.skipjobs, 'oldTC')
container: ubuntu:20.04
timeout-minutes: 360
steps:
- name: prep
if: github.event_name == 'workflow_dispatch'
run: |
echo "GITHUB_REPOSITORY=${{github.event.inputs.use_repo}}" >> $GITHUB_ENV
echo "GITHUB_HEAD_REF=${{github.event.inputs.use_git_ref}}" >> $GITHUB_ENV
echo "skipjobs: ${{github.event.inputs.skipjobs}}"
echo "skiptests: ${{github.event.inputs.skiptests}}"
echo "test_args: ${{github.event.inputs.test_args}}"
echo "cluster_test_args: ${{github.event.inputs.cluster_test_args}}"
- uses: actions/checkout@v4
with:
repository: ${{ env.GITHUB_REPOSITORY }}
ref: ${{ env.GITHUB_HEAD_REF }}
- name: make
run: |
apt-get update
apt-get install -y gnupg2
echo "deb http://archive.ubuntu.com/ubuntu/ xenial main" >> /etc/apt/sources.list
echo "deb http://archive.ubuntu.com/ubuntu/ xenial universe" >> /etc/apt/sources.list
apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 40976EAF437D05B5
apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 3B4FE6ACC0B21F32
apt-get update
apt-get install -y make gcc-4.8 openssl libssl-dev
update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8 100
make CC=gcc BUILD_TLS=module REDIS_CFLAGS='-Werror'
- name: testprep
run: |
apt-get install -y tcl tcltls tclx
./utils/gen-test-certs.sh
- name: test
if: true && !contains(github.event.inputs.skiptests, 'redis')
run: |
./runtest --accurate --verbose --dump-logs --tls-module --dump-logs ${{github.event.inputs.test_args}}
- name: sentinel tests
if: true && !contains(github.event.inputs.skiptests, 'sentinel')
run: |
./runtest-sentinel ${{github.event.inputs.cluster_test_args}}
- name: cluster tests
if: true && !contains(github.event.inputs.skiptests, 'cluster')
run: |
./runtest-cluster --tls-module ${{github.event.inputs.cluster_test_args}}
test-old-chain-tls-module-no-tls:
runs-on: ubuntu-latest
if: |
(github.event_name == 'workflow_dispatch' || (github.event_name != 'workflow_dispatch' && github.repository == 'redis/redis')) &&
!contains(github.event.inputs.skipjobs, 'tls') && !contains(github.event.inputs.skipjobs, 'oldTC')
container: ubuntu:20.04
timeout-minutes: 360
steps:
- name: prep
if: github.event_name == 'workflow_dispatch'
run: |
echo "GITHUB_REPOSITORY=${{github.event.inputs.use_repo}}" >> $GITHUB_ENV
echo "GITHUB_HEAD_REF=${{github.event.inputs.use_git_ref}}" >> $GITHUB_ENV
echo "skipjobs: ${{github.event.inputs.skipjobs}}"
echo "skiptests: ${{github.event.inputs.skiptests}}"
echo "test_args: ${{github.event.inputs.test_args}}"
echo "cluster_test_args: ${{github.event.inputs.cluster_test_args}}"
- uses: actions/checkout@v4
with:
repository: ${{ env.GITHUB_REPOSITORY }}
ref: ${{ env.GITHUB_HEAD_REF }}
- name: make
run: |
apt-get update
apt-get install -y gnupg2
echo "deb http://archive.ubuntu.com/ubuntu/ xenial main" >> /etc/apt/sources.list
echo "deb http://archive.ubuntu.com/ubuntu/ xenial universe" >> /etc/apt/sources.list
apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 40976EAF437D05B5
apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 3B4FE6ACC0B21F32
apt-get update
apt-get install -y make gcc-4.8 openssl libssl-dev
update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8 100
make BUILD_TLS=module CC=gcc REDIS_CFLAGS='-Werror'
- name: testprep
run: |
apt-get install -y tcl tcltls tclx
./utils/gen-test-certs.sh
- name: test
if: true && !contains(github.event.inputs.skiptests, 'redis')
run: |
./runtest --accurate --verbose --dump-logs ${{github.event.inputs.test_args}}
- name: sentinel tests
if: true && !contains(github.event.inputs.skiptests, 'sentinel')
run: |
./runtest-sentinel ${{github.event.inputs.cluster_test_args}}
- name: cluster tests
if: true && !contains(github.event.inputs.skiptests, 'cluster')
run: |
./runtest-cluster ${{github.event.inputs.cluster_test_args}}
test-sanitizer-force-defrag:
runs-on: ubuntu-latest
if: |
(github.event_name == 'workflow_dispatch' || (github.event_name != 'workflow_dispatch' && github.repository == 'redis/redis')) &&
!contains(github.event.inputs.skipjobs, 'defrag')
timeout-minutes: 360
steps:
- name: prep
if: github.event_name == 'workflow_dispatch'
run: |
echo "GITHUB_REPOSITORY=${{github.event.inputs.use_repo}}" >> $GITHUB_ENV
echo "GITHUB_HEAD_REF=${{github.event.inputs.use_git_ref}}" >> $GITHUB_ENV
echo "skipjobs: ${{github.event.inputs.skipjobs}}"
echo "skiptests: ${{github.event.inputs.skiptests}}"
echo "test_args: ${{github.event.inputs.test_args}}"
echo "cluster_test_args: ${{github.event.inputs.cluster_test_args}}"
- uses: actions/checkout@v4
with:
repository: ${{ env.GITHUB_REPOSITORY }}
ref: ${{ env.GITHUB_HEAD_REF }}
- name: make
run: make SANITIZER=address DEBUG_DEFRAG=force REDIS_CFLAGS='-Werror'
- name: testprep
run: sudo apt-get install tcl8.6 tclx
- name: test
if: true && !contains(github.event.inputs.skiptests, 'redis')
run: ./runtest --debug-defrag --verbose --clients 1 ${{github.event.inputs.test_args}}
test-vectorset:
runs-on: ubuntu-latest
if: |
(github.event_name == 'workflow_dispatch' || (github.event_name != 'workflow_dispatch' && github.repository == 'redis/redis')) &&
!contains(github.event.inputs.skipjobs, 'vectorset')
timeout-minutes: 360
steps:
- name: prep
if: github.event_name == 'workflow_dispatch'
run: |
echo "GITHUB_REPOSITORY=${{github.event.inputs.use_repo}}" >> $GITHUB_ENV
echo "GITHUB_HEAD_REF=${{github.event.inputs.use_git_ref}}" >> $GITHUB_ENV
echo "skipjobs: ${{github.event.inputs.skipjobs}}"
echo "skiptests: ${{github.event.inputs.skiptests}}"
echo "test_args: ${{github.event.inputs.test_args}}"
echo "cluster_test_args: ${{github.event.inputs.cluster_test_args}}"
- uses: actions/checkout@v4
with:
repository: ${{ env.GITHUB_REPOSITORY }}
ref: ${{ env.GITHUB_HEAD_REF }}
- name: make
run: make REDIS_CFLAGS='-Werror -DREDIS_TEST'
- name: testprep
run: |
sudo apt-get install tcl8.6 tclx
sudo pip install redis
- name: test
if: true && !contains(github.event.inputs.skiptests, 'redis')
run: ./runtest --accurate --verbose --dump-logs --single vectorset/vectorset ${{github.event.inputs.test_args}}
================================================
FILE: .github/workflows/external.yml
================================================
name: External Server Tests
on:
pull_request:
push:
schedule:
- cron: '0 0 * * *'
jobs:
test-external-standalone:
runs-on: ubuntu-latest
if: github.event_name != 'schedule' || github.repository == 'redis/redis'
timeout-minutes: 360
steps:
- uses: actions/checkout@v4
- name: Build
run: make REDIS_CFLAGS=-Werror
- name: Start redis-server
run: |
./src/redis-server --daemonize yes --save "" --logfile external-redis.log \
--enable-protected-configs yes --enable-debug-command yes --enable-module-command yes
- name: Run external test
run: |
./runtest \
--host 127.0.0.1 --port 6379 \
--verbose \
--tags -slow
- name: Archive redis log
if: ${{ failure() }}
uses: actions/upload-artifact@v4
with:
name: test-external-redis-log
path: external-redis.log
test-external-cluster:
runs-on: ubuntu-latest
if: github.event_name != 'schedule' || github.repository == 'redis/redis'
timeout-minutes: 360
steps:
- uses: actions/checkout@v4
- name: Build
run: make REDIS_CFLAGS=-Werror
- name: Start redis-server
run: |
./src/redis-server --cluster-enabled yes --daemonize yes --save "" --logfile external-redis-cluster.log \
--enable-protected-configs yes --enable-debug-command yes --enable-module-command yes
- name: Create a single node cluster
run: ./src/redis-cli cluster addslots $(for slot in {0..16383}; do echo $slot; done); sleep 5
- name: Run external test
run: |
./runtest \
--host 127.0.0.1 --port 6379 \
--verbose \
--cluster-mode \
--tags -slow
- name: Archive redis log
if: ${{ failure() }}
uses: actions/upload-artifact@v4
with:
name: test-external-cluster-log
path: external-redis-cluster.log
test-external-nodebug:
runs-on: ubuntu-latest
if: github.event_name != 'schedule' || github.repository == 'redis/redis'
timeout-minutes: 360
steps:
- uses: actions/checkout@v4
- name: Build
run: make REDIS_CFLAGS=-Werror
- name: Start redis-server
run: |
./src/redis-server --daemonize yes --save "" --logfile external-redis-nodebug.log
- name: Run external test
run: |
./runtest \
--host 127.0.0.1 --port 6379 \
--verbose \
--tags "-slow -needs:debug"
- name: Archive redis log
if: ${{ failure() }}
uses: actions/upload-artifact@v4
with:
name: test-external-redis-nodebug-log
path: external-redis-nodebug.log
================================================
FILE: .github/workflows/post-release-automation.yml
================================================
name: Post-Release Automation
on:
release:
types: [published]
jobs:
extract-release-info:
if: github.repository == 'redis/redis'
runs-on: ubuntu-latest
outputs:
tag_name: ${{ steps.release-info.outputs.tag_name }}
release_type: ${{ steps.release-info.outputs.release_type }}
steps:
- name: Checkout repository
uses: actions/checkout@v5
- name: Extract and validate release information
id: release-info
env:
TAG_NAME: ${{ github.event.release.tag_name }}
GH_TOKEN: ${{ github.token }}
run: |
echo "tag_name=${TAG_NAME}" >> $GITHUB_OUTPUT
echo "Release tag: ${TAG_NAME}"
LATEST_TAG=$(gh release view --json tagName --jq '.tagName')
echo "Latest release tag(from gh release): ${LATEST_TAG}"
if [[ "${TAG_NAME}" == "${LATEST_TAG}" ]]; then
echo "release_type=latest" >> $GITHUB_OUTPUT
echo "Detected latest release: ${TAG_NAME}"
else
echo "release_type=non-latest" >> $GITHUB_OUTPUT
echo "Detected non-latest release: ${TAG_NAME} (latest is ${LATEST_TAG})"
fi
create-tarball:
needs: extract-release-info
runs-on: ubuntu-latest
env:
TAG_NAME: ${{ needs.extract-release-info.outputs.tag_name }}
outputs:
sha256: ${{ steps.checksum.outputs.sha256 }}
size_mb: ${{ steps.size.outputs.size_mb }}
size_warning: ${{ steps.size.outputs.size_warning }}
steps:
- name: Checkout repository
uses: actions/checkout@v5
with:
ref: ${{ env.TAG_NAME }}
fetch-depth: 0
- name: Create tarball
run: ./utils/releasetools/01_create_tarball.sh "$TAG_NAME"
- name: Verify tarball size
id: size
run: |
TARBALL="/tmp/redis-${TAG_NAME}.tar.gz"
SIZE_MB=$(du -m "$TARBALL" | cut -f1)
echo "Tarball size: ${SIZE_MB} MB"
echo "size_mb=${SIZE_MB}" >> $GITHUB_OUTPUT
if [ "$SIZE_MB" -lt 3 ] || [ "$SIZE_MB" -gt 5 ]; then
echo "::warning::Tarball size ${SIZE_MB} MB is outside expected range (3-5 MB)"
echo "size_warning=true" >> $GITHUB_OUTPUT
else
echo "size_warning=false" >> $GITHUB_OUTPUT
fi
- name: Calculate SHA256 checksum
id: checksum
run: |
TARBALL="/tmp/redis-${TAG_NAME}.tar.gz"
SHA256=$(shasum -a 256 "$TARBALL" | cut -d' ' -f1)
echo "SHA256: $SHA256"
echo "sha256=$SHA256" >> $GITHUB_OUTPUT
- name: Upload tarball as artifact
uses: actions/upload-artifact@v6
with:
name: redis-${{ env.TAG_NAME }}-tarball
path: /tmp/redis-${{ env.TAG_NAME }}.tar.gz
compression-level: 0
# approval-gate:
# needs: [extract-release-info, create-tarball]
# if: needs.extract-release-info.outputs.release_type == 'latest'
# runs-on: ubuntu-latest
# steps:
# - name: Approval gate
# run: |
# echo "Latest release detected. Manual approval required for production deployment."
# # TODO: Implement approval workflow
# # This could use GitHub Environments with required reviewers
# # or a manual approval step
# upload-tarball:
# needs: [extract-release-info, create-tarball, approval-gate]
# if: always() && !cancelled() && needs.create-tarball.result == 'success' && (needs.approval-gate.result == 'success' || needs.approval-gate.result == 'skipped')
# runs-on: ubuntu-latest
# steps:
# - name: Upload tarball
# run: |
# echo "TODO: Implement tarball upload"
# # This will require:
# # - SSH credentials/keys for upload to download.redis.io
# # - Adaptation of utils/releasetools/02_upload_tarball.sh for CI environment
# test-release-tarball:
# needs: upload-tarball
# runs-on: ubuntu-latest
# steps:
# - name: Test release tarball
# run: |
# echo "TODO: Implement release testing using utils/releasetools/03_test_release.sh"
# # This will:
# # - Download the uploaded tarball
# # - Extract and build Redis
# update-release-hashes:
# needs: test-release-tarball
# runs-on: ubuntu-latest
# steps:
# - name: Update release hashes
# run: |
# echo "TODO: Implement hash update using utils/releasetools/04_release_hash.sh"
# # This will require:
# # - Access to redis-hashes repository
# # - Git credentials for committing and pushing
summary-and-notify:
needs: [extract-release-info, create-tarball] # update-release-hashes
if: always() && github.repository == 'redis/redis'
runs-on: ubuntu-latest
env:
TAG_NAME: ${{ needs.extract-release-info.outputs.tag_name }}
RELEASE_TYPE: ${{ needs.extract-release-info.outputs.release_type }}
SHA256: ${{ needs.create-tarball.outputs.sha256 }}
SIZE_MB: ${{ needs.create-tarball.outputs.size_mb }}
SIZE_WARNING: ${{ needs.create-tarball.outputs.size_warning }}
steps:
- name: Summary
run: |
{
echo "## Post-Release Automation Summary"
echo ""
echo "- **Release Tag:** ${TAG_NAME}"
echo "- **Release Type:** ${RELEASE_TYPE}"
echo "- **Tarball SHA256:** ${SHA256}"
echo "- **Tarball Size:** ${SIZE_MB} MB"
if [ "${SIZE_WARNING}" == "true" ]; then
echo ""
echo "> [!WARNING]"
echo "> Tarball size is outside expected range, check the logs for details."
fi
} >> $GITHUB_STEP_SUMMARY
# - name: Send Slack notification
# run: |
# echo "TODO: Implement Slack notification"
# # This will require:
# # - Slack webhook URL or bot token (stored in secrets)
# # - Determine appropriate channel (e.g., #releases, #redis-releases)
# # - Craft message with release information and workflow status
================================================
FILE: .github/workflows/redis_docs_sync.yaml
================================================
name: redis_docs_sync
on:
release:
types: [published]
jobs:
redis_docs_sync:
if: github.repository == 'redis/redis'
runs-on: ubuntu-latest
steps:
- name: Generate a token
id: generate-token
uses: actions/create-github-app-token@v1
with:
app-id: ${{ secrets.DOCS_APP_ID }}
private-key: ${{ secrets.DOCS_APP_PRIVATE_KEY }}
- name: Invoke workflow on redis/docs
env:
GH_TOKEN: ${{ steps.generate-token.outputs.token }}
RELEASE_NAME: ${{ github.event.release.tag_name }}
run: |
LATEST_RELEASE=$(
curl -Ls \
-H "Accept: application/vnd.github+json" \
-H "Authorization: Bearer ${GH_TOKEN}" \
-H "X-GitHub-Api-Version: 2022-11-28" \
https://api.github.com/repos/redis/redis/releases/latest \
| jq -r '.tag_name'
)
if [[ "${LATEST_RELEASE}" == "${RELEASE_NAME}" ]]; then
gh workflow run -R redis/docs redis_docs_sync.yaml -f release="${RELEASE_NAME}"
fi
================================================
FILE: .github/workflows/reply-schemas-linter.yml
================================================
name: Reply-schemas linter
on:
push:
paths:
- 'src/commands/*.json'
pull_request:
paths:
- 'src/commands/*.json'
jobs:
reply-schemas-linter:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Setup nodejs
uses: actions/setup-node@v4
- name: Install packages
run: npm install ajv
- name: linter
run: node ./utils/reply_schema_linter.js
================================================
FILE: .github/workflows/spell-check.yml
================================================
# A CI action that using codespell to check spell.
# .github/.codespellrc is a config file.
# .github/wordlist.txt is a list of words that will ignore word checks.
# More details please check the following link:
# https://github.com/codespell-project/codespell
name: Spellcheck
on:
push:
pull_request:
jobs:
build:
name: Spellcheck
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: pip cache
uses: actions/cache@v4
with:
path: ~/.cache/pip
key: ${{ runner.os }}-pip-${{ hashFiles('**/requirements.txt') }}
restore-keys: ${{ runner.os }}-pip-
- name: Install prerequisites
run: sudo pip install -r ./.codespell/requirements.txt
- name: Spell check
run: codespell --config=./.codespell/.codespellrc
================================================
FILE: .gitignore
================================================
.*.swp
*.o
*.xo
*.so
*.d
*.log
dump.rdb
redis-benchmark
redis-check-aof
redis-check-rdb
redis-check-dump
redis-cli
redis-sentinel
redis-server
doc-tools
release
misc/*
src/release.h
appendonly.aof*
appendonlydir
SHORT_TERM_TODO
release.h
src/transfer.sh
src/configs
redis.ds
src/redis.conf
src/nodes.conf
deps/lua/src/lua
deps/lua/src/luac
deps/lua/src/liblua.a
deps/hdr_histogram/libhdrhistogram.a
deps/fpconv/libfpconv.a
tests/tls/*
.make-*
.prerequisites
*.dSYM
Makefile.dep
.vscode/*
.idea/*
.ccls
.ccls-cache/*
compile_commands.json
redis.code-workspace
================================================
FILE: 00-RELEASENOTES
================================================
Hello! This file is just a placeholder, since this is the "unstable" branch
of Redis, the place where all the development happens.
There is no release notes for this branch, it gets forked into another branch
every time there is a partial feature freeze in order to eventually create
a new stable release.
Usually "unstable" is stable enough for you to use it in development environments
however you should never use it in production environments. It is possible
to download the latest stable release here:
https://download.redis.io/redis-stable.tar.gz
More information is available at https://redis.io
Happy hacking!
================================================
FILE: BUGS
================================================
Please check https://github.com/redis/redis/issues
================================================
FILE: CODE_OF_CONDUCT.md
================================================
Contributor Covenant Code of Conduct
Our Pledge
We as members, contributors, and leaders pledge to make participation in our
community a harassment-free experience for everyone, regardless of age, body
size, visible or invisible disability, ethnicity, sex characteristics, gender
identity and expression, level of experience, education, socio-economic status,
nationality, personal appearance, race, religion, or sexual identity
and orientation.
We pledge to act and interact in ways that contribute to an open, welcoming,
diverse, inclusive, and healthy community.
Our Standards
Examples of behavior that contributes to a positive environment for our
community include:
* Demonstrating empathy and kindness toward other people
* Being respectful of differing opinions, viewpoints, and experiences
* Giving and gracefully accepting constructive feedback
* Accepting responsibility and apologizing to those affected by our mistakes,
and learning from the experience
* Focusing on what is best not just for us as individuals, but for the
overall community
Examples of unacceptable behavior include:
* The use of sexualized language or imagery, and sexual attention or
advances of any kind
* Trolling, insulting or derogatory comments, and personal or political attacks
* Public or private harassment
* Publishing others' private information, such as a physical or email
address, without their explicit permission
* Other conduct which could reasonably be considered inappropriate in a
professional setting
Enforcement Responsibilities
Community leaders are responsible for clarifying and enforcing our standards of
acceptable behavior and will take appropriate and fair corrective action in
response to any behavior that they deem inappropriate, threatening, offensive,
or harmful.
Community leaders have the right and responsibility to remove, edit, or reject
comments, commits, code, wiki edits, issues, and other contributions that are
not aligned to this Code of Conduct, and will communicate reasons for moderation
decisions when appropriate.
Scope
This Code of Conduct applies within all community spaces, and also applies when
an individual is officially representing the community in public spaces.
Examples of representing our community include using an official e-mail address,
posting via an official social media account, or acting as an appointed
representative at an online or offline event.
Enforcement
Instances of abusive, harassing, or otherwise unacceptable behavior may be
reported to the community leaders responsible for enforcement at
this email address: redis@redis.io.
All complaints will be reviewed and investigated promptly and fairly.
All community leaders are obligated to respect the privacy and security of the
reporter of any incident.
Enforcement Guidelines
Community leaders will follow these Community Impact Guidelines in determining
the consequences for any action they deem in violation of this Code of Conduct:
1. Correction
Community Impact: Use of inappropriate language or other behavior deemed
unprofessional or unwelcome in the community.
Consequence: A private, written warning from community leaders, providing
clarity around the nature of the violation and an explanation of why the
behavior was inappropriate. A public apology may be requested.
2. Warning
Community Impact: A violation through a single incident or series
of actions.
Consequence: A warning with consequences for continued behavior. No
interaction with the people involved, including unsolicited interaction with
those enforcing the Code of Conduct, for a specified period of time. This
includes avoiding interactions in community spaces as well as external channels
like social media. Violating these terms may lead to a temporary or
permanent ban.
3. Temporary Ban
Community Impact: A serious violation of community standards, including
sustained inappropriate behavior.
Consequence: A temporary ban from any sort of interaction or public
communication with the community for a specified period of time. No public or
private interaction with the people involved, including unsolicited interaction
with those enforcing the Code of Conduct, is allowed during this period.
Violating these terms may lead to a permanent ban.
4. Permanent Ban
Community Impact: Demonstrating a pattern of violation of community
standards, including sustained inappropriate behavior, harassment of an
individual, or aggression toward or disparagement of classes of individuals.
Consequence: A permanent ban from any sort of public interaction within
the community.
Attribution
This Code of Conduct is adapted from the Contributor Covenant,
version 2.0, available at
https://www.contributor-covenant.org/version/2/0/code_of_conduct.html.
Community Impact Guidelines were inspired by Mozilla's code of conduct
enforcement ladder.
For answers to common questions about this code of conduct, see the FAQ at
https://www.contributor-covenant.org/faq. Translations are available at
https://www.contributor-covenant.org/translations.
================================================
FILE: CONTRIBUTING.md
================================================
By contributing code to the Redis project in any form you agree to the Redis Software Grant and
Contributor License Agreement attached below. Only contributions made under the Redis Software Grant
and Contributor License Agreement may be accepted by Redis, and any contribution is subject to the
terms of the Redis tri-license under RSALv2/SSPLv1/AGPLv3 as described in the LICENSE.txt file included in
the Redis source distribution.
# REDIS SOFTWARE GRANT AND CONTRIBUTOR LICENSE AGREEMENT
To specify the intellectual property license granted in any Contribution, Redis Ltd., ("**Redis**")
requires a Software Grant and Contributor License Agreement ("**Agreement**"). This Agreement is for
your protection as a contributor as well as the protection of Redis and its users; it does not
change your rights to use your own Contribution for any other purpose permitted by this Agreement.
By making any Contribution, You accept and agree to the following terms and conditions for the
Contribution. Except for the license granted in this Agreement to Redis and the recipients of the
software distributed by Redis, You reserve all right, title, and interest in and to Your
Contribution.
1. **Definitions**
1.1. "**You**" (or "**Your**") means the copyright owner or legal entity authorized by the
copyright owner that is entering into this Agreement with Redis. For legal entities, the entity
making a Contribution and all other entities that Control, are Controlled by, or are under
common Control with that entity are considered to be a single contributor. For the purposes of
this definition, "**Control**" means (i) the power, direct or indirect, to cause the direction
or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty
percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity.
1.2. "**Contribution**" means the code, documentation, or any original work of authorship,
including any modifications or additions to an existing work described above.
2. "**Work**" means any software project stewarded by Redis.
3. **Grant of Copyright License**. Subject to the terms and conditions of this Agreement, You grant
to Redis and to the recipients of the software distributed by Redis a perpetual, worldwide,
non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare
derivative works of, publicly display, publicly perform, sublicense, and distribute Your
Contribution and such derivative works.
4. **Grant of Patent License**. Subject to the terms and conditions of this Agreement, You grant to
Redis and to the recipients of the software distributed by Redis a perpetual, worldwide,
non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent
license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable by You that are necessarily
infringed by Your Contribution alone or by a combination of Your Contribution with the Work to
which such Contribution was submitted. If any entity institutes patent litigation against You or
any other entity (including a cross-claim or counterclaim in a lawsuit) alleging that your
Contribution, or the Work to which you have contributed, constitutes a direct or contributory
patent infringement, then any patent licenses granted to the claimant entity under this Agreement
for that Contribution or Work terminate as of the date such litigation is filed.
5. **Representations and Warranties**. You represent and warrant that: (i) You are legally entitled
to grant the above licenses; and (ii) if You are an entity, each employee or agent designated by
You is authorized to submit the Contribution on behalf of You; and (iii) your Contribution is
Your original work, and that it will not infringe on any third party's intellectual property
right(s).
6. **Disclaimer**. You are not expected to provide support for Your Contribution, except to the
extent You desire to provide support. You may provide support for free, for a fee, or not at all.
Unless required by applicable law or agreed to in writing, You provide Your Contribution on an
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied,
including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT,
MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE.
7. **Enforceability**. Nothing in this Agreement will be construed as creating any joint venture,
employment relationship, or partnership between You and Redis. If any provision of this Agreement
is held to be unenforceable, the remaining provisions of this Agreement will not be affected.
This represents the entire agreement between You and Redis relating to the Contribution.
# IMPORTANT: HOW TO USE REDIS GITHUB ISSUES
GitHub issues SHOULD ONLY BE USED to report bugs and for DETAILED feature
requests. Everything else should be asked on Discord:
https://discord.com/invite/redis
PLEASE DO NOT POST GENERAL QUESTIONS that are not about bugs or suspected
bugs in the GitHub issues system. We'll be delighted to help you and provide
all the support on Discord.
There is also an active community of Redis users at Stack Overflow:
https://stackoverflow.com/questions/tagged/redis
Issues and pull requests for documentation belong on the redis-doc repo:
https://github.com/redis/redis-doc
If you are reporting a security bug or vulnerability, see SECURITY.md.
# How to provide a patch for a new feature
1. If it is a major feature or a semantical change, please don't start coding
straight away: if your feature is not a conceptual fit you'll lose a lot of
time writing the code without any reason. Start by posting in the mailing list
and creating an issue at Github with the description of, exactly, what you want
to accomplish and why. Use cases are important for features to be accepted.
Here you can see if there is consensus about your idea.
2. If in step 1 you get an acknowledgment from the project leaders, use the
following procedure to submit a patch:
a. Fork Redis on GitHub ( https://docs.github.com/en/github/getting-started-with-github/fork-a-repo )
b. Create a topic branch (git checkout -b my_branch)
c. Push to your branch (git push origin my_branch)
d. Initiate a pull request on GitHub ( https://docs.github.com/en/github/collaborating-with-issues-and-pull-requests/creating-a-pull-request )
e. Done :)
3. Keep in mind that we are very overloaded, so issues and PRs sometimes wait
for a *very* long time. However this is not a lack of interest, as the project
gets more and more users, we find ourselves in a constant need to prioritize
certain issues/PRs over others. If you think your issue/PR is very important
try to popularize it, have other users commenting and sharing their point of
view, and so forth. This helps.
4. For minor fixes - open a pull request on GitHub.
Additional information on the RSALv2/SSPLv1/AGPLv3 tri-license is also found in the LICENSE.txt file.
================================================
FILE: INSTALL
================================================
See README
================================================
FILE: LICENSE.txt
================================================
Starting with Redis 8, Redis Open Source is moving to a tri-licensing model with all new Redis code
contributions governed by the updated Redis Software Grant and Contributor License Agreement.
After this release, contributions are subject to your choice of: (a) the Redis Source Available License v2
(RSALv2);or (b) the Server Side Public License v1 (SSPLv1); or (c) the GNU Affero General Public License v3 (AGPLv3).
Redis Open Source 7.2 and prior releases remain subject to the BSDv3 clause license as referenced
in the REDISCONTRIBUTIONS.txt file.
The licensing structure for Redis 8.0 and subsequent releases is as follows:
1. Redis Source Available License 2.0 (RSALv2) Agreement
========================================================
Last Update: December 30, 2023
Acceptance
----------
This Agreement sets forth the terms and conditions on which the Licensor
makes available the Software. By installing, downloading, accessing,
Using, or distributing any of the Software, You agree to all of the
terms and conditions of this Agreement.
If You are receiving the Software on behalf of Your Company, You
represent and warrant that You have the authority to agree to this
Agreement on behalf of such entity.
The Licensor reserves the right to update this Agreement from time to
time.
The terms below have the meanings set forth below for purposes of this
Agreement:
Definitions
-----------
Agreement: this Redis Source Available License 2.0 Agreement.
Control: ownership, directly or indirectly, of substantially all the
assets of an entity, or the power to direct its management and policies
by vote, contract, or otherwise.
License: the License as described in the License paragraph below.
Licensor: the entity offering these terms, which includes Redis Ltd. on
behalf of itself and its subsidiaries and affiliates worldwide.
Modify, Modified, or Modification: copy from or adapt all or part of the
work in a fashion requiring copyright permission other than making an
exact copy. The resulting work is called a Modified version of the
earlier work.
Redis: the Redis software as described in redis.com redis.io.
Software: certain Software components designed to work with Redis and
provided to You under this Agreement.
Trademark: the trademarks, service marks, and any other similar rights.
Use: anything You do with the Software requiring one of Your Licenses.
You: the recipient of the Software, the individual or entity on whose
behalf You are agreeing to this Agreement.
Your Company: any legal entity, sole proprietorship, or other kind of
organization that You work for, plus all organizations that have control
over, are under the control of, or are under common control with that
organization.
Your Licenses: means all the Licenses granted to You for the Software
under this Agreement.
License
-------
The Licensor grants You a non-exclusive, royalty-free, worldwide,
non-sublicensable, non-transferable license to use, copy, distribute,
make available, and prepare derivative works of the Software, in each
case subject to the limitations and conditions below.
Limitations
-----------
You may not make the functionality of the Software or a Modified version
available to third parties as a service or distribute the Software or a
Modified version in a manner that makes the functionality of the
Software available to third parties.
Making the functionality of the Software or Modified version available
to third parties includes, without limitation, enabling third parties to
interact with the functionality of the Software or Modified version in
distributed form or remotely through a computer network, offering a
product or service, the value of which entirely or primarily derives
from the value of the Software or Modified version, or offering a
product or service that accomplishes for users the primary purpose of
the Software or Modified version.
You may not alter, remove, or obscure any licensing, copyright, or other
notices of the Licensor in the Software. Any use of the Licensor's
Trademarks is subject to applicable law.
Patents
-------
The Licensor grants You a License, under any patent claims the Licensor
can License, or becomes able to License, to make, have made, use, sell,
offer for sale, import and have imported the Software, in each case
subject to the limitations and conditions in this License. This License
does not cover any patent claims that You cause to be infringed by
Modifications or additions to the Software. If You or Your Company make
any written claim that the Software infringes or contributes to
infringement of any patent, your patent License for the Software granted
under this Agreement ends immediately. If Your Company makes such a
claim, your patent License ends immediately for work on behalf of Your
Company.
Notices
-------
You must ensure that anyone who gets a copy of any part of the Software
from You also gets a copy of the terms and conditions in this Agreement.
If You modify the Software, You must include in any Modified copies of
the Software prominent notices stating that You have Modified the
Software.
No Other Rights
---------------
The terms and conditions of this Agreement do not imply any Licenses
other than those expressly granted in this Agreement.
Termination
-----------
If You Use the Software in violation of this Agreement, such Use is not
Licensed, and Your Licenses will automatically terminate. If the
Licensor provides You with a notice of your violation, and You cease all
violations of this License no later than 30 days after You receive that
notice, Your Licenses will be reinstated retroactively. However, if You
violate this Agreement after such reinstatement, any additional
violation of this Agreement will cause your Licenses to terminate
automatically and permanently.
No Liability
------------
As far as the law allows, the Software comes as is, without any
warranty or condition, and the Licensor will not be liable to You for
any damages arising out of this Agreement or the Use or nature of the
Software, under any kind of legal claim.
Governing Law and Jurisdiction
------------------------------
If You are located in Asia, Pacific, Americas, or other jurisdictions
not listed below, the Agreement will be construed and enforced in all
respects in accordance with the laws of the State of California, U.S.A.,
without reference to its choice of law rules. The courts located in the
County of Santa Clara, California, have exclusive jurisdiction for all
purposes relating to this Agreement.
If You are located in Israel, the Agreement will be construed and
enforced in all respects in accordance with the laws of the State of
Israel without reference to its choice of law rules. The courts located
in the Central District of the State of Israel have exclusive
jurisdiction for all purposes relating to this Agreement.
If You are located in Europe, United Kingdom, Middle East or Africa, the
Agreement will be construed and enforced in all respects in accordance
with the laws of England and Wales without reference to its choice of
law rules. The competent courts located in London, England, have
exclusive jurisdiction for all purposes relating to this Agreement.
2. Server Side Public License (SSPL)
====================================
Server Side Public License
VERSION 1, OCTOBER 16, 2018
Copyright (c) 2018 MongoDB, Inc.
Everyone is permitted to copy and distribute verbatim copies of this
license document, but changing it is not allowed.
TERMS AND CONDITIONS
0. Definitions.
"This License" refers to Server Side Public License.
"Copyright" also means copyright-like laws that apply to other kinds of
works, such as semiconductor masks.
"The Program" refers to any copyrightable work licensed under this
License. Each licensee is addressed as "you". "Licensees" and
"recipients" may be individuals or organizations.
To "modify" a work means to copy from or adapt all or part of the work in
a fashion requiring copyright permission, other than the making of an
exact copy. The resulting work is called a "modified version" of the
earlier work or a work "based on" the earlier work.
A "covered work" means either the unmodified Program or a work based on
the Program.
To "propagate" a work means to do anything with it that, without
permission, would make you directly or secondarily liable for
infringement under applicable copyright law, except executing it on a
computer or modifying a private copy. Propagation includes copying,
distribution (with or without modification), making available to the
public, and in some countries other activities as well.
To "convey" a work means any kind of propagation that enables other
parties to make or receive copies. Mere interaction with a user through a
computer network, with no transfer of a copy, is not conveying.
An interactive user interface displays "Appropriate Legal Notices" to the
extent that it includes a convenient and prominently visible feature that
(1) displays an appropriate copyright notice, and (2) tells the user that
there is no warranty for the work (except to the extent that warranties
are provided), that licensees may convey the work under this License, and
how to view a copy of this License. If the interface presents a list of
user commands or options, such as a menu, a prominent item in the list
meets this criterion.
1. Source Code.
The "source code" for a work means the preferred form of the work for
making modifications to it. "Object code" means any non-source form of a
work.
A "Standard Interface" means an interface that either is an official
standard defined by a recognized standards body, or, in the case of
interfaces specified for a particular programming language, one that is
widely used among developers working in that language. The "System
Libraries" of an executable work include anything, other than the work as
a whole, that (a) is included in the normal form of packaging a Major
Component, but which is not part of that Major Component, and (b) serves
only to enable use of the work with that Major Component, or to implement
a Standard Interface for which an implementation is available to the
public in source code form. A "Major Component", in this context, means a
major essential component (kernel, window system, and so on) of the
specific operating system (if any) on which the executable work runs, or
a compiler used to produce the work, or an object code interpreter used
to run it.
The "Corresponding Source" for a work in object code form means all the
source code needed to generate, install, and (for an executable work) run
the object code and to modify the work, including scripts to control
those activities. However, it does not include the work's System
Libraries, or general-purpose tools or generally available free programs
which are used unmodified in performing those activities but which are
not part of the work. For example, Corresponding Source includes
interface definition files associated with source files for the work, and
the source code for shared libraries and dynamically linked subprograms
that the work is specifically designed to require, such as by intimate
data communication or control flow between those subprograms and other
parts of the work.
The Corresponding Source need not include anything that users can
regenerate automatically from other parts of the Corresponding Source.
The Corresponding Source for a work in source code form is that same work.
2. Basic Permissions.
All rights granted under this License are granted for the term of
copyright on the Program, and are irrevocable provided the stated
conditions are met. This License explicitly affirms your unlimited
permission to run the unmodified Program, subject to section 13. The
output from running a covered work is covered by this License only if the
output, given its content, constitutes a covered work. This License
acknowledges your rights of fair use or other equivalent, as provided by
copyright law. Subject to section 13, you may make, run and propagate
covered works that you do not convey, without conditions so long as your
license otherwise remains in force. You may convey covered works to
others for the sole purpose of having them make modifications exclusively
for you, or provide you with facilities for running those works, provided
that you comply with the terms of this License in conveying all
material for which you do not control copyright. Those thus making or
running the covered works for you must do so exclusively on your
behalf, under your direction and control, on terms that prohibit them
from making any copies of your copyrighted material outside their
relationship with you.
Conveying under any other circumstances is permitted solely under the
conditions stated below. Sublicensing is not allowed; section 10 makes it
unnecessary.
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
No covered work shall be deemed part of an effective technological
measure under any applicable law fulfilling obligations under article 11
of the WIPO copyright treaty adopted on 20 December 1996, or similar laws
prohibiting or restricting circumvention of such measures.
When you convey a covered work, you waive any legal power to forbid
circumvention of technological measures to the extent such circumvention is
effected by exercising rights under this License with respect to the
covered work, and you disclaim any intention to limit operation or
modification of the work as a means of enforcing, against the work's users,
your or third parties' legal rights to forbid circumvention of
technological measures.
4. Conveying Verbatim Copies.
You may convey verbatim copies of the Program's source code as you
receive it, in any medium, provided that you conspicuously and
appropriately publish on each copy an appropriate copyright notice; keep
intact all notices stating that this License and any non-permissive terms
added in accord with section 7 apply to the code; keep intact all notices
of the absence of any warranty; and give all recipients a copy of this
License along with the Program. You may charge any price or no price for
each copy that you convey, and you may offer support or warranty
protection for a fee.
5. Conveying Modified Source Versions.
You may convey a work based on the Program, or the modifications to
produce it from the Program, in the form of source code under the terms
of section 4, provided that you also meet all of these conditions:
a) The work must carry prominent notices stating that you modified it,
and giving a relevant date.
b) The work must carry prominent notices stating that it is released
under this License and any conditions added under section 7. This
requirement modifies the requirement in section 4 to "keep intact all
notices".
c) You must license the entire work, as a whole, under this License to
anyone who comes into possession of a copy. This License will therefore
apply, along with any applicable section 7 additional terms, to the
whole of the work, and all its parts, regardless of how they are
packaged. This License gives no permission to license the work in any
other way, but it does not invalidate such permission if you have
separately received it.
d) If the work has interactive user interfaces, each must display
Appropriate Legal Notices; however, if the Program has interactive
interfaces that do not display Appropriate Legal Notices, your work
need not make them do so.
A compilation of a covered work with other separate and independent
works, which are not by their nature extensions of the covered work, and
which are not combined with it such as to form a larger program, in or on
a volume of a storage or distribution medium, is called an "aggregate" if
the compilation and its resulting copyright are not used to limit the
access or legal rights of the compilation's users beyond what the
individual works permit. Inclusion of a covered work in an aggregate does
not cause this License to apply to the other parts of the aggregate.
6. Conveying Non-Source Forms.
You may convey a covered work in object code form under the terms of
sections 4 and 5, provided that you also convey the machine-readable
Corresponding Source under the terms of this License, in one of these
ways:
a) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by the
Corresponding Source fixed on a durable physical medium customarily
used for software interchange.
b) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by a written
offer, valid for at least three years and valid for as long as you
offer spare parts or customer support for that product model, to give
anyone who possesses the object code either (1) a copy of the
Corresponding Source for all the software in the product that is
covered by this License, on a durable physical medium customarily used
for software interchange, for a price no more than your reasonable cost
of physically performing this conveying of source, or (2) access to
copy the Corresponding Source from a network server at no charge.
c) Convey individual copies of the object code with a copy of the
written offer to provide the Corresponding Source. This alternative is
allowed only occasionally and noncommercially, and only if you received
the object code with such an offer, in accord with subsection 6b.
d) Convey the object code by offering access from a designated place
(gratis or for a charge), and offer equivalent access to the
Corresponding Source in the same way through the same place at no
further charge. You need not require recipients to copy the
Corresponding Source along with the object code. If the place to copy
the object code is a network server, the Corresponding Source may be on
a different server (operated by you or a third party) that supports
equivalent copying facilities, provided you maintain clear directions
next to the object code saying where to find the Corresponding Source.
Regardless of what server hosts the Corresponding Source, you remain
obligated to ensure that it is available for as long as needed to
satisfy these requirements.
e) Convey the object code using peer-to-peer transmission, provided you
inform other peers where the object code and Corresponding Source of
the work are being offered to the general public at no charge under
subsection 6d.
A separable portion of the object code, whose source code is excluded
from the Corresponding Source as a System Library, need not be included
in conveying the object code work.
A "User Product" is either (1) a "consumer product", which means any
tangible personal property which is normally used for personal, family,
or household purposes, or (2) anything designed or sold for incorporation
into a dwelling. In determining whether a product is a consumer product,
doubtful cases shall be resolved in favor of coverage. For a particular
product received by a particular user, "normally used" refers to a
typical or common use of that class of product, regardless of the status
of the particular user or of the way in which the particular user
actually uses, or expects or is expected to use, the product. A product
is a consumer product regardless of whether the product has substantial
commercial, industrial or non-consumer uses, unless such uses represent
the only significant mode of use of the product.
"Installation Information" for a User Product means any methods,
procedures, authorization keys, or other information required to install
and execute modified versions of a covered work in that User Product from
a modified version of its Corresponding Source. The information must
suffice to ensure that the continued functioning of the modified object
code is in no case prevented or interfered with solely because
modification has been made.
If you convey an object code work under this section in, or with, or
specifically for use in, a User Product, and the conveying occurs as part
of a transaction in which the right of possession and use of the User
Product is transferred to the recipient in perpetuity or for a fixed term
(regardless of how the transaction is characterized), the Corresponding
Source conveyed under this section must be accompanied by the
Installation Information. But this requirement does not apply if neither
you nor any third party retains the ability to install modified object
code on the User Product (for example, the work has been installed in
ROM).
The requirement to provide Installation Information does not include a
requirement to continue to provide support service, warranty, or updates
for a work that has been modified or installed by the recipient, or for
the User Product in which it has been modified or installed. Access
to a network may be denied when the modification itself materially
and adversely affects the operation of the network or violates the
rules and protocols for communication across the network.
Corresponding Source conveyed, and Installation Information provided, in
accord with this section must be in a format that is publicly documented
(and with an implementation available to the public in source code form),
and must require no special password or key for unpacking, reading or
copying.
7. Additional Terms.
"Additional permissions" are terms that supplement the terms of this
License by making exceptions from one or more of its conditions.
Additional permissions that are applicable to the entire Program shall be
treated as though they were included in this License, to the extent that
they are valid under applicable law. If additional permissions apply only
to part of the Program, that part may be used separately under those
permissions, but the entire Program remains governed by this License
without regard to the additional permissions. When you convey a copy of
a covered work, you may at your option remove any additional permissions
from that copy, or from any part of it. (Additional permissions may be
written to require their own removal in certain cases when you modify the
work.) You may place additional permissions on material, added by you to
a covered work, for which you have or can give appropriate copyright
permission.
Notwithstanding any other provision of this License, for material you add
to a covered work, you may (if authorized by the copyright holders of
that material) supplement the terms of this License with terms:
a) Disclaiming warranty or limiting liability differently from the
terms of sections 15 and 16 of this License; or
b) Requiring preservation of specified reasonable legal notices or
author attributions in that material or in the Appropriate Legal
Notices displayed by works containing it; or
c) Prohibiting misrepresentation of the origin of that material, or
requiring that modified versions of such material be marked in
reasonable ways as different from the original version; or
d) Limiting the use for publicity purposes of names of licensors or
authors of the material; or
e) Declining to grant rights under trademark law for use of some trade
names, trademarks, or service marks; or
f) Requiring indemnification of licensors and authors of that material
by anyone who conveys the material (or modified versions of it) with
contractual assumptions of liability to the recipient, for any
liability that these contractual assumptions directly impose on those
licensors and authors.
All other non-permissive additional terms are considered "further
restrictions" within the meaning of section 10. If the Program as you
received it, or any part of it, contains a notice stating that it is
governed by this License along with a term that is a further restriction,
you may remove that term. If a license document contains a further
restriction but permits relicensing or conveying under this License, you
may add to a covered work material governed by the terms of that license
document, provided that the further restriction does not survive such
relicensing or conveying.
If you add terms to a covered work in accord with this section, you must
place, in the relevant source files, a statement of the additional terms
that apply to those files, or a notice indicating where to find the
applicable terms. Additional terms, permissive or non-permissive, may be
stated in the form of a separately written license, or stated as
exceptions; the above requirements apply either way.
8. Termination.
You may not propagate or modify a covered work except as expressly
provided under this License. Any attempt otherwise to propagate or modify
it is void, and will automatically terminate your rights under this
License (including any patent licenses granted under the third paragraph
of section 11).
However, if you cease all violation of this License, then your license
from a particular copyright holder is reinstated (a) provisionally,
unless and until the copyright holder explicitly and finally terminates
your license, and (b) permanently, if the copyright holder fails to
notify you of the violation by some reasonable means prior to 60 days
after the cessation.
Moreover, your license from a particular copyright holder is reinstated
permanently if the copyright holder notifies you of the violation by some
reasonable means, this is the first time you have received notice of
violation of this License (for any work) from that copyright holder, and
you cure the violation prior to 30 days after your receipt of the notice.
Termination of your rights under this section does not terminate the
licenses of parties who have received copies or rights from you under
this License. If your rights have been terminated and not permanently
reinstated, you do not qualify to receive new licenses for the same
material under section 10.
9. Acceptance Not Required for Having Copies.
You are not required to accept this License in order to receive or run a
copy of the Program. Ancillary propagation of a covered work occurring
solely as a consequence of using peer-to-peer transmission to receive a
copy likewise does not require acceptance. However, nothing other than
this License grants you permission to propagate or modify any covered
work. These actions infringe copyright if you do not accept this License.
Therefore, by modifying or propagating a covered work, you indicate your
acceptance of this License to do so.
10. Automatic Licensing of Downstream Recipients.
Each time you convey a covered work, the recipient automatically receives
a license from the original licensors, to run, modify and propagate that
work, subject to this License. You are not responsible for enforcing
compliance by third parties with this License.
An "entity transaction" is a transaction transferring control of an
organization, or substantially all assets of one, or subdividing an
organization, or merging organizations. If propagation of a covered work
results from an entity transaction, each party to that transaction who
receives a copy of the work also receives whatever licenses to the work
the party's predecessor in interest had or could give under the previous
paragraph, plus a right to possession of the Corresponding Source of the
work from the predecessor in interest, if the predecessor has it or can
get it with reasonable efforts.
You may not impose any further restrictions on the exercise of the rights
granted or affirmed under this License. For example, you may not impose a
license fee, royalty, or other charge for exercise of rights granted
under this License, and you may not initiate litigation (including a
cross-claim or counterclaim in a lawsuit) alleging that any patent claim
is infringed by making, using, selling, offering for sale, or importing
the Program or any portion of it.
11. Patents.
A "contributor" is a copyright holder who authorizes use under this
License of the Program or a work on which the Program is based. The work
thus licensed is called the contributor's "contributor version".
A contributor's "essential patent claims" are all patent claims owned or
controlled by the contributor, whether already acquired or hereafter
acquired, that would be infringed by some manner, permitted by this
License, of making, using, or selling its contributor version, but do not
include claims that would be infringed only as a consequence of further
modification of the contributor version. For purposes of this definition,
"control" includes the right to grant patent sublicenses in a manner
consistent with the requirements of this License.
Each contributor grants you a non-exclusive, worldwide, royalty-free
patent license under the contributor's essential patent claims, to make,
use, sell, offer for sale, import and otherwise run, modify and propagate
the contents of its contributor version.
In the following three paragraphs, a "patent license" is any express
agreement or commitment, however denominated, not to enforce a patent
(such as an express permission to practice a patent or covenant not to
sue for patent infringement). To "grant" such a patent license to a party
means to make such an agreement or commitment not to enforce a patent
against the party.
If you convey a covered work, knowingly relying on a patent license, and
the Corresponding Source of the work is not available for anyone to copy,
free of charge and under the terms of this License, through a publicly
available network server or other readily accessible means, then you must
either (1) cause the Corresponding Source to be so available, or (2)
arrange to deprive yourself of the benefit of the patent license for this
particular work, or (3) arrange, in a manner consistent with the
requirements of this License, to extend the patent license to downstream
recipients. "Knowingly relying" means you have actual knowledge that, but
for the patent license, your conveying the covered work in a country, or
your recipient's use of the covered work in a country, would infringe
one or more identifiable patents in that country that you have reason
to believe are valid.
If, pursuant to or in connection with a single transaction or
arrangement, you convey, or propagate by procuring conveyance of, a
covered work, and grant a patent license to some of the parties receiving
the covered work authorizing them to use, propagate, modify or convey a
specific copy of the covered work, then the patent license you grant is
automatically extended to all recipients of the covered work and works
based on it.
A patent license is "discriminatory" if it does not include within the
scope of its coverage, prohibits the exercise of, or is conditioned on
the non-exercise of one or more of the rights that are specifically
granted under this License. You may not convey a covered work if you are
a party to an arrangement with a third party that is in the business of
distributing software, under which you make payment to the third party
based on the extent of your activity of conveying the work, and under
which the third party grants, to any of the parties who would receive the
covered work from you, a discriminatory patent license (a) in connection
with copies of the covered work conveyed by you (or copies made from
those copies), or (b) primarily for and in connection with specific
products or compilations that contain the covered work, unless you
entered into that arrangement, or that patent license was granted, prior
to 28 March 2007.
Nothing in this License shall be construed as excluding or limiting any
implied license or other defenses to infringement that may otherwise be
available to you under applicable patent law.
12. No Surrender of Others' Freedom.
If conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot use,
propagate or convey a covered work so as to satisfy simultaneously your
obligations under this License and any other pertinent obligations, then
as a consequence you may not use, propagate or convey it at all. For
example, if you agree to terms that obligate you to collect a royalty for
further conveying from those to whom you convey the Program, the only way
you could satisfy both those terms and this License would be to refrain
entirely from conveying the Program.
13. Offering the Program as a Service.
If you make the functionality of the Program or a modified version
available to third parties as a service, you must make the Service Source
Code available via network download to everyone at no charge, under the
terms of this License. Making the functionality of the Program or
modified version available to third parties as a service includes,
without limitation, enabling third parties to interact with the
functionality of the Program or modified version remotely through a
computer network, offering a service the value of which entirely or
primarily derives from the value of the Program or modified version, or
offering a service that accomplishes for users the primary purpose of the
Program or modified version.
"Service Source Code" means the Corresponding Source for the Program or
the modified version, and the Corresponding Source for all programs that
you use to make the Program or modified version available as a service,
including, without limitation, management software, user interfaces,
application program interfaces, automation software, monitoring software,
backup software, storage software and hosting software, all such that a
user could run an instance of the service using the Service Source Code
you make available.
14. Revised Versions of this License.
MongoDB, Inc. may publish revised and/or new versions of the Server Side
Public License from time to time. Such new versions will be similar in
spirit to the present version, but may differ in detail to address new
problems or concerns.
Each version is given a distinguishing version number. If the Program
specifies that a certain numbered version of the Server Side Public
License "or any later version" applies to it, you have the option of
following the terms and conditions either of that numbered version or of
any later version published by MongoDB, Inc. If the Program does not
specify a version number of the Server Side Public License, you may
choose any version ever published by MongoDB, Inc.
If the Program specifies that a proxy can decide which future versions of
the Server Side Public License can be used, that proxy's public statement
of acceptance of a version permanently authorizes you to choose that
version for the Program.
Later license versions may give you additional or different permissions.
However, no additional obligations are imposed on any author or copyright
holder as a result of your choosing to follow a later version.
15. Disclaimer of Warranty.
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
16. Limitation of Liability.
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING
ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF
THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO
LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU
OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGES.
17. Interpretation of Sections 15 and 16.
If the disclaimer of warranty and limitation of liability provided above
cannot be given local legal effect according to their terms, reviewing
courts shall apply local law that most closely approximates an absolute
waiver of all civil liability in connection with the Program, unless a
warranty or assumption of liability accompanies a copy of the Program in
return for a fee.
END OF TERMS AND CONDITIONS
3. GNU AFFERO GENERAL PUBLIC LICENSE, Version 3, 19 Nov 2007
========================================================
Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
The GNU Affero General Public License is a free, copyleft license for
software and other kinds of works, specifically designed to ensure
cooperation with the community in the case of network server software.
The licenses for most software and other practical works are designed
to take away your freedom to share and change the works. By contrast,
our General Public Licenses are intended to guarantee your freedom to
share and change all versions of a program--to make sure it remains free
software for all its users.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
them if you wish), that you receive source code or can get it if you
want it, that you can change the software or use pieces of it in new
free programs, and that you know you can do these things.
Developers that use our General Public Licenses protect your rights
with two steps: (1) assert copyright on the software, and (2) offer
you this License which gives you legal permission to copy, distribute
and/or modify the software.
A secondary benefit of defending all users' freedom is that
improvements made in alternate versions of the program, if they
receive widespread use, become available for other developers to
incorporate. Many developers of free software are heartened and
encouraged by the resulting cooperation. However, in the case of
software used on network servers, this result may fail to come about.
The GNU General Public License permits making a modified version and
letting the public access it on a server without ever releasing its
source code to the public.
The GNU Affero General Public License is designed specifically to
ensure that, in such cases, the modified source code becomes available
to the community. It requires the operator of a network server to
provide the source code of the modified version running there to the
users of that server. Therefore, public use of a modified version, on
a publicly accessible server, gives the public access to the source
code of the modified version.
An older license, called the Affero General Public License and
published by Affero, was designed to accomplish similar goals. This is
a different license, not a version of the Affero GPL, but Affero has
released a new version of the Affero GPL which permits relicensing under
this license.
The precise terms and conditions for copying, distribution and
modification follow.
TERMS AND CONDITIONS
0. Definitions.
"This License" refers to version 3 of the GNU Affero General Public License.
"Copyright" also means copyright-like laws that apply to other kinds of
works, such as semiconductor masks.
"The Program" refers to any copyrightable work licensed under this
License. Each licensee is addressed as "you". "Licensees" and
"recipients" may be individuals or organizations.
To "modify" a work means to copy from or adapt all or part of the work
in a fashion requiring copyright permission, other than the making of an
exact copy. The resulting work is called a "modified version" of the
earlier work or a work "based on" the earlier work.
A "covered work" means either the unmodified Program or a work based
on the Program.
To "propagate" a work means to do anything with it that, without
permission, would make you directly or secondarily liable for
infringement under applicable copyright law, except executing it on a
computer or modifying a private copy. Propagation includes copying,
distribution (with or without modification), making available to the
public, and in some countries other activities as well.
To "convey" a work means any kind of propagation that enables other
parties to make or receive copies. Mere interaction with a user through
a computer network, with no transfer of a copy, is not conveying.
An interactive user interface displays "Appropriate Legal Notices"
to the extent that it includes a convenient and prominently visible
feature that (1) displays an appropriate copyright notice, and (2)
tells the user that there is no warranty for the work (except to the
extent that warranties are provided), that licensees may convey the
work under this License, and how to view a copy of this License. If
the interface presents a list of user commands or options, such as a
menu, a prominent item in the list meets this criterion.
1. Source Code.
The "source code" for a work means the preferred form of the work
for making modifications to it. "Object code" means any non-source
form of a work.
A "Standard Interface" means an interface that either is an official
standard defined by a recognized standards body, or, in the case of
interfaces specified for a particular programming language, one that
is widely used among developers working in that language.
The "System Libraries" of an executable work include anything, other
than the work as a whole, that (a) is included in the normal form of
packaging a Major Component, but which is not part of that Major
Component, and (b) serves only to enable use of the work with that
Major Component, or to implement a Standard Interface for which an
implementation is available to the public in source code form. A
"Major Component", in this context, means a major essential component
(kernel, window system, and so on) of the specific operating system
(if any) on which the executable work runs, or a compiler used to
produce the work, or an object code interpreter used to run it.
The "Corresponding Source" for a work in object code form means all
the source code needed to generate, install, and (for an executable
work) run the object code and to modify the work, including scripts to
control those activities. However, it does not include the work's
System Libraries, or general-purpose tools or generally available free
programs which are used unmodified in performing those activities but
which are not part of the work. For example, Corresponding Source
includes interface definition files associated with source files for
the work, and the source code for shared libraries and dynamically
linked subprograms that the work is specifically designed to require,
such as by intimate data communication or control flow between those
subprograms and other parts of the work.
The Corresponding Source need not include anything that users
can regenerate automatically from other parts of the Corresponding
Source.
The Corresponding Source for a work in source code form is that
same work.
2. Basic Permissions.
All rights granted under this License are granted for the term of
copyright on the Program, and are irrevocable provided the stated
conditions are met. This License explicitly affirms your unlimited
permission to run the unmodified Program. The output from running a
covered work is covered by this License only if the output, given its
content, constitutes a covered work. This License acknowledges your
rights of fair use or other equivalent, as provided by copyright law.
You may make, run and propagate covered works that you do not
convey, without conditions so long as your license otherwise remains
in force. You may convey covered works to others for the sole purpose
of having them make modifications exclusively for you, or provide you
with facilities for running those works, provided that you comply with
the terms of this License in conveying all material for which you do
not control copyright. Those thus making or running the covered works
for you must do so exclusively on your behalf, under your direction
and control, on terms that prohibit them from making any copies of
your copyrighted material outside their relationship with you.
Conveying under any other circumstances is permitted solely under
the conditions stated below. Sublicensing is not allowed; section 10
makes it unnecessary.
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
No covered work shall be deemed part of an effective technological
measure under any applicable law fulfilling obligations under article
11 of the WIPO copyright treaty adopted on 20 December 1996, or
similar laws prohibiting or restricting circumvention of such
measures.
When you convey a covered work, you waive any legal power to forbid
circumvention of technological measures to the extent such circumvention
is effected by exercising rights under this License with respect to
the covered work, and you disclaim any intention to limit operation or
modification of the work as a means of enforcing, against the work's
users, your or third parties' legal rights to forbid circumvention of
technological measures.
4. Conveying Verbatim Copies.
You may convey verbatim copies of the Program's source code as you
receive it, in any medium, provided that you conspicuously and
appropriately publish on each copy an appropriate copyright notice;
keep intact all notices stating that this License and any
non-permissive terms added in accord with section 7 apply to the code;
keep intact all notices of the absence of any warranty; and give all
recipients a copy of this License along with the Program.
You may charge any price or no price for each copy that you convey,
and you may offer support or warranty protection for a fee.
5. Conveying Modified Source Versions.
You may convey a work based on the Program, or the modifications to
produce it from the Program, in the form of source code under the
terms of section 4, provided that you also meet all of these conditions:
a) The work must carry prominent notices stating that you modified
it, and giving a relevant date.
b) The work must carry prominent notices stating that it is
released under this License and any conditions added under section
7. This requirement modifies the requirement in section 4 to
"keep intact all notices".
c) You must license the entire work, as a whole, under this
License to anyone who comes into possession of a copy. This
License will therefore apply, along with any applicable section 7
additional terms, to the whole of the work, and all its parts,
regardless of how they are packaged. This License gives no
permission to license the work in any other way, but it does not
invalidate such permission if you have separately received it.
d) If the work has interactive user interfaces, each must display
Appropriate Legal Notices; however, if the Program has interactive
interfaces that do not display Appropriate Legal Notices, your
work need not make them do so.
A compilation of a covered work with other separate and independent
works, which are not by their nature extensions of the covered work,
and which are not combined with it such as to form a larger program,
in or on a volume of a storage or distribution medium, is called an
"aggregate" if the compilation and its resulting copyright are not
used to limit the access or legal rights of the compilation's users
beyond what the individual works permit. Inclusion of a covered work
in an aggregate does not cause this License to apply to the other
parts of the aggregate.
6. Conveying Non-Source Forms.
You may convey a covered work in object code form under the terms
of sections 4 and 5, provided that you also convey the
machine-readable Corresponding Source under the terms of this License,
in one of these ways:
a) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by the
Corresponding Source fixed on a durable physical medium
customarily used for software interchange.
b) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by a
written offer, valid for at least three years and valid for as
long as you offer spare parts or customer support for that product
model, to give anyone who possesses the object code either (1) a
copy of the Corresponding Source for all the software in the
product that is covered by this License, on a durable physical
medium customarily used for software interchange, for a price no
more than your reasonable cost of physically performing this
conveying of source, or (2) access to copy the
Corresponding Source from a network server at no charge.
c) Convey individual copies of the object code with a copy of the
written offer to provide the Corresponding Source. This
alternative is allowed only occasionally and noncommercially, and
only if you received the object code with such an offer, in accord
with subsection 6b.
d) Convey the object code by offering access from a designated
place (gratis or for a charge), and offer equivalent access to the
Corresponding Source in the same way through the same place at no
further charge. You need not require recipients to copy the
Corresponding Source along with the object code. If the place to
copy the object code is a network server, the Corresponding Source
may be on a different server (operated by you or a third party)
that supports equivalent copying facilities, provided you maintain
clear directions next to the object code saying where to find the
Corresponding Source. Regardless of what server hosts the
Corresponding Source, you remain obligated to ensure that it is
available for as long as needed to satisfy these requirements.
e) Convey the object code using peer-to-peer transmission, provided
you inform other peers where the object code and Corresponding
Source of the work are being offered to the general public at no
charge under subsection 6d.
A separable portion of the object code, whose source code is excluded
from the Corresponding Source as a System Library, need not be
included in conveying the object code work.
A "User Product" is either (1) a "consumer product", which means any
tangible personal property which is normally used for personal, family,
or household purposes, or (2) anything designed or sold for incorporation
into a dwelling. In determining whether a product is a consumer product,
doubtful cases shall be resolved in favor of coverage. For a particular
product received by a particular user, "normally used" refers to a
typical or common use of that class of product, regardless of the status
of the particular user or of the way in which the particular user
actually uses, or expects or is expected to use, the product. A product
is a consumer product regardless of whether the product has substantial
commercial, industrial or non-consumer uses, unless such uses represent
the only significant mode of use of the product.
"Installation Information" for a User Product means any methods,
procedures, authorization keys, or other information required to install
and execute modified versions of a covered work in that User Product from
a modified version of its Corresponding Source. The information must
suffice to ensure that the continued functioning of the modified object
code is in no case prevented or interfered with solely because
modification has been made.
If you convey an object code work under this section in, or with, or
specifically for use in, a User Product, and the conveying occurs as
part of a transaction in which the right of possession and use of the
User Product is transferred to the recipient in perpetuity or for a
fixed term (regardless of how the transaction is characterized), the
Corresponding Source conveyed under this section must be accompanied
by the Installation Information. But this requirement does not apply
if neither you nor any third party retains the ability to install
modified object code on the User Product (for example, the work has
been installed in ROM).
The requirement to provide Installation Information does not include a
requirement to continue to provide support service, warranty, or updates
for a work that has been modified or installed by the recipient, or for
the User Product in which it has been modified or installed. Access to a
network may be denied when the modification itself materially and
adversely affects the operation of the network or violates the rules and
protocols for communication across the network.
Corresponding Source conveyed, and Installation Information provided,
in accord with this section must be in a format that is publicly
documented (and with an implementation available to the public in
source code form), and must require no special password or key for
unpacking, reading or copying.
7. Additional Terms.
"Additional permissions" are terms that supplement the terms of this
License by making exceptions from one or more of its conditions.
Additional permissions that are applicable to the entire Program shall
be treated as though they were included in this License, to the extent
that they are valid under applicable law. If additional permissions
apply only to part of the Program, that part may be used separately
under those permissions, but the entire Program remains governed by
this License without regard to the additional permissions.
When you convey a copy of a covered work, you may at your option
remove any additional permissions from that copy, or from any part of
it. (Additional permissions may be written to require their own
removal in certain cases when you modify the work.) You may place
additional permissions on material, added by you to a covered work,
for which you have or can give appropriate copyright permission.
Notwithstanding any other provision of this License, for material you
add to a covered work, you may (if authorized by the copyright holders of
that material) supplement the terms of this License with terms:
a) Disclaiming warranty or limiting liability differently from the
terms of sections 15 and 16 of this License; or
b) Requiring preservation of specified reasonable legal notices or
author attributions in that material or in the Appropriate Legal
Notices displayed by works containing it; or
c) Prohibiting misrepresentation of the origin of that material, or
requiring that modified versions of such material be marked in
reasonable ways as different from the original version; or
d) Limiting the use for publicity purposes of names of licensors or
authors of the material; or
e) Declining to grant rights under trademark law for use of some
trade names, trademarks, or service marks; or
f) Requiring indemnification of licensors and authors of that
material by anyone who conveys the material (or modified versions of
it) with contractual assumptions of liability to the recipient, for
any liability that these contractual assumptions directly impose on
those licensors and authors.
All other non-permissive additional terms are considered "further
restrictions" within the meaning of section 10. If the Program as you
received it, or any part of it, contains a notice stating that it is
governed by this License along with a term that is a further
restriction, you may remove that term. If a license document contains
a further restriction but permits relicensing or conveying under this
License, you may add to a covered work material governed by the terms
of that license document, provided that the further restriction does
not survive such relicensing or conveying.
If you add terms to a covered work in accord with this section, you
must place, in the relevant source files, a statement of the
additional terms that apply to those files, or a notice indicating
where to find the applicable terms.
Additional terms, permissive or non-permissive, may be stated in the
form of a separately written license, or stated as exceptions;
the above requirements apply either way.
8. Termination.
You may not propagate or modify a covered work except as expressly
provided under this License. Any attempt otherwise to propagate or
modify it is void, and will automatically terminate your rights under
this License (including any patent licenses granted under the third
paragraph of section 11).
However, if you cease all violation of this License, then your
license from a particular copyright holder is reinstated (a)
provisionally, unless and until the copyright holder explicitly and
finally terminates your license, and (b) permanently, if the copyright
holder fails to notify you of the violation by some reasonable means
prior to 60 days after the cessation.
Moreover, your license from a particular copyright holder is
reinstated permanently if the copyright holder notifies you of the
violation by some reasonable means, this is the first time you have
received notice of violation of this License (for any work) from that
copyright holder, and you cure the violation prior to 30 days after
your receipt of the notice.
Termination of your rights under this section does not terminate the
licenses of parties who have received copies or rights from you under
this License. If your rights have been terminated and not permanently
reinstated, you do not qualify to receive new licenses for the same
material under section 10.
9. Acceptance Not Required for Having Copies.
You are not required to accept this License in order to receive or
run a copy of the Program. Ancillary propagation of a covered work
occurring solely as a consequence of using peer-to-peer transmission
to receive a copy likewise does not require acceptance. However,
nothing other than this License grants you permission to propagate or
modify any covered work. These actions infringe copyright if you do
not accept this License. Therefore, by modifying or propagating a
covered work, you indicate your acceptance of this License to do so.
10. Automatic Licensing of Downstream Recipients.
Each time you convey a covered work, the recipient automatically
receives a license from the original licensors, to run, modify and
propagate that work, subject to this License. You are not responsible
for enforcing compliance by third parties with this License.
An "entity transaction" is a transaction transferring control of an
organization, or substantially all assets of one, or subdividing an
organization, or merging organizations. If propagation of a covered
work results from an entity transaction, each party to that
transaction who receives a copy of the work also receives whatever
licenses to the work the party's predecessor in interest had or could
give under the previous paragraph, plus a right to possession of the
Corresponding Source of the work from the predecessor in interest, if
the predecessor has it or can get it with reasonable efforts.
You may not impose any further restrictions on the exercise of the
rights granted or affirmed under this License. For example, you may
not impose a license fee, royalty, or other charge for exercise of
rights granted under this License, and you may not initiate litigation
(including a cross-claim or counterclaim in a lawsuit) alleging that
any patent claim is infringed by making, using, selling, offering for
sale, or importing the Program or any portion of it.
11. Patents.
A "contributor" is a copyright holder who authorizes use under this
License of the Program or a work on which the Program is based. The
work thus licensed is called the contributor's "contributor version".
A contributor's "essential patent claims" are all patent claims
owned or controlled by the contributor, whether already acquired or
hereafter acquired, that would be infringed by some manner, permitted
by this License, of making, using, or selling its contributor version,
but do not include claims that would be infringed only as a
consequence of further modification of the contributor version. For
purposes of this definition, "control" includes the right to grant
patent sublicenses in a manner consistent with the requirements of
this License.
Each contributor grants you a non-exclusive, worldwide, royalty-free
patent license under the contributor's essential patent claims, to
make, use, sell, offer for sale, import and otherwise run, modify and
propagate the contents of its contributor version.
In the following three paragraphs, a "patent license" is any express
agreement or commitment, however denominated, not to enforce a patent
(such as an express permission to practice a patent or covenant not to
sue for patent infringement). To "grant" such a patent license to a
party means to make such an agreement or commitment not to enforce a
patent against the party.
If you convey a covered work, knowingly relying on a patent license,
and the Corresponding Source of the work is not available for anyone
to copy, free of charge and under the terms of this License, through a
publicly available network server or other readily accessible means,
then you must either (1) cause the Corresponding Source to be so
available, or (2) arrange to deprive yourself of the benefit of the
patent license for this particular work, or (3) arrange, in a manner
consistent with the requirements of this License, to extend the patent
license to downstream recipients. "Knowingly relying" means you have
actual knowledge that, but for the patent license, your conveying the
covered work in a country, or your recipient's use of the covered work
in a country, would infringe one or more identifiable patents in that
country that you have reason to believe are valid.
If, pursuant to or in connection with a single transaction or
arrangement, you convey, or propagate by procuring conveyance of, a
covered work, and grant a patent license to some of the parties
receiving the covered work authorizing them to use, propagate, modify
or convey a specific copy of the covered work, then the patent license
you grant is automatically extended to all recipients of the covered
work and works based on it.
A patent license is "discriminatory" if it does not include within
the scope of its coverage, prohibits the exercise of, or is
conditioned on the non-exercise of one or more of the rights that are
specifically granted under this License. You may not convey a covered
work if you are a party to an arrangement with a third party that is
in the business of distributing software, under which you make payment
to the third party based on the extent of your activity of conveying
the work, and under which the third party grants, to any of the
parties who would receive the covered work from you, a discriminatory
patent license (a) in connection with copies of the covered work
conveyed by you (or copies made from those copies), or (b) primarily
for and in connection with specific products or compilations that
contain the covered work, unless you entered into that arrangement,
or that patent license was granted, prior to 28 March 2007.
Nothing in this License shall be construed as excluding or limiting
any implied license or other defenses to infringement that may
otherwise be available to you under applicable patent law.
12. No Surrender of Others' Freedom.
If conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot convey a
covered work so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you may
not convey it at all. For example, if you agree to terms that obligate you
to collect a royalty for further conveying from those to whom you convey
the Program, the only way you could satisfy both those terms and this
License would be to refrain entirely from conveying the Program.
13. Remote Network Interaction; Use with the GNU General Public License.
Notwithstanding any other provision of this License, if you modify the
Program, your modified version must prominently offer all users
interacting with it remotely through a computer network (if your version
supports such interaction) an opportunity to receive the Corresponding
Source of your version by providing access to the Corresponding Source
from a network server at no charge, through some standard or customary
means of facilitating copying of software. This Corresponding Source
shall include the Corresponding Source for any work covered by version 3
of the GNU General Public License that is incorporated pursuant to the
following paragraph.
Notwithstanding any other provision of this License, you have
permission to link or combine any covered work with a work licensed
under version 3 of the GNU General Public License into a single
combined work, and to convey the resulting work. The terms of this
License will continue to apply to the part which is the covered work,
but the work with which it is combined will remain governed by version
3 of the GNU General Public License.
14. Revised Versions of this License.
The Free Software Foundation may publish revised and/or new versions of
the GNU Affero General Public License from time to time. Such new versions
will be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
Each version is given a distinguishing version number. If the
Program specifies that a certain numbered version of the GNU Affero General
Public License "or any later version" applies to it, you have the
option of following the terms and conditions either of that numbered
version or of any later version published by the Free Software
Foundation. If the Program does not specify a version number of the
GNU Affero General Public License, you may choose any version ever published
by the Free Software Foundation.
If the Program specifies that a proxy can decide which future
versions of the GNU Affero General Public License can be used, that proxy's
public statement of acceptance of a version permanently authorizes you
to choose that version for the Program.
Later license versions may give you additional or different
permissions. However, no additional obligations are imposed on any
author or copyright holder as a result of your choosing to follow a
later version.
15. Disclaimer of Warranty.
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
16. Limitation of Liability.
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
SUCH DAMAGES.
17. Interpretation of Sections 15 and 16.
If the disclaimer of warranty and limitation of liability provided
above cannot be given local legal effect according to their terms,
reviewing courts shall apply local law that most closely approximates
an absolute waiver of all civil liability in connection with the
Program, unless a warranty or assumption of liability accompanies a
copy of the Program in return for a fee.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
state the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
<one line to give the program's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
Also add information on how to contact you by electronic and paper mail.
If your software can interact with users remotely through a computer
network, you should also make sure that it provides a way for users to
get its source. For example, if your program is a web application, its
interface could display a "Source" link that leads users to an archive
of the code. There are many ways you could offer source, and different
solutions will be better for different programs; see section 13 for the
specific requirements.
You should also get your employer (if you work as a programmer) or school,
if any, to sign a "copyright disclaimer" for the program, if necessary.
For more information on this, and how to apply and follow the GNU AGPL, see
<https://www.gnu.org/licenses/>.
================================================
FILE: MANIFESTO
================================================
[Note: this is the Redis manifesto, for general information about
installing and running Redis read the README file instead.]
Redis Manifesto
===============
1 - A DSL for Abstract Data Types. Redis is a DSL (Domain Specific Language)
that manipulates abstract data types and implemented as a TCP daemon.
Commands manipulate a key space where keys are binary-safe strings and
values are different kinds of abstract data types. Every data type
represents an abstract version of a fundamental data structure. For instance
Redis Lists are an abstract representation of linked lists. In Redis, the
essence of a data type isn't just the kind of operations that the data types
support, but also the space and time complexity of the data type and the
operations performed upon it.
2 - Memory storage is #1. The Redis data set, composed of defined key-value
pairs, is primarily stored in the computer's memory. The amount of memory in
all kinds of computers, including entry-level servers, is increasing
significantly each year. Memory is fast, and allows Redis to have very
predictable performance. Datasets composed of 10k or 40 millions keys will
perform similarly. Complex data types like Redis Sorted Sets are easy to
implement and manipulate in memory with good performance, making Redis very
simple. Redis will continue to explore alternative options (where data can
be optionally stored on disk, say) but the main goal of the project remains
the development of an in-memory database.
3 - Fundamental data structures for a fundamental API. The Redis API is a direct
consequence of fundamental data structures. APIs can often be arbitrary but
not an API that resembles the nature of fundamental data structures. If we
ever meet intelligent life forms from another part of the universe, they'll
likely know, understand and recognize the same basic data structures we have
in our computer science books. Redis will avoid intermediate layers in API,
so that the complexity is obvious and more complex operations can be
performed as the sum of the basic operations.
4 - We believe in code efficiency. Computers get faster and faster, yet we
believe that abusing computing capabilities is not wise: the amount of
operations you can do for a given amount of energy remains anyway a
significant parameter: it allows to do more with less computers and, at
the same time, having a smaller environmental impact. Similarly Redis is
able to "scale down" to smaller devices. It is perfectly usable in a
Raspberry Pi and other small ARM based computers. Faster code having
just the layers of abstractions that are really needed will also result,
often, in more predictable performances. We think likewise about memory
usage, one of the fundamental goals of the Redis project is to
incrementally build more and more memory efficient data structures, so that
problems that were not approachable in RAM in the past will be perfectly
fine to handle in the future.
5 - Code is like a poem; it's not just something we write to reach some
practical result. Sometimes people that are far from the Redis philosophy
suggest using other code written by other authors (frequently in other
languages) in order to implement something Redis currently lacks. But to us
this is like if Shakespeare decided to end Enrico IV using the Paradiso from
the Divina Commedia. Is using any external code a bad idea? Not at all. Like
in "One Thousand and One Nights" smaller self contained stories are embedded
in a bigger story, we'll be happy to use beautiful self contained libraries
when needed. At the same time, when writing the Redis story we're trying to
write smaller stories that will fit in to other code.
6 - We're against complexity. We believe designing systems is a fight against
complexity. We'll accept to fight the complexity when it's worthwhile but
we'll try hard to recognize when a small feature is not worth 1000s of lines
of code. Most of the time the best way to fight complexity is by not
creating it at all. Complexity is also a form of lock-in: code that is
very hard to understand cannot be modified by users in an independent way
regardless of the license. One of the main Redis goals is to remain
understandable, enough for a single programmer to have a clear idea of how
it works in detail just reading the source code for a couple of weeks.
7 - Threading is not a silver bullet. Instead of making Redis threaded we
believe on the idea of an efficient (mostly) single threaded Redis core.
Multiple of such cores, that may run in the same computer or may run
in multiple computers, are abstracted away as a single big system by
higher order protocols and features: Redis Cluster and the upcoming
Redis Proxy are our main goals. A shared nothing approach is not just
much simpler (see the previous point in this document), is also optimal
in NUMA systems. In the specific case of Redis it allows for each instance
to have a more limited amount of data, making the Redis persist-by-fork
approach more sounding. In the future we may explore parallelism only for
I/O, which is the low hanging fruit: minimal complexity could provide an
improved single process experience.
8 - Two levels of API. The Redis API has two levels: 1) a subset of the API fits
naturally into a distributed version of Redis and 2) a more complex API that
supports multi-key operations. Both are useful if used judiciously but
there's no way to make the more complex multi-keys API distributed in an
opaque way without violating our other principles. We don't want to provide
the illusion of something that will work magically when actually it can't in
all cases. Instead we'll provide commands to quickly migrate keys from one
instance to another to perform multi-key operations and expose the
trade-offs to the user.
9 - We optimize for joy. We believe writing code is a lot of hard work, and the
only way it can be worth is by enjoying it. When there is no longer joy in
writing code, the best thing to do is stop. To prevent this, we'll avoid
taking paths that will make Redis less of a joy to develop.
10 - All the above points are put together in what we call opportunistic
programming: trying to get the most for the user with minimal increases
in complexity (hanging fruits). Solve 95% of the problem with 5% of the
code when it is acceptable. Avoid a fixed schedule but follow the flow of
user requests, inspiration, Redis internal readiness for certain features
(sometimes many past changes reach a critical point making a previously
complex feature very easy to obtain).
================================================
FILE: Makefile
================================================
# Top level makefile, the real stuff is at ./src/Makefile and in ./modules/Makefile
SUBDIRS = src
ifeq ($(BUILD_WITH_MODULES), yes)
ifeq ($(MAKECMDGOALS),32bit)
$(error BUILD_WITH_MODULES=yes is not supported on 32 bit systems)
endif
SUBDIRS += modules
endif
default: all
.DEFAULT:
for dir in $(SUBDIRS); do $(MAKE) -C $$dir $@; done
install:
for dir in $(SUBDIRS); do $(MAKE) -C $$dir $@; done
.PHONY: install
================================================
FILE: README.md
================================================
[](https://codecov.io/github/redis/redis)
This document serves as both a quick start guide to Redis and a detailed resource for building it from source.
- New to Redis? Start with [What is Redis](#what-is-redis) and [Getting Started](#getting-started)
- Ready to build from source? Jump to [Build Redis from Source](#build-redis-from-source)
- Want to contribute? See the [Code contributions](#code-contributions) section
and [CONTRIBUTING.md](./CONTRIBUTING.md)
- Looking for detailed documentation? Navigate to [redis.io/docs](https://redis.io/docs/)
## Table of contents
- [What is Redis?](#what-is-redis)
- [Key use cases](#key-use-cases)
- [Why choose Redis?](#why-choose-redis)
- [What is Redis Open Source?](#what-is-redis-open-source)
- [Getting started](#getting-started)
- [Redis starter projects](#redis-starter-projects)
- [Using Redis with client libraries](#using-redis-with-client-libraries)
- [Using Redis with redis-cli](#using-redis-with-redis-cli)
- [Using Redis with Redis Insight](#using-redis-with-redis-insight)
- [Redis data types, processing engines, and capabilities](#redis-data-types-processing-engines-and-capabilities)
- [Cloud hosted Redis](#cloud-hosted-redis)
- [Community](#community)
- [Build Redis from source](#build-redis-from-source)
- [Build and run Redis with all data structures - Ubuntu 20.04 (Focal)](#build-and-run-redis-with-all-data-structures---ubuntu-2004-focal)
- [Build and run Redis with all data structures - Ubuntu 22.04 (Jammy)](#build-and-run-redis-with-all-data-structures---ubuntu-2204-jammy)
- [Build and run Redis with all data structures - Ubuntu 24.04 (Noble)](#build-and-run-redis-with-all-data-structures---ubuntu-2404-noble)
- [Build and run Redis with all data structures - Debian 11 (Bullseye) / 12 (Bookworm)](#build-and-run-redis-with-all-data-structures---debian-11-bullseye--12-bookworm)
- [Build and run Redis with all data structures - AlmaLinux 8.10 / Rocky Linux 8.10](#build-and-run-redis-with-all-data-structures---almalinux-810--rocky-linux-810)
- [Build and run Redis with all data structures - AlmaLinux 9.5 / Rocky Linux 9.5](#build-and-run-redis-with-all-data-structures---almalinux-95--rocky-linux-95)
- [Build and run Redis with all data structures - macOS 13 (Ventura) and macOS 14 (Sonoma)](#build-and-run-redis-with-all-data-structures---macos-13-ventura-and-macos-14-sonoma)
- [Build and run Redis with all data structures - macOS 15 (Sequoia)](#build-and-run-redis-with-all-data-structures---macos-15-sequoia)
- [Building Redis - flags and general notes](#building-redis---flags-and-general-notes)
- [Fixing build problems with dependencies or cached build options](#fixing-build-problems-with-dependencies-or-cached-build-options)
- [Fixing problems building 32 bit binaries](#fixing-problems-building-32-bit-binaries)
- [Allocator](#allocator)
- [Monotonic clock](#monotonic-clock)
- [Verbose build](#verbose-build)
- [Running Redis with TLS](#running-redis-with-tls)
- [Code contributions](#code-contributions)
- [Redis Trademarks](#redis-trademarks)
## What is Redis?
For developers, who are building real-time data-driven applications, Redis is the preferred, fastest, and most feature-rich cache, data structure server, and document and vector query engine.
### Key use cases
Redis excels in various applications, including:
- **Caching:** Supports multiple eviction policies, key expiration, and hash-field expiration.
- **Distributed Session Store:** Offers flexible session data modeling (string, JSON, hash).
- **Data Structure Server:** Provides low-level data structures (strings, lists, sets, hashes, sorted sets, JSON, etc.) with high-level semantics (counters, queues, leaderboards, rate limiters) and supports transactions & scripting.
- **NoSQL Data Store:** Key-value, document, and time series data storage.
- **Search and Query Engine:** Indexing for hash/JSON documents, supporting vector search, full-text search, geospatial queries, ranking, and aggregations via Redis Query Engine.
- **Event Store & Message Broker:** Implements queues (lists), priority queues (sorted sets), event deduplication (sets), streams, and pub/sub with probabilistic stream processing capabilities.
- **Vector Store for GenAI:** Integrates with AI applications (e.g. LangGraph, mem0) for short-term memory, long-term memory, LLM response caching (semantic caching), and retrieval augmented generation (RAG).
- **Real-Time Analytics:** Powers personalization, recommendations, fraud detection, and risk assessment.
## Why choose Redis?
Redis is a popular choice for developers worldwide due to its combination of speed, flexibility, and rich feature set. Here's why people choose Redis for:
- **Performance:** Because Redis keeps data primarily in memory and uses efficient data structures, it achieves extremely low latency (often sub-millisecond) for both read and write operations. This makes it ideal for applications demanding real-time responsiveness.
- **Flexibility:** Redis isn't just a key-value store, it provides native support for a wide range of data structures and capabilities listed in [What is Redis?](#what-is-redis)
- **Extensibility:** Redis is not limited to the built-in data structures, it has a [modules API](https://redis.io/docs/latest/develop/reference/modules/) that makes it possible to extend Redis functionality and rapidly implement new Redis commands
- **Simplicity:** Redis has a simple, text-based protocol and [well-documented command set](https://redis.io/docs/latest/commands/)
- **Ubiquity:** Redis is battle tested in production workloads at a massive scale. There is a good chance you indirectly interact with Redis several times daily
- **Versatility**: Redis is the de facto standard for use cases such as:
- **Caching:** quickly access frequently used data without needing to query your primary database
- **Session management:** read and write user session data without hurting user experience or slowing down every API call
- **Querying, sorting, and analytics:** perform deduplication, full text search, and secondary indexing on in-memory data as fast as possible
- **Messaging and interservice communication:** job queues, message brokering, pub/sub, and streams for communicating between services
- **Vector operations:** Long-term and short-term LLM memory, RAG content retrieval, semantic caching, semantic routing, and vector similarity search
In summary, Redis provides a powerful, fast, and flexible toolkit for solving a wide variety of data management challenges. If you want to know more, here is a list of starting points:
- [**Introduction to Redis data types**](https://redis.io/docs/latest/develop/data-types/)
- [**The full list of Redis commands**](https://redis.io/commands/)
- [**Redis for AI**](https://redis.io/docs/latest/develop/ai/)
- [**Redis documentation**](https://redis.io/documentation/)
## What is Redis Open Source?
Redis Community Edition (Redis CE) was renamed Redis Open Source with the v8.0 release.
Redis Ltd. also offers [Redis Software](https://redis.io/enterprise/), a self-managed software with additional compliance, reliability, and resiliency for enterprise scaling,
and [Redis Cloud](https://redis.io/cloud/), a fully managed service integrated with Google Cloud, Azure, and AWS for production-ready apps.
Read more about the differences between Redis Open Source and Redis [here](https://redis.io/technology/advantages/).
## Getting started
If you want to get up and running with Redis quickly without needing to build from source, use one of the following methods:
- [**Redis Cloud**](https://cloud.redis.io/)
- [**Official Redis Docker images (Alpine/Debian)**](https://hub.docker.com/_/redis)
```sh
docker run -d -p 6379:6379 redis:latest
```
- **Redis binary distributions**
- [**Snap**](https://github.com/redis/redis-snap)
- [**Homebrew**](https://github.com/redis/homebrew-redis)
- [**RPM**](https://github.com/redis/redis-rpm)
- [**Debian**](https://github.com/redis/redis-debian)
- [**Redis quick start guides**](https://redis.io/docs/latest/develop/get-started/)
If you prefer to [build Redis from source](#build-redis-from-source) - see instructions below.
### Redis starter projects
To get started as quickly as possible in your language of choice, use one of the following starter projects:
- [**Python (redis-py)**](https://github.com/redis-developer/redis-starter-python)
- [**C#/.NET (NRedisStack/StackExchange.Redis)**](https://github.com/redis-developer/redis-starter-csharp)
- [**Go (go-redis)**](https://github.com/redis-developer/redis-starter-go)
- [**JavaScript (node-redis)**](https://github.com/redis-developer/redis-starter-js)
- [**Java/Spring (Jedis)**](https://github.com/redis-developer/redis-starter-java)
### Using Redis with client libraries
To connect your application to Redis, you will need a client library. Redis has documented client libraries in most popular languages, with community-supported client libraries in additional languages.
- [**Python (redis-py)**](https://redis.io/docs/latest/develop/clients/redis-py/)
- [**Python (RedisVL)**](https://redis.io/docs/latest/integrate/redisvl/)
- [**C#/.NET (NRedisStack/StackExchange.Redis)**](https://redis.io/docs/latest/develop/clients/dotnet/)
- [**JavaScript (node-redis)**](https://redis.io/docs/latest/develop/clients/nodejs/)
- [**Java (Jedis)**](https://redis.io/docs/latest/develop/clients/jedis/)
- [**Java (Lettuce)**](https://redis.io/docs/latest/develop/clients/lettuce/)
- [**Go (go-redis)**](https://redis.io/docs/latest/develop/clients/go/)
- [**PHP (Predis)**](https://redis.io/docs/latest/develop/clients/php/)
- [**C (hiredis)**](https://redis.io/docs/latest/develop/clients/hiredis/)
- [**Full list of client libraries**](https://redis.io/docs/latest/develop/clients/)
### Using Redis with redis-cli
[`redis-cli`](https://redis.io/docs/latest/develop/tools/cli/) is Redis' command line interface. It is available as part of all the binary distributions and when you build Redis from source.
You can start a redis-server instance, and then, in another terminal try the following:
```sh
cd src
./redis-cli
```
```text
redis> ping
PONG
redis> set foo bar
OK
redis> get foo
"bar"
redis> incr mycounter
(integer) 1
redis> incr mycounter
(integer) 2
redis>
```
### Using Redis with Redis Insight
For a more visual and user-friendly experience, use [Redis Insight](https://redis.io/docs/latest/develop/tools/insight/) - a tool that lets you explore data, design, develop, and optimize your applications while also serving as a platform for Redis education and onboarding. Redis Insight integrates [Redis Copilot](https://redis.io/chat), a natural language AI assistant that improves the experience when working with data and commands.
- [**Redis Insight documentation**](https://redis.io/docs/latest/develop/tools/insight/)
- [**Redis Insight GitHub repository**](https://github.com/RedisInsight/RedisInsight)
## Redis data types, processing engines, and capabilities
Redis provides a variety of data types, processing engines, and capabilities to support a wide range of use cases:
**Important:** Features marked with an asterisk (\*) require Redis to be compiled with the `BUILD_WITH_MODULES=yes` flag when [building Redis from source](#build-redis-from-source)
- [**String:**](https://redis.io/docs/latest/develop/data-types/strings) Sequences of bytes, including text, serialized objects, and binary arrays used for caching, counters, and bitwise operations.
- [**JSON:**](https://redis.io/docs/latest/develop/data-types/json/) Nested JSON documents that are indexed and searchable using JSONPath expressions and with [Redis Query Engine](https://redis.io/docs/latest/develop/interact/search-and-query/)
- [**Hash:**](https://redis.io/docs/latest/develop/data-types/hashes/) Field-value maps used to represent basic objects and store groupings of key-value pairs with support for [hash field expiration (TTL)](https://redis.io/docs/latest/develop/data-types/hashes/#field-expiration)
- [**Redis Query Engine:**](https://redis.io/docs/latest/develop/interact/search-and-query/) Use Redis as a document database, a vector database, a secondary index, and a search engine. Define indexes for hash and JSON documents and then use a rich query language for vector search, full-text search, geospatial queries, and aggregations.
- [**List:**](https://redis.io/docs/latest/develop/data-types/lists/) Linked lists of string values used as stacks, queues, and for queue management.
- [**Set:**](https://redis.io/docs/latest/develop/data-types/sets/) Unordered collection of unique strings used for tracking unique items, relations, and common set operations (intersections, unions, differences).
- [**Sorted set:**](https://redis.io/docs/latest/develop/data-types/sorted-sets/) Collection of unique strings ordered by an associated score used for leaderboards and rate limiters.
- [**Vector set (beta):**](https://redis.io/docs/latest/develop/data-types/vector-sets/) Collection of vector embeddings used for semantic similarity search, semantic caching, semantic routing, and Retrieval Augmented Generation (RAG).
- [**Geospatial indexes:**](https://redis.io/docs/latest/develop/data-types/geospatial/) Coordinates used for finding nearby points within a given radius or bounding box.
- [**Bitmap:**](https://redis.io/docs/latest/develop/data-types/bitmaps/) A set of bit-oriented operations defined on the string type used for efficient set representations and object permissions.
- [**Bitfield:**](https://redis.io/docs/latest/develop/data-types/bitfields/) Binary-encoded strings that let you set, increment, and get integer values of arbitrary bit length used for limited-range counters, numeric values, and multi-level object permissions such as role-based access control (RBAC)
- [**Hyperloglog:**](https://redis.io/docs/latest/develop/data-types/probabilistic/hyperloglogs/) A probabilistic data structure for approximating the cardinality of a set used for analytics such as counting unique visits, form fills, etc.
- \*[**Bloom filter:**](https://redis.io/docs/latest/develop/data-types/probabilistic/bloom-filter/) A probabilistic data structure to check if a given value is present in a set. Used for fraud detection, ad placement, and unique column (i.e. username/email/slug) checks.
- \*[**Cuckoo filter:**](https://redis.io/docs/latest/develop/data-types/probabilistic/cuckoo-filter/) A probabilistic data structure for checking if a given value is present in a set while also allowing limited counting and deletions used in targeted advertising and coupon code validation.
- \*[**t-digest:**](https://redis.io/docs/latest/develop/data-types/probabilistic/t-digest/) A probabilistic data structure used for estimating the percentile of a large dataset without having to store and order all the data points. Used for hardware/software monitoring, online gaming, network traffic monitoring, and predictive maintenance.
- \*[**Top-k:**](https://redis.io/docs/latest/develop/data-types/probabilistic/top-k/) A probabilistic data structure for finding the most frequent values in a data stream used for trend discovery.
- \*[**Count-min sketch:**](https://redis.io/docs/latest/develop/data-types/probabilistic/count-min-sketch/) A probabilistic data structure for estimating how many times a given value appears in a data stream used for sales volume calculations.
- [**Time series:**](https://redis.io/docs/latest/develop/data-types/timeseries/) Data points indexed in time order used for monitoring sensor data, asset
tracking, and predictive anal
gitextract_z3mis2y8/
├── .codespell/
│ ├── .codespellrc
│ ├── requirements.txt
│ └── wordlist.txt
├── .gitattributes
├── .github/
│ ├── ISSUE_TEMPLATE/
│ │ ├── bug_report.md
│ │ ├── crash_report.md
│ │ ├── feature_request.md
│ │ ├── other_stuff.md
│ │ └── question.md
│ ├── dependabot.yml
│ └── workflows/
│ ├── ci.yml
│ ├── codecov.yml
│ ├── codeql-analysis.yml
│ ├── coverity.yml
│ ├── daily.yml
│ ├── external.yml
│ ├── post-release-automation.yml
│ ├── redis_docs_sync.yaml
│ ├── reply-schemas-linter.yml
│ └── spell-check.yml
├── .gitignore
├── 00-RELEASENOTES
├── BUGS
├── CODE_OF_CONDUCT.md
├── CONTRIBUTING.md
├── INSTALL
├── LICENSE.txt
├── MANIFESTO
├── Makefile
├── README.md
├── REDISCONTRIBUTIONS.txt
├── SECURITY.md
├── TLS.md
├── codecov.yml
├── deps/
│ ├── Makefile
│ ├── README.md
│ ├── fpconv/
│ │ ├── LICENSE.txt
│ │ ├── Makefile
│ │ ├── README.md
│ │ ├── fpconv_dtoa.c
│ │ ├── fpconv_dtoa.h
│ │ └── fpconv_powers.h
│ ├── hdr_histogram/
│ │ ├── COPYING.txt
│ │ ├── LICENSE.txt
│ │ ├── Makefile
│ │ ├── README.md
│ │ ├── hdr_atomic.h
│ │ ├── hdr_histogram.c
│ │ ├── hdr_histogram.h
│ │ ├── hdr_redis_malloc.h
│ │ └── hdr_tests.h
│ ├── hiredis/
│ │ ├── .github/
│ │ │ ├── release-drafter-config.yml
│ │ │ └── workflows/
│ │ │ ├── build.yml
│ │ │ ├── release-drafter.yml
│ │ │ └── test.yml
│ │ ├── .gitignore
│ │ ├── .travis.yml
│ │ ├── CHANGELOG.md
│ │ ├── CMakeLists.txt
│ │ ├── COPYING
│ │ ├── Makefile
│ │ ├── README.md
│ │ ├── adapters/
│ │ │ ├── ae.h
│ │ │ ├── glib.h
│ │ │ ├── ivykis.h
│ │ │ ├── libev.h
│ │ │ ├── libevent.h
│ │ │ ├── libhv.h
│ │ │ ├── libsdevent.h
│ │ │ ├── libuv.h
│ │ │ ├── macosx.h
│ │ │ ├── poll.h
│ │ │ ├── qt.h
│ │ │ └── redismoduleapi.h
│ │ ├── alloc.c
│ │ ├── alloc.h
│ │ ├── appveyor.yml
│ │ ├── async.c
│ │ ├── async.h
│ │ ├── async_private.h
│ │ ├── dict.c
│ │ ├── dict.h
│ │ ├── examples/
│ │ │ ├── CMakeLists.txt
│ │ │ ├── example-ae.c
│ │ │ ├── example-glib.c
│ │ │ ├── example-ivykis.c
│ │ │ ├── example-libev.c
│ │ │ ├── example-libevent-ssl.c
│ │ │ ├── example-libevent.c
│ │ │ ├── example-libhv.c
│ │ │ ├── example-libsdevent.c
│ │ │ ├── example-libuv.c
│ │ │ ├── example-macosx.c
│ │ │ ├── example-poll.c
│ │ │ ├── example-push.c
│ │ │ ├── example-qt.cpp
│ │ │ ├── example-qt.h
│ │ │ ├── example-redismoduleapi.c
│ │ │ ├── example-ssl.c
│ │ │ └── example.c
│ │ ├── fmacros.h
│ │ ├── fuzzing/
│ │ │ └── format_command_fuzzer.c
│ │ ├── hiredis-config.cmake.in
│ │ ├── hiredis.c
│ │ ├── hiredis.h
│ │ ├── hiredis.pc.in
│ │ ├── hiredis.targets
│ │ ├── hiredis_ssl-config.cmake.in
│ │ ├── hiredis_ssl.h
│ │ ├── hiredis_ssl.pc.in
│ │ ├── net.c
│ │ ├── net.h
│ │ ├── read.c
│ │ ├── read.h
│ │ ├── sds.c
│ │ ├── sds.h
│ │ ├── sdsalloc.h
│ │ ├── sdscompat.h
│ │ ├── sockcompat.c
│ │ ├── sockcompat.h
│ │ ├── ssl.c
│ │ ├── test.c
│ │ ├── test.sh
│ │ └── win32.h
│ ├── jemalloc/
│ │ ├── .appveyor.yml
│ │ ├── .autom4te.cfg
│ │ ├── .cirrus.yml
│ │ ├── .clang-format
│ │ ├── .gitattributes
│ │ ├── .gitignore
│ │ ├── .travis.yml
│ │ ├── COPYING
│ │ ├── ChangeLog
│ │ ├── INSTALL.md
│ │ ├── Makefile.in
│ │ ├── README
│ │ ├── TUNING.md
│ │ ├── VERSION
│ │ ├── autogen.sh
│ │ ├── bin/
│ │ │ ├── jemalloc-config.in
│ │ │ ├── jemalloc.sh.in
│ │ │ └── jeprof.in
│ │ ├── build-aux/
│ │ │ ├── config.guess
│ │ │ ├── config.sub
│ │ │ └── install-sh
│ │ ├── config.stamp.in
│ │ ├── configure
│ │ ├── configure.ac
│ │ ├── doc/
│ │ │ ├── html.xsl.in
│ │ │ ├── jemalloc.xml.in
│ │ │ ├── manpages.xsl.in
│ │ │ └── stylesheet.xsl
│ │ ├── doc_internal/
│ │ │ └── PROFILING_INTERNALS.md
│ │ ├── include/
│ │ │ ├── jemalloc/
│ │ │ │ ├── internal/
│ │ │ │ │ ├── activity_callback.h
│ │ │ │ │ ├── arena_externs.h
│ │ │ │ │ ├── arena_inlines_a.h
│ │ │ │ │ ├── arena_inlines_b.h
│ │ │ │ │ ├── arena_stats.h
│ │ │ │ │ ├── arena_structs.h
│ │ │ │ │ ├── arena_types.h
│ │ │ │ │ ├── assert.h
│ │ │ │ │ ├── atomic.h
│ │ │ │ │ ├── atomic_c11.h
│ │ │ │ │ ├── atomic_gcc_atomic.h
│ │ │ │ │ ├── atomic_gcc_sync.h
│ │ │ │ │ ├── atomic_msvc.h
│ │ │ │ │ ├── background_thread_externs.h
│ │ │ │ │ ├── background_thread_inlines.h
│ │ │ │ │ ├── background_thread_structs.h
│ │ │ │ │ ├── base.h
│ │ │ │ │ ├── bin.h
│ │ │ │ │ ├── bin_info.h
│ │ │ │ │ ├── bin_stats.h
│ │ │ │ │ ├── bin_types.h
│ │ │ │ │ ├── bit_util.h
│ │ │ │ │ ├── bitmap.h
│ │ │ │ │ ├── buf_writer.h
│ │ │ │ │ ├── cache_bin.h
│ │ │ │ │ ├── ckh.h
│ │ │ │ │ ├── counter.h
│ │ │ │ │ ├── ctl.h
│ │ │ │ │ ├── decay.h
│ │ │ │ │ ├── div.h
│ │ │ │ │ ├── ecache.h
│ │ │ │ │ ├── edata.h
│ │ │ │ │ ├── edata_cache.h
│ │ │ │ │ ├── ehooks.h
│ │ │ │ │ ├── emap.h
│ │ │ │ │ ├── emitter.h
│ │ │ │ │ ├── eset.h
│ │ │ │ │ ├── exp_grow.h
│ │ │ │ │ ├── extent.h
│ │ │ │ │ ├── extent_dss.h
│ │ │ │ │ ├── extent_mmap.h
│ │ │ │ │ ├── fb.h
│ │ │ │ │ ├── fxp.h
│ │ │ │ │ ├── hash.h
│ │ │ │ │ ├── hook.h
│ │ │ │ │ ├── hpa.h
│ │ │ │ │ ├── hpa_hooks.h
│ │ │ │ │ ├── hpa_opts.h
│ │ │ │ │ ├── hpdata.h
│ │ │ │ │ ├── inspect.h
│ │ │ │ │ ├── jemalloc_internal_decls.h
│ │ │ │ │ ├── jemalloc_internal_defs.h.in
│ │ │ │ │ ├── jemalloc_internal_externs.h
│ │ │ │ │ ├── jemalloc_internal_includes.h
│ │ │ │ │ ├── jemalloc_internal_inlines_a.h
│ │ │ │ │ ├── jemalloc_internal_inlines_b.h
│ │ │ │ │ ├── jemalloc_internal_inlines_c.h
│ │ │ │ │ ├── jemalloc_internal_macros.h
│ │ │ │ │ ├── jemalloc_internal_types.h
│ │ │ │ │ ├── jemalloc_preamble.h.in
│ │ │ │ │ ├── large_externs.h
│ │ │ │ │ ├── lockedint.h
│ │ │ │ │ ├── log.h
│ │ │ │ │ ├── malloc_io.h
│ │ │ │ │ ├── mpsc_queue.h
│ │ │ │ │ ├── mutex.h
│ │ │ │ │ ├── mutex_prof.h
│ │ │ │ │ ├── nstime.h
│ │ │ │ │ ├── pa.h
│ │ │ │ │ ├── pac.h
│ │ │ │ │ ├── pages.h
│ │ │ │ │ ├── pai.h
│ │ │ │ │ ├── peak.h
│ │ │ │ │ ├── peak_event.h
│ │ │ │ │ ├── ph.h
│ │ │ │ │ ├── private_namespace.sh
│ │ │ │ │ ├── private_symbols.sh
│ │ │ │ │ ├── prng.h
│ │ │ │ │ ├── prof_data.h
│ │ │ │ │ ├── prof_externs.h
│ │ │ │ │ ├── prof_hook.h
│ │ │ │ │ ├── prof_inlines.h
│ │ │ │ │ ├── prof_log.h
│ │ │ │ │ ├── prof_recent.h
│ │ │ │ │ ├── prof_stats.h
│ │ │ │ │ ├── prof_structs.h
│ │ │ │ │ ├── prof_sys.h
│ │ │ │ │ ├── prof_types.h
│ │ │ │ │ ├── psset.h
│ │ │ │ │ ├── public_namespace.sh
│ │ │ │ │ ├── public_unnamespace.sh
│ │ │ │ │ ├── ql.h
│ │ │ │ │ ├── qr.h
│ │ │ │ │ ├── quantum.h
│ │ │ │ │ ├── rb.h
│ │ │ │ │ ├── rtree.h
│ │ │ │ │ ├── rtree_tsd.h
│ │ │ │ │ ├── safety_check.h
│ │ │ │ │ ├── san.h
│ │ │ │ │ ├── san_bump.h
│ │ │ │ │ ├── sc.h
│ │ │ │ │ ├── sec.h
│ │ │ │ │ ├── sec_opts.h
│ │ │ │ │ ├── seq.h
│ │ │ │ │ ├── slab_data.h
│ │ │ │ │ ├── smoothstep.h
│ │ │ │ │ ├── smoothstep.sh
│ │ │ │ │ ├── spin.h
│ │ │ │ │ ├── stats.h
│ │ │ │ │ ├── sz.h
│ │ │ │ │ ├── tcache_externs.h
│ │ │ │ │ ├── tcache_inlines.h
│ │ │ │ │ ├── tcache_structs.h
│ │ │ │ │ ├── tcache_types.h
│ │ │ │ │ ├── test_hooks.h
│ │ │ │ │ ├── thread_event.h
│ │ │ │ │ ├── ticker.h
│ │ │ │ │ ├── tsd.h
│ │ │ │ │ ├── tsd_generic.h
│ │ │ │ │ ├── tsd_malloc_thread_cleanup.h
│ │ │ │ │ ├── tsd_tls.h
│ │ │ │ │ ├── tsd_types.h
│ │ │ │ │ ├── tsd_win.h
│ │ │ │ │ ├── typed_list.h
│ │ │ │ │ ├── util.h
│ │ │ │ │ └── witness.h
│ │ │ │ ├── jemalloc.sh
│ │ │ │ ├── jemalloc_defs.h.in
│ │ │ │ ├── jemalloc_macros.h.in
│ │ │ │ ├── jemalloc_mangle.sh
│ │ │ │ ├── jemalloc_protos.h.in
│ │ │ │ ├── jemalloc_rename.sh
│ │ │ │ └── jemalloc_typedefs.h.in
│ │ │ └── msvc_compat/
│ │ │ ├── C99/
│ │ │ │ ├── stdbool.h
│ │ │ │ └── stdint.h
│ │ │ ├── strings.h
│ │ │ └── windows_extra.h
│ │ ├── jemalloc.pc.in
│ │ ├── m4/
│ │ │ └── ax_cxx_compile_stdcxx.m4
│ │ ├── msvc/
│ │ │ ├── ReadMe.txt
│ │ │ ├── jemalloc_vc2015.sln
│ │ │ ├── jemalloc_vc2017.sln
│ │ │ ├── projects/
│ │ │ │ ├── vc2015/
│ │ │ │ │ ├── jemalloc/
│ │ │ │ │ │ ├── jemalloc.vcxproj
│ │ │ │ │ │ └── jemalloc.vcxproj.filters
│ │ │ │ │ └── test_threads/
│ │ │ │ │ ├── test_threads.vcxproj
│ │ │ │ │ └── test_threads.vcxproj.filters
│ │ │ │ └── vc2017/
│ │ │ │ ├── jemalloc/
│ │ │ │ │ ├── jemalloc.vcxproj
│ │ │ │ │ └── jemalloc.vcxproj.filters
│ │ │ │ └── test_threads/
│ │ │ │ ├── test_threads.vcxproj
│ │ │ │ └── test_threads.vcxproj.filters
│ │ │ └── test_threads/
│ │ │ ├── test_threads.cpp
│ │ │ ├── test_threads.h
│ │ │ └── test_threads_main.cpp
│ │ ├── run_tests.sh
│ │ ├── scripts/
│ │ │ ├── check-formatting.sh
│ │ │ ├── freebsd/
│ │ │ │ ├── before_install.sh
│ │ │ │ ├── before_script.sh
│ │ │ │ └── script.sh
│ │ │ ├── gen_run_tests.py
│ │ │ ├── gen_travis.py
│ │ │ ├── linux/
│ │ │ │ └── before_install.sh
│ │ │ └── windows/
│ │ │ ├── before_install.sh
│ │ │ ├── before_script.sh
│ │ │ └── script.sh
│ │ ├── src/
│ │ │ ├── arena.c
│ │ │ ├── background_thread.c
│ │ │ ├── base.c
│ │ │ ├── bin.c
│ │ │ ├── bin_info.c
│ │ │ ├── bitmap.c
│ │ │ ├── buf_writer.c
│ │ │ ├── cache_bin.c
│ │ │ ├── ckh.c
│ │ │ ├── counter.c
│ │ │ ├── ctl.c
│ │ │ ├── decay.c
│ │ │ ├── div.c
│ │ │ ├── ecache.c
│ │ │ ├── edata.c
│ │ │ ├── edata_cache.c
│ │ │ ├── ehooks.c
│ │ │ ├── emap.c
│ │ │ ├── eset.c
│ │ │ ├── exp_grow.c
│ │ │ ├── extent.c
│ │ │ ├── extent_dss.c
│ │ │ ├── extent_mmap.c
│ │ │ ├── fxp.c
│ │ │ ├── hook.c
│ │ │ ├── hpa.c
│ │ │ ├── hpa_hooks.c
│ │ │ ├── hpdata.c
│ │ │ ├── inspect.c
│ │ │ ├── jemalloc.c
│ │ │ ├── jemalloc_cpp.cpp
│ │ │ ├── large.c
│ │ │ ├── log.c
│ │ │ ├── malloc_io.c
│ │ │ ├── mutex.c
│ │ │ ├── nstime.c
│ │ │ ├── pa.c
│ │ │ ├── pa_extra.c
│ │ │ ├── pac.c
│ │ │ ├── pages.c
│ │ │ ├── pai.c
│ │ │ ├── peak_event.c
│ │ │ ├── prof.c
│ │ │ ├── prof_data.c
│ │ │ ├── prof_log.c
│ │ │ ├── prof_recent.c
│ │ │ ├── prof_stats.c
│ │ │ ├── prof_sys.c
│ │ │ ├── psset.c
│ │ │ ├── rtree.c
│ │ │ ├── safety_check.c
│ │ │ ├── san.c
│ │ │ ├── san_bump.c
│ │ │ ├── sc.c
│ │ │ ├── sec.c
│ │ │ ├── stats.c
│ │ │ ├── sz.c
│ │ │ ├── tcache.c
│ │ │ ├── test_hooks.c
│ │ │ ├── thread_event.c
│ │ │ ├── ticker.c
│ │ │ ├── ticker.py
│ │ │ ├── tsd.c
│ │ │ ├── witness.c
│ │ │ └── zone.c
│ │ └── test/
│ │ ├── analyze/
│ │ │ ├── prof_bias.c
│ │ │ ├── rand.c
│ │ │ └── sizes.c
│ │ ├── include/
│ │ │ └── test/
│ │ │ ├── SFMT-alti.h
│ │ │ ├── SFMT-params.h
│ │ │ ├── SFMT-params11213.h
│ │ │ ├── SFMT-params1279.h
│ │ │ ├── SFMT-params132049.h
│ │ │ ├── SFMT-params19937.h
│ │ │ ├── SFMT-params216091.h
│ │ │ ├── SFMT-params2281.h
│ │ │ ├── SFMT-params4253.h
│ │ │ ├── SFMT-params44497.h
│ │ │ ├── SFMT-params607.h
│ │ │ ├── SFMT-params86243.h
│ │ │ ├── SFMT-sse2.h
│ │ │ ├── SFMT.h
│ │ │ ├── arena_util.h
│ │ │ ├── bench.h
│ │ │ ├── bgthd.h
│ │ │ ├── btalloc.h
│ │ │ ├── extent_hooks.h
│ │ │ ├── jemalloc_test.h.in
│ │ │ ├── jemalloc_test_defs.h.in
│ │ │ ├── math.h
│ │ │ ├── mq.h
│ │ │ ├── mtx.h
│ │ │ ├── nbits.h
│ │ │ ├── san.h
│ │ │ ├── sleep.h
│ │ │ ├── test.h
│ │ │ ├── thd.h
│ │ │ └── timer.h
│ │ ├── integration/
│ │ │ ├── MALLOCX_ARENA.c
│ │ │ ├── aligned_alloc.c
│ │ │ ├── allocated.c
│ │ │ ├── cpp/
│ │ │ │ ├── basic.cpp
│ │ │ │ ├── infallible_new_false.cpp
│ │ │ │ ├── infallible_new_false.sh
│ │ │ │ ├── infallible_new_true.cpp
│ │ │ │ └── infallible_new_true.sh
│ │ │ ├── extent.c
│ │ │ ├── extent.sh
│ │ │ ├── malloc.c
│ │ │ ├── mallocx.c
│ │ │ ├── mallocx.sh
│ │ │ ├── overflow.c
│ │ │ ├── posix_memalign.c
│ │ │ ├── rallocx.c
│ │ │ ├── sdallocx.c
│ │ │ ├── slab_sizes.c
│ │ │ ├── slab_sizes.sh
│ │ │ ├── smallocx.c
│ │ │ ├── smallocx.sh
│ │ │ ├── thread_arena.c
│ │ │ ├── thread_tcache_enabled.c
│ │ │ ├── xallocx.c
│ │ │ └── xallocx.sh
│ │ ├── src/
│ │ │ ├── SFMT.c
│ │ │ ├── btalloc.c
│ │ │ ├── btalloc_0.c
│ │ │ ├── btalloc_1.c
│ │ │ ├── math.c
│ │ │ ├── mtx.c
│ │ │ ├── sleep.c
│ │ │ ├── test.c
│ │ │ ├── thd.c
│ │ │ └── timer.c
│ │ ├── stress/
│ │ │ ├── batch_alloc.c
│ │ │ ├── fill_flush.c
│ │ │ ├── hookbench.c
│ │ │ ├── large_microbench.c
│ │ │ ├── mallctl.c
│ │ │ └── microbench.c
│ │ ├── test.sh.in
│ │ └── unit/
│ │ ├── SFMT.c
│ │ ├── a0.c
│ │ ├── arena_decay.c
│ │ ├── arena_decay.sh
│ │ ├── arena_reset.c
│ │ ├── arena_reset_prof.c
│ │ ├── arena_reset_prof.sh
│ │ ├── atomic.c
│ │ ├── background_thread.c
│ │ ├── background_thread_enable.c
│ │ ├── base.c
│ │ ├── batch_alloc.c
│ │ ├── batch_alloc.sh
│ │ ├── batch_alloc_prof.c
│ │ ├── batch_alloc_prof.sh
│ │ ├── binshard.c
│ │ ├── binshard.sh
│ │ ├── bit_util.c
│ │ ├── bitmap.c
│ │ ├── buf_writer.c
│ │ ├── cache_bin.c
│ │ ├── ckh.c
│ │ ├── counter.c
│ │ ├── decay.c
│ │ ├── div.c
│ │ ├── double_free.c
│ │ ├── double_free.h
│ │ ├── edata_cache.c
│ │ ├── emitter.c
│ │ ├── extent_quantize.c
│ │ ├── fb.c
│ │ ├── fork.c
│ │ ├── fxp.c
│ │ ├── hash.c
│ │ ├── hook.c
│ │ ├── hpa.c
│ │ ├── hpa_background_thread.c
│ │ ├── hpa_background_thread.sh
│ │ ├── hpdata.c
│ │ ├── huge.c
│ │ ├── inspect.c
│ │ ├── inspect.sh
│ │ ├── junk.c
│ │ ├── junk.sh
│ │ ├── junk_alloc.c
│ │ ├── junk_alloc.sh
│ │ ├── junk_free.c
│ │ ├── junk_free.sh
│ │ ├── log.c
│ │ ├── mallctl.c
│ │ ├── malloc_conf_2.c
│ │ ├── malloc_conf_2.sh
│ │ ├── malloc_io.c
│ │ ├── math.c
│ │ ├── mpsc_queue.c
│ │ ├── mq.c
│ │ ├── mtx.c
│ │ ├── nstime.c
│ │ ├── oversize_threshold.c
│ │ ├── pa.c
│ │ ├── pack.c
│ │ ├── pack.sh
│ │ ├── pages.c
│ │ ├── peak.c
│ │ ├── ph.c
│ │ ├── prng.c
│ │ ├── prof_accum.c
│ │ ├── prof_accum.sh
│ │ ├── prof_active.c
│ │ ├── prof_active.sh
│ │ ├── prof_gdump.c
│ │ ├── prof_gdump.sh
│ │ ├── prof_hook.c
│ │ ├── prof_hook.sh
│ │ ├── prof_idump.c
│ │ ├── prof_idump.sh
│ │ ├── prof_log.c
│ │ ├── prof_log.sh
│ │ ├── prof_mdump.c
│ │ ├── prof_mdump.sh
│ │ ├── prof_recent.c
│ │ ├── prof_recent.sh
│ │ ├── prof_reset.c
│ │ ├── prof_reset.sh
│ │ ├── prof_stats.c
│ │ ├── prof_stats.sh
│ │ ├── prof_sys_thread_name.c
│ │ ├── prof_sys_thread_name.sh
│ │ ├── prof_tctx.c
│ │ ├── prof_tctx.sh
│ │ ├── prof_thread_name.c
│ │ ├── prof_thread_name.sh
│ │ ├── psset.c
│ │ ├── ql.c
│ │ ├── qr.c
│ │ ├── rb.c
│ │ ├── retained.c
│ │ ├── rtree.c
│ │ ├── safety_check.c
│ │ ├── safety_check.sh
│ │ ├── san.c
│ │ ├── san.sh
│ │ ├── san_bump.c
│ │ ├── sc.c
│ │ ├── sec.c
│ │ ├── seq.c
│ │ ├── size_check.c
│ │ ├── size_check.sh
│ │ ├── size_classes.c
│ │ ├── slab.c
│ │ ├── smoothstep.c
│ │ ├── spin.c
│ │ ├── stats.c
│ │ ├── stats_print.c
│ │ ├── sz.c
│ │ ├── tcache_max.c
│ │ ├── tcache_max.sh
│ │ ├── test_hooks.c
│ │ ├── thread_event.c
│ │ ├── thread_event.sh
│ │ ├── ticker.c
│ │ ├── tsd.c
│ │ ├── uaf.c
│ │ ├── witness.c
│ │ ├── zero.c
│ │ ├── zero.sh
│ │ ├── zero_realloc_abort.c
│ │ ├── zero_realloc_abort.sh
│ │ ├── zero_realloc_alloc.c
│ │ ├── zero_realloc_alloc.sh
│ │ ├── zero_realloc_free.c
│ │ ├── zero_realloc_free.sh
│ │ ├── zero_reallocs.c
│ │ └── zero_reallocs.sh
│ ├── linenoise/
│ │ ├── .gitignore
│ │ ├── Makefile
│ │ ├── README.markdown
│ │ ├── example.c
│ │ ├── linenoise.c
│ │ └── linenoise.h
│ ├── lua/
│ │ ├── COPYRIGHT
│ │ ├── HISTORY
│ │ ├── INSTALL
│ │ ├── Makefile
│ │ ├── README
│ │ ├── doc/
│ │ │ ├── contents.html
│ │ │ ├── lua.1
│ │ │ ├── lua.css
│ │ │ ├── lua.html
│ │ │ ├── luac.1
│ │ │ ├── luac.html
│ │ │ ├── manual.css
│ │ │ ├── manual.html
│ │ │ └── readme.html
│ │ ├── etc/
│ │ │ ├── Makefile
│ │ │ ├── README
│ │ │ ├── all.c
│ │ │ ├── lua.hpp
│ │ │ ├── lua.pc
│ │ │ ├── luavs.bat
│ │ │ ├── min.c
│ │ │ ├── noparser.c
│ │ │ └── strict.lua
│ │ ├── src/
│ │ │ ├── Makefile
│ │ │ ├── fpconv.c
│ │ │ ├── fpconv.h
│ │ │ ├── lapi.c
│ │ │ ├── lapi.h
│ │ │ ├── lauxlib.c
│ │ │ ├── lauxlib.h
│ │ │ ├── lbaselib.c
│ │ │ ├── lcode.c
│ │ │ ├── lcode.h
│ │ │ ├── ldblib.c
│ │ │ ├── ldebug.c
│ │ │ ├── ldebug.h
│ │ │ ├── ldo.c
│ │ │ ├── ldo.h
│ │ │ ├── ldump.c
│ │ │ ├── lfunc.c
│ │ │ ├── lfunc.h
│ │ │ ├── lgc.c
│ │ │ ├── lgc.h
│ │ │ ├── linit.c
│ │ │ ├── liolib.c
│ │ │ ├── llex.c
│ │ │ ├── llex.h
│ │ │ ├── llimits.h
│ │ │ ├── lmathlib.c
│ │ │ ├── lmem.c
│ │ │ ├── lmem.h
│ │ │ ├── loadlib.c
│ │ │ ├── lobject.c
│ │ │ ├── lobject.h
│ │ │ ├── lopcodes.c
│ │ │ ├── lopcodes.h
│ │ │ ├── loslib.c
│ │ │ ├── lparser.c
│ │ │ ├── lparser.h
│ │ │ ├── lstate.c
│ │ │ ├── lstate.h
│ │ │ ├── lstring.c
│ │ │ ├── lstring.h
│ │ │ ├── lstrlib.c
│ │ │ ├── ltable.c
│ │ │ ├── ltable.h
│ │ │ ├── ltablib.c
│ │ │ ├── ltm.c
│ │ │ ├── ltm.h
│ │ │ ├── lua.c
│ │ │ ├── lua.h
│ │ │ ├── lua_bit.c
│ │ │ ├── lua_cjson.c
│ │ │ ├── lua_cmsgpack.c
│ │ │ ├── lua_struct.c
│ │ │ ├── luac.c
│ │ │ ├── luaconf.h
│ │ │ ├── lualib.h
│ │ │ ├── lundump.c
│ │ │ ├── lundump.h
│ │ │ ├── lvm.c
│ │ │ ├── lvm.h
│ │ │ ├── lzio.c
│ │ │ ├── lzio.h
│ │ │ ├── print.c
│ │ │ ├── strbuf.c
│ │ │ └── strbuf.h
│ │ └── test/
│ │ ├── README
│ │ ├── bisect.lua
│ │ ├── cf.lua
│ │ ├── echo.lua
│ │ ├── env.lua
│ │ ├── factorial.lua
│ │ ├── fib.lua
│ │ ├── fibfor.lua
│ │ ├── globals.lua
│ │ ├── hello.lua
│ │ ├── life.lua
│ │ ├── luac.lua
│ │ ├── printf.lua
│ │ ├── readonly.lua
│ │ ├── sieve.lua
│ │ ├── sort.lua
│ │ ├── table.lua
│ │ ├── trace-calls.lua
│ │ ├── trace-globals.lua
│ │ └── xd.lua
│ └── xxhash/
│ ├── .gitignore
│ ├── LICENSE
│ ├── Makefile
│ ├── build/
│ │ └── make/
│ │ ├── README.md
│ │ └── multiconf.make
│ ├── xxhash.c
│ └── xxhash.h
├── modules/
│ ├── Makefile
│ ├── common.mk
│ ├── redisbloom/
│ │ └── Makefile
│ ├── redisearch/
│ │ └── Makefile
│ ├── redisjson/
│ │ └── Makefile
│ ├── redistimeseries/
│ │ └── Makefile
│ └── vector-sets/
│ ├── .gitignore
│ ├── Makefile
│ ├── README.md
│ ├── commands.json
│ ├── examples/
│ │ ├── cli-tool/
│ │ │ ├── .gitignore
│ │ │ ├── README.md
│ │ │ └── cli.py
│ │ ├── glove-100/
│ │ │ ├── README
│ │ │ ├── insert.py
│ │ │ └── recall.py
│ │ └── movies/
│ │ ├── .gitignore
│ │ ├── README
│ │ └── insert.py
│ ├── expr.c
│ ├── fastjson.c
│ ├── fastjson_test.c
│ ├── hnsw.c
│ ├── hnsw.h
│ ├── mixer.h
│ ├── test.py
│ ├── tests/
│ │ ├── basic_commands.py
│ │ ├── basic_similarity.py
│ │ ├── bin_vectorization.py
│ │ ├── concurrent_vadd_cas_del_vsim.py
│ │ ├── concurrent_vsim_and_del.py
│ │ ├── debug_digest.py
│ │ ├── deletion.py
│ │ ├── dimension_validation.py
│ │ ├── epsilon.py
│ │ ├── evict_empty.py
│ │ ├── filter_expr.py
│ │ ├── filter_int.py
│ │ ├── large_scale.py
│ │ ├── memory_usage.py
│ │ ├── node_update.py
│ │ ├── persistence.py
│ │ ├── q8_similarity.py
│ │ ├── q8_vectorization.py
│ │ ├── reduce.py
│ │ ├── replication.py
│ │ ├── threading_config.py
│ │ ├── vadd_cas.py
│ │ ├── vemb.py
│ │ ├── vismember.py
│ │ ├── vrand-ping-pong.py
│ │ ├── vrandmember.py
│ │ ├── vrange.py
│ │ ├── vsim_duplicate_filter.py
│ │ ├── vsim_filter_error_leak.py
│ │ ├── vsim_limit_efsearch.py
│ │ └── with.py
│ ├── vset.c
│ ├── vset_config.c
│ ├── vset_config.h
│ └── w2v.c
├── redis-full.conf
├── redis.conf
├── runtest
├── runtest-cluster
├── runtest-moduleapi
├── runtest-sentinel
├── sentinel.conf
├── src/
│ ├── .gitignore
│ ├── Makefile
│ ├── acl.c
│ ├── adlist.c
│ ├── adlist.h
│ ├── ae.c
│ ├── ae.h
│ ├── ae_epoll.c
│ ├── ae_evport.c
│ ├── ae_kqueue.c
│ ├── ae_select.c
│ ├── anet.c
│ ├── anet.h
│ ├── aof.c
│ ├── asciilogo.h
│ ├── atomicvar.h
│ ├── bio.c
│ ├── bio.h
│ ├── bitops.c
│ ├── blocked.c
│ ├── call_reply.c
│ ├── call_reply.h
│ ├── childinfo.c
│ ├── chk.c
│ ├── chk.h
│ ├── cli_commands.c
│ ├── cli_commands.h
│ ├── cli_common.c
│ ├── cli_common.h
│ ├── cluster.c
│ ├── cluster.h
│ ├── cluster_asm.c
│ ├── cluster_asm.h
│ ├── cluster_legacy.c
│ ├── cluster_legacy.h
│ ├── cluster_slot_stats.c
│ ├── cluster_slot_stats.h
│ ├── commands/
│ │ ├── README.md
│ │ ├── acl-cat.json
│ │ ├── acl-deluser.json
│ │ ├── acl-dryrun.json
│ │ ├── acl-genpass.json
│ │ ├── acl-getuser.json
│ │ ├── acl-help.json
│ │ ├── acl-list.json
│ │ ├── acl-load.json
│ │ ├── acl-log.json
│ │ ├── acl-save.json
│ │ ├── acl-setuser.json
│ │ ├── acl-users.json
│ │ ├── acl-whoami.json
│ │ ├── acl.json
│ │ ├── append.json
│ │ ├── asking.json
│ │ ├── auth.json
│ │ ├── bgrewriteaof.json
│ │ ├── bgsave.json
│ │ ├── bitcount.json
│ │ ├── bitfield.json
│ │ ├── bitfield_ro.json
│ │ ├── bitop.json
│ │ ├── bitpos.json
│ │ ├── blmove.json
│ │ ├── blmpop.json
│ │ ├── blpop.json
│ │ ├── brpop.json
│ │ ├── brpoplpush.json
│ │ ├── bzmpop.json
│ │ ├── bzpopmax.json
│ │ ├── bzpopmin.json
│ │ ├── client-caching.json
│ │ ├── client-getname.json
│ │ ├── client-getredir.json
│ │ ├── client-help.json
│ │ ├── client-id.json
│ │ ├── client-info.json
│ │ ├── client-kill.json
│ │ ├── client-list.json
│ │ ├── client-no-evict.json
│ │ ├── client-no-touch.json
│ │ ├── client-pause.json
│ │ ├── client-reply.json
│ │ ├── client-setinfo.json
│ │ ├── client-setname.json
│ │ ├── client-tracking.json
│ │ ├── client-trackinginfo.json
│ │ ├── client-unblock.json
│ │ ├── client-unpause.json
│ │ ├── client.json
│ │ ├── cluster-addslots.json
│ │ ├── cluster-addslotsrange.json
│ │ ├── cluster-bumpepoch.json
│ │ ├── cluster-count-failure-reports.json
│ │ ├── cluster-countkeysinslot.json
│ │ ├── cluster-delslots.json
│ │ ├── cluster-delslotsrange.json
│ │ ├── cluster-failover.json
│ │ ├── cluster-flushslots.json
│ │ ├── cluster-forget.json
│ │ ├── cluster-getkeysinslot.json
│ │ ├── cluster-help.json
│ │ ├── cluster-info.json
│ │ ├── cluster-keyslot.json
│ │ ├── cluster-links.json
│ │ ├── cluster-meet.json
│ │ ├── cluster-migration.json
│ │ ├── cluster-myid.json
│ │ ├── cluster-myshardid.json
│ │ ├── cluster-nodes.json
│ │ ├── cluster-replicas.json
│ │ ├── cluster-replicate.json
│ │ ├── cluster-reset.json
│ │ ├── cluster-saveconfig.json
│ │ ├── cluster-set-config-epoch.json
│ │ ├── cluster-setslot.json
│ │ ├── cluster-shards.json
│ │ ├── cluster-slaves.json
│ │ ├── cluster-slot-stats.json
│ │ ├── cluster-slots.json
│ │ ├── cluster-syncslots.json
│ │ ├── cluster.json
│ │ ├── command-count.json
│ │ ├── command-docs.json
│ │ ├── command-getkeys.json
│ │ ├── command-getkeysandflags.json
│ │ ├── command-help.json
│ │ ├── command-info.json
│ │ ├── command-list.json
│ │ ├── command.json
│ │ ├── config-get.json
│ │ ├── config-help.json
│ │ ├── config-resetstat.json
│ │ ├── config-rewrite.json
│ │ ├── config-set.json
│ │ ├── config.json
│ │ ├── copy.json
│ │ ├── dbsize.json
│ │ ├── debug.json
│ │ ├── decr.json
│ │ ├── decrby.json
│ │ ├── del.json
│ │ ├── delex.json
│ │ ├── digest.json
│ │ ├── discard.json
│ │ ├── dump.json
│ │ ├── echo.json
│ │ ├── eval.json
│ │ ├── eval_ro.json
│ │ ├── evalsha.json
│ │ ├── evalsha_ro.json
│ │ ├── exec.json
│ │ ├── exists.json
│ │ ├── expire.json
│ │ ├── expireat.json
│ │ ├── expiretime.json
│ │ ├── failover.json
│ │ ├── fcall.json
│ │ ├── fcall_ro.json
│ │ ├── flushall.json
│ │ ├── flushdb.json
│ │ ├── function-delete.json
│ │ ├── function-dump.json
│ │ ├── function-flush.json
│ │ ├── function-help.json
│ │ ├── function-kill.json
│ │ ├── function-list.json
│ │ ├── function-load.json
│ │ ├── function-restore.json
│ │ ├── function-stats.json
│ │ ├── function.json
│ │ ├── gcra.json
│ │ ├── gcrasetvalue.json
│ │ ├── geoadd.json
│ │ ├── geodist.json
│ │ ├── geohash.json
│ │ ├── geopos.json
│ │ ├── georadius.json
│ │ ├── georadius_ro.json
│ │ ├── georadiusbymember.json
│ │ ├── georadiusbymember_ro.json
│ │ ├── geosearch.json
│ │ ├── geosearchstore.json
│ │ ├── get.json
│ │ ├── getbit.json
│ │ ├── getdel.json
│ │ ├── getex.json
│ │ ├── getrange.json
│ │ ├── getset.json
│ │ ├── hdel.json
│ │ ├── hello.json
│ │ ├── hexists.json
│ │ ├── hexpire.json
│ │ ├── hexpireat.json
│ │ ├── hexpiretime.json
│ │ ├── hget.json
│ │ ├── hgetall.json
│ │ ├── hgetdel.json
│ │ ├── hgetex.json
│ │ ├── hincrby.json
│ │ ├── hincrbyfloat.json
│ │ ├── hkeys.json
│ │ ├── hlen.json
│ │ ├── hmget.json
│ │ ├── hmset.json
│ │ ├── hotkeys-get.json
│ │ ├── hotkeys-help.json
│ │ ├── hotkeys-reset.json
│ │ ├── hotkeys-start.json
│ │ ├── hotkeys-stop.json
│ │ ├── hotkeys.json
│ │ ├── hpersist.json
│ │ ├── hpexpire.json
│ │ ├── hpexpireat.json
│ │ ├── hpexpiretime.json
│ │ ├── hpttl.json
│ │ ├── hrandfield.json
│ │ ├── hscan.json
│ │ ├── hset.json
│ │ ├── hsetex.json
│ │ ├── hsetnx.json
│ │ ├── hstrlen.json
│ │ ├── httl.json
│ │ ├── hvals.json
│ │ ├── incr.json
│ │ ├── incrby.json
│ │ ├── incrbyfloat.json
│ │ ├── info.json
│ │ ├── keys.json
│ │ ├── lastsave.json
│ │ ├── latency-doctor.json
│ │ ├── latency-graph.json
│ │ ├── latency-help.json
│ │ ├── latency-histogram.json
│ │ ├── latency-history.json
│ │ ├── latency-latest.json
│ │ ├── latency-reset.json
│ │ ├── latency.json
│ │ ├── lcs.json
│ │ ├── lindex.json
│ │ ├── linsert.json
│ │ ├── llen.json
│ │ ├── lmove.json
│ │ ├── lmpop.json
│ │ ├── lolwut.json
│ │ ├── lpop.json
│ │ ├── lpos.json
│ │ ├── lpush.json
│ │ ├── lpushx.json
│ │ ├── lrange.json
│ │ ├── lrem.json
│ │ ├── lset.json
│ │ ├── ltrim.json
│ │ ├── memory-doctor.json
│ │ ├── memory-help.json
│ │ ├── memory-malloc-stats.json
│ │ ├── memory-purge.json
│ │ ├── memory-stats.json
│ │ ├── memory-usage.json
│ │ ├── memory.json
│ │ ├── mget.json
│ │ ├── migrate.json
│ │ ├── module-help.json
│ │ ├── module-list.json
│ │ ├── module-load.json
│ │ ├── module-loadex.json
│ │ ├── module-unload.json
│ │ ├── module.json
│ │ ├── monitor.json
│ │ ├── move.json
│ │ ├── mset.json
│ │ ├── msetex.json
│ │ ├── msetnx.json
│ │ ├── multi.json
│ │ ├── object-encoding.json
│ │ ├── object-freq.json
│ │ ├── object-help.json
│ │ ├── object-idletime.json
│ │ ├── object-refcount.json
│ │ ├── object.json
│ │ ├── persist.json
│ │ ├── pexpire.json
│ │ ├── pexpireat.json
│ │ ├── pexpiretime.json
│ │ ├── pfadd.json
│ │ ├── pfcount.json
│ │ ├── pfdebug.json
│ │ ├── pfmerge.json
│ │ ├── pfselftest.json
│ │ ├── ping.json
│ │ ├── psetex.json
│ │ ├── psubscribe.json
│ │ ├── psync.json
│ │ ├── pttl.json
│ │ ├── publish.json
│ │ ├── pubsub-channels.json
│ │ ├── pubsub-help.json
│ │ ├── pubsub-numpat.json
│ │ ├── pubsub-numsub.json
│ │ ├── pubsub-shardchannels.json
│ │ ├── pubsub-shardnumsub.json
│ │ ├── pubsub.json
│ │ ├── punsubscribe.json
│ │ ├── quit.json
│ │ ├── randomkey.json
│ │ ├── readonly.json
│ │ ├── readwrite.json
│ │ ├── rename.json
│ │ ├── renamenx.json
│ │ ├── replconf.json
│ │ ├── replicaof.json
│ │ ├── reset.json
│ │ ├── restore-asking.json
│ │ ├── restore.json
│ │ ├── role.json
│ │ ├── rpop.json
│ │ ├── rpoplpush.json
│ │ ├── rpush.json
│ │ ├── rpushx.json
│ │ ├── sadd.json
│ │ ├── save.json
│ │ ├── scan.json
│ │ ├── scard.json
│ │ ├── script-debug.json
│ │ ├── script-exists.json
│ │ ├── script-flush.json
│ │ ├── script-help.json
│ │ ├── script-kill.json
│ │ ├── script-load.json
│ │ ├── script.json
│ │ ├── sdiff.json
│ │ ├── sdiffstore.json
│ │ ├── select.json
│ │ ├── sentinel-ckquorum.json
│ │ ├── sentinel-config.json
│ │ ├── sentinel-debug.json
│ │ ├── sentinel-failover.json
│ │ ├── sentinel-flushconfig.json
│ │ ├── sentinel-get-master-addr-by-name.json
│ │ ├── sentinel-help.json
│ │ ├── sentinel-info-cache.json
│ │ ├── sentinel-is-master-down-by-addr.json
│ │ ├── sentinel-master.json
│ │ ├── sentinel-masters.json
│ │ ├── sentinel-monitor.json
│ │ ├── sentinel-myid.json
│ │ ├── sentinel-pending-scripts.json
│ │ ├── sentinel-remove.json
│ │ ├── sentinel-replicas.json
│ │ ├── sentinel-reset.json
│ │ ├── sentinel-sentinels.json
│ │ ├── sentinel-set.json
│ │ ├── sentinel-simulate-failure.json
│ │ ├── sentinel-slaves.json
│ │ ├── sentinel.json
│ │ ├── set.json
│ │ ├── setbit.json
│ │ ├── setex.json
│ │ ├── setnx.json
│ │ ├── setrange.json
│ │ ├── sflush.json
│ │ ├── shutdown.json
│ │ ├── sinter.json
│ │ ├── sintercard.json
│ │ ├── sinterstore.json
│ │ ├── sismember.json
│ │ ├── slaveof.json
│ │ ├── slowlog-get.json
│ │ ├── slowlog-help.json
│ │ ├── slowlog-len.json
│ │ ├── slowlog-reset.json
│ │ ├── slowlog.json
│ │ ├── smembers.json
│ │ ├── smismember.json
│ │ ├── smove.json
│ │ ├── sort.json
│ │ ├── sort_ro.json
│ │ ├── spop.json
│ │ ├── spublish.json
│ │ ├── srandmember.json
│ │ ├── srem.json
│ │ ├── sscan.json
│ │ ├── ssubscribe.json
│ │ ├── strlen.json
│ │ ├── subscribe.json
│ │ ├── substr.json
│ │ ├── sunion.json
│ │ ├── sunionstore.json
│ │ ├── sunsubscribe.json
│ │ ├── swapdb.json
│ │ ├── sync.json
│ │ ├── time.json
│ │ ├── touch.json
│ │ ├── trimslots.json
│ │ ├── ttl.json
│ │ ├── type.json
│ │ ├── unlink.json
│ │ ├── unsubscribe.json
│ │ ├── unwatch.json
│ │ ├── wait.json
│ │ ├── waitaof.json
│ │ ├── watch.json
│ │ ├── xack.json
│ │ ├── xackdel.json
│ │ ├── xadd.json
│ │ ├── xautoclaim.json
│ │ ├── xcfgset.json
│ │ ├── xclaim.json
│ │ ├── xdel.json
│ │ ├── xdelex.json
│ │ ├── xgroup-create.json
│ │ ├── xgroup-createconsumer.json
│ │ ├── xgroup-delconsumer.json
│ │ ├── xgroup-destroy.json
│ │ ├── xgroup-help.json
│ │ ├── xgroup-setid.json
│ │ ├── xgroup.json
│ │ ├── xidmprecord.json
│ │ ├── xinfo-consumers.json
│ │ ├── xinfo-groups.json
│ │ ├── xinfo-help.json
│ │ ├── xinfo-stream.json
│ │ ├── xinfo.json
│ │ ├── xlen.json
│ │ ├── xnack.json
│ │ ├── xpending.json
│ │ ├── xrange.json
│ │ ├── xread.json
│ │ ├── xreadgroup.json
│ │ ├── xrevrange.json
│ │ ├── xsetid.json
│ │ ├── xtrim.json
│ │ ├── zadd.json
│ │ ├── zcard.json
│ │ ├── zcount.json
│ │ ├── zdiff.json
│ │ ├── zdiffstore.json
│ │ ├── zincrby.json
│ │ ├── zinter.json
│ │ ├── zintercard.json
│ │ ├── zinterstore.json
│ │ ├── zlexcount.json
│ │ ├── zmpop.json
│ │ ├── zmscore.json
│ │ ├── zpopmax.json
│ │ ├── zpopmin.json
│ │ ├── zrandmember.json
│ │ ├── zrange.json
│ │ ├── zrangebylex.json
│ │ ├── zrangebyscore.json
│ │ ├── zrangestore.json
│ │ ├── zrank.json
│ │ ├── zrem.json
│ │ ├── zremrangebylex.json
│ │ ├── zremrangebyrank.json
│ │ ├── zremrangebyscore.json
│ │ ├── zrevrange.json
│ │ ├── zrevrangebylex.json
│ │ ├── zrevrangebyscore.json
│ │ ├── zrevrank.json
│ │ ├── zscan.json
│ │ ├── zscore.json
│ │ ├── zunion.json
│ │ └── zunionstore.json
│ ├── commands.c
│ ├── commands.def
│ ├── commands.h
│ ├── config.c
│ ├── config.h
│ ├── connection.c
│ ├── connection.h
│ ├── connhelpers.h
│ ├── crc16.c
│ ├── crc16_slottable.h
│ ├── crc64.c
│ ├── crc64.h
│ ├── crccombine.c
│ ├── crccombine.h
│ ├── crcspeed.c
│ ├── crcspeed.h
│ ├── db.c
│ ├── debug.c
│ ├── debugmacro.h
│ ├── defrag.c
│ ├── dict.c
│ ├── dict.h
│ ├── ebuckets.c
│ ├── ebuckets.h
│ ├── endianconv.c
│ ├── endianconv.h
│ ├── entry.c
│ ├── entry.h
│ ├── estore.c
│ ├── estore.h
│ ├── eval.c
│ ├── eventnotifier.c
│ ├── eventnotifier.h
│ ├── evict.c
│ ├── expire.c
│ ├── fast_float_strtod.c
│ ├── fast_float_strtod.h
│ ├── fmacros.h
│ ├── fmtargs.h
│ ├── function_lua.c
│ ├── functions.c
│ ├── functions.h
│ ├── fwtree.c
│ ├── fwtree.h
│ ├── gcra.c
│ ├── geo.c
│ ├── geo.h
│ ├── geohash.c
│ ├── geohash.h
│ ├── geohash_helper.c
│ ├── geohash_helper.h
│ ├── hotkeys.c
│ ├── hyperloglog.c
│ ├── intset.c
│ ├── intset.h
│ ├── iothread.c
│ ├── keymeta.c
│ ├── keymeta.h
│ ├── kvstore.c
│ ├── kvstore.h
│ ├── latency.c
│ ├── latency.h
│ ├── lazyfree.c
│ ├── listpack.c
│ ├── listpack.h
│ ├── listpack_malloc.h
│ ├── localtime.c
│ ├── logreqres.c
│ ├── lolwut.c
│ ├── lolwut.h
│ ├── lolwut5.c
│ ├── lolwut6.c
│ ├── lolwut8.c
│ ├── lzf.h
│ ├── lzfP.h
│ ├── lzf_c.c
│ ├── lzf_d.c
│ ├── memory_prefetch.c
│ ├── memory_prefetch.h
│ ├── memtest.c
│ ├── mkreleasehdr.sh
│ ├── module.c
│ ├── modules/
│ │ ├── .gitignore
│ │ ├── Makefile
│ │ ├── helloacl.c
│ │ ├── helloblock.c
│ │ ├── hellocluster.c
│ │ ├── hellodict.c
│ │ ├── hellohook.c
│ │ ├── hellotimer.c
│ │ ├── hellotype.c
│ │ └── helloworld.c
│ ├── monotonic.c
│ ├── monotonic.h
│ ├── mstr.c
│ ├── mstr.h
│ ├── mt19937-64.c
│ ├── mt19937-64.h
│ ├── multi.c
│ ├── networking.c
│ ├── notify.c
│ ├── object.c
│ ├── object.h
│ ├── pqsort.c
│ ├── pqsort.h
│ ├── pubsub.c
│ ├── quicklist.c
│ ├── quicklist.h
│ ├── rand.c
│ ├── rand.h
│ ├── rax.c
│ ├── rax.h
│ ├── rax_malloc.h
│ ├── rdb.c
│ ├── rdb.h
│ ├── redis-benchmark.c
│ ├── redis-check-aof.c
│ ├── redis-check-rdb.c
│ ├── redis-cli.c
│ ├── redis-trib.rb
│ ├── redisassert.c
│ ├── redisassert.h
│ ├── redismodule.h
│ ├── release.c
│ ├── replication.c
│ ├── resp_parser.c
│ ├── resp_parser.h
│ ├── rio.c
│ ├── rio.h
│ ├── script.c
│ ├── script.h
│ ├── script_lua.c
│ ├── script_lua.h
│ ├── sds.c
│ ├── sds.h
│ ├── sdsalloc.h
│ ├── sentinel.c
│ ├── server.c
│ ├── server.h
│ ├── setcpuaffinity.c
│ ├── setproctitle.c
│ ├── sha1.c
│ ├── sha1.h
│ ├── sha256.c
│ ├── sha256.h
│ ├── siphash.c
│ ├── slowlog.c
│ ├── slowlog.h
│ ├── socket.c
│ ├── solarisfixes.h
│ ├── sort.c
│ ├── sparkline.c
│ ├── sparkline.h
│ ├── stream.h
│ ├── strl.c
│ ├── syncio.c
│ ├── syscheck.c
│ ├── syscheck.h
│ ├── t_hash.c
│ ├── t_list.c
│ ├── t_set.c
│ ├── t_stream.c
│ ├── t_string.c
│ ├── t_zset.c
│ ├── testhelp.h
│ ├── threads_mngr.c
│ ├── threads_mngr.h
│ ├── timeout.c
│ ├── tls.c
│ ├── tracking.c
│ ├── tsan.sup
│ ├── unix.c
│ ├── util.c
│ ├── util.h
│ ├── valgrind.sup
│ ├── vector.c
│ ├── vector.h
│ ├── version.h
│ ├── ziplist.c
│ ├── ziplist.h
│ ├── zipmap.c
│ ├── zipmap.h
│ ├── zmalloc.c
│ └── zmalloc.h
├── tests/
│ ├── README.md
│ ├── assets/
│ │ ├── corrupt_empty_keys.rdb
│ │ ├── corrupt_ziplist.rdb
│ │ ├── default.conf
│ │ ├── encodings.rdb
│ │ ├── hash-ziplist.rdb
│ │ ├── hash-zipmap.rdb
│ │ ├── list-quicklist.rdb
│ │ ├── minimal.conf
│ │ ├── nodefaultuser.acl
│ │ ├── rdb-preamble.aof
│ │ ├── scriptbackup.rdb
│ │ ├── test_cli_hint_suite.txt
│ │ ├── user.acl
│ │ ├── userwithselectors.acl
│ │ └── zset-ziplist.rdb
│ ├── cluster/
│ │ ├── cluster.tcl
│ │ ├── run.tcl
│ │ ├── tests/
│ │ │ ├── 00-base.tcl
│ │ │ ├── 01-faildet.tcl
│ │ │ ├── 02-failover.tcl
│ │ │ ├── 03-failover-loop.tcl
│ │ │ ├── 04-resharding.tcl
│ │ │ ├── 05-slave-selection.tcl
│ │ │ ├── 06-slave-stop-cond.tcl
│ │ │ ├── 07-replica-migration.tcl
│ │ │ ├── 08-update-msg.tcl
│ │ │ ├── 09-pubsub.tcl
│ │ │ ├── 10-manual-failover.tcl
│ │ │ ├── 11-manual-takeover.tcl
│ │ │ ├── 12-replica-migration-2.tcl
│ │ │ ├── 12.1-replica-migration-3.tcl
│ │ │ ├── 13-no-failover-option.tcl
│ │ │ ├── 14-consistency-check.tcl
│ │ │ ├── 15-cluster-slots.tcl
│ │ │ ├── 16-transactions-on-replica.tcl
│ │ │ ├── 17-diskless-load-swapdb.tcl
│ │ │ ├── 18-info.tcl
│ │ │ ├── 19-cluster-nodes-slots.tcl
│ │ │ ├── 20-half-migrated-slot.tcl
│ │ │ ├── 21-many-slot-migration.tcl
│ │ │ ├── 22-replica-in-sync.tcl
│ │ │ ├── 25-pubsubshard-slot-migration.tcl
│ │ │ ├── 26-pubsubshard.tcl
│ │ │ ├── 28-cluster-shards.tcl
│ │ │ ├── 29-slot-migration-response.tcl
│ │ │ ├── helpers/
│ │ │ │ └── onlydots.tcl
│ │ │ └── includes/
│ │ │ ├── init-tests.tcl
│ │ │ └── utils.tcl
│ │ └── tmp/
│ │ └── .gitignore
│ ├── helpers/
│ │ ├── bg_block_op.tcl
│ │ ├── bg_complex_data.tcl
│ │ ├── fake_redis_node.tcl
│ │ └── gen_write_load.tcl
│ ├── instances.tcl
│ ├── integration/
│ │ ├── aof-multi-part.tcl
│ │ ├── aof-race.tcl
│ │ ├── aof.tcl
│ │ ├── block-repl.tcl
│ │ ├── convert-ziplist-hash-on-load.tcl
│ │ ├── convert-ziplist-zset-on-load.tcl
│ │ ├── convert-zipmap-hash-on-load.tcl
│ │ ├── corrupt-dump-fuzzer.tcl
│ │ ├── corrupt-dump.tcl
│ │ ├── dismiss-mem.tcl
│ │ ├── failover.tcl
│ │ ├── logging.tcl
│ │ ├── psync2-master-restart.tcl
│ │ ├── psync2-pingoff.tcl
│ │ ├── psync2-reg.tcl
│ │ ├── psync2.tcl
│ │ ├── rdb.tcl
│ │ ├── redis-benchmark.tcl
│ │ ├── redis-cli.tcl
│ │ ├── replication-2.tcl
│ │ ├── replication-3.tcl
│ │ ├── replication-4.tcl
│ │ ├── replication-buffer.tcl
│ │ ├── replication-iothreads.tcl
│ │ ├── replication-psync.tcl
│ │ ├── replication-rdbchannel.tcl
│ │ ├── replication.tcl
│ │ └── shutdown.tcl
│ ├── modules/
│ │ ├── Makefile
│ │ ├── aclcheck.c
│ │ ├── atomicslotmigration.c
│ │ ├── auth.c
│ │ ├── basics.c
│ │ ├── blockedclient.c
│ │ ├── blockonbackground.c
│ │ ├── blockonkeys.c
│ │ ├── cmdintrospection.c
│ │ ├── commandfilter.c
│ │ ├── configaccess.c
│ │ ├── crash.c
│ │ ├── datatype.c
│ │ ├── datatype2.c
│ │ ├── defragtest.c
│ │ ├── eventloop.c
│ │ ├── fork.c
│ │ ├── getchannels.c
│ │ ├── getkeys.c
│ │ ├── hash.c
│ │ ├── hooks.c
│ │ ├── infotest.c
│ │ ├── internalsecret.c
│ │ ├── keymeta_notify.c
│ │ ├── keyspace_events.c
│ │ ├── keyspecs.c
│ │ ├── list.c
│ │ ├── mallocsize.c
│ │ ├── misc.c
│ │ ├── moduleauthtwo.c
│ │ ├── moduleconfigs.c
│ │ ├── moduleconfigstwo.c
│ │ ├── postnotifications.c
│ │ ├── propagate.c
│ │ ├── publish.c
│ │ ├── rdbloadsave.c
│ │ ├── reply.c
│ │ ├── scan.c
│ │ ├── stream.c
│ │ ├── subcommands.c
│ │ ├── test_keymeta.c
│ │ ├── test_lazyfree.c
│ │ ├── testrdb.c
│ │ ├── timer.c
│ │ ├── usercall.c
│ │ └── zset.c
│ ├── sentinel/
│ │ ├── run.tcl
│ │ ├── tests/
│ │ │ ├── 00-base.tcl
│ │ │ ├── 01-conf-update.tcl
│ │ │ ├── 02-slaves-reconf.tcl
│ │ │ ├── 03-runtime-reconf.tcl
│ │ │ ├── 04-slave-selection.tcl
│ │ │ ├── 05-manual.tcl
│ │ │ ├── 06-ckquorum.tcl
│ │ │ ├── 07-down-conditions.tcl
│ │ │ ├── 08-hostname-conf.tcl
│ │ │ ├── 09-acl-support.tcl
│ │ │ ├── 10-replica-priority.tcl
│ │ │ ├── 11-port-0.tcl
│ │ │ ├── 12-master-reboot.tcl
│ │ │ ├── 13-info-command.tcl
│ │ │ ├── 14-debug-command.tcl
│ │ │ ├── 15-config-set-config-get.tcl
│ │ │ ├── helpers/
│ │ │ │ └── check_leaked_fds.tcl
│ │ │ └── includes/
│ │ │ ├── init-tests.tcl
│ │ │ ├── sentinel.conf
│ │ │ ├── start-init-tests.tcl
│ │ │ └── utils.tcl
│ │ └── tmp/
│ │ └── .gitignore
│ ├── support/
│ │ ├── aofmanifest.tcl
│ │ ├── benchmark.tcl
│ │ ├── cli.tcl
│ │ ├── cluster.tcl
│ │ ├── cluster_util.tcl
│ │ ├── redis.tcl
│ │ ├── response_transformers.tcl
│ │ ├── server.tcl
│ │ ├── test.tcl
│ │ ├── tmpfile.tcl
│ │ └── util.tcl
│ ├── test_helper.tcl
│ ├── unit/
│ │ ├── acl-v2.tcl
│ │ ├── acl.tcl
│ │ ├── aofrw.tcl
│ │ ├── auth.tcl
│ │ ├── bitfield.tcl
│ │ ├── bitops.tcl
│ │ ├── client-eviction.tcl
│ │ ├── cluster/
│ │ │ ├── announced-endpoints.tcl
│ │ │ ├── atomic-slot-migration.tcl
│ │ │ ├── cli.tcl
│ │ │ ├── cluster-response-tls.tcl
│ │ │ ├── failure-marking.tcl
│ │ │ ├── hostnames.tcl
│ │ │ ├── human-announced-nodename.tcl
│ │ │ ├── internal-secret.tcl
│ │ │ ├── links.tcl
│ │ │ ├── misc.tcl
│ │ │ ├── multi-slot-operations.tcl
│ │ │ ├── scripting.tcl
│ │ │ ├── sharded-pubsub.tcl
│ │ │ ├── slot-ownership.tcl
│ │ │ └── slot-stats.tcl
│ │ ├── dump.tcl
│ │ ├── expire.tcl
│ │ ├── functions.tcl
│ │ ├── gcra.tcl
│ │ ├── geo.tcl
│ │ ├── hotkeys.tcl
│ │ ├── hyperloglog.tcl
│ │ ├── info-command.tcl
│ │ ├── info-keysizes.tcl
│ │ ├── info.tcl
│ │ ├── introspection-2.tcl
│ │ ├── introspection.tcl
│ │ ├── keyspace.tcl
│ │ ├── latency-monitor.tcl
│ │ ├── lazyfree.tcl
│ │ ├── limits.tcl
│ │ ├── maxmemory.tcl
│ │ ├── memefficiency.tcl
│ │ ├── moduleapi/
│ │ │ ├── aclcheck.tcl
│ │ │ ├── async_rm_call.tcl
│ │ │ ├── auth.tcl
│ │ │ ├── basics.tcl
│ │ │ ├── blockedclient.tcl
│ │ │ ├── blockonbackground.tcl
│ │ │ ├── blockonkeys.tcl
│ │ │ ├── cluster.tcl
│ │ │ ├── cmdintrospection.tcl
│ │ │ ├── commandfilter.tcl
│ │ │ ├── configaccess.tcl
│ │ │ ├── crash.tcl
│ │ │ ├── datatype.tcl
│ │ │ ├── datatype2.tcl
│ │ │ ├── defrag.tcl
│ │ │ ├── eventloop.tcl
│ │ │ ├── fork.tcl
│ │ │ ├── getchannels.tcl
│ │ │ ├── getkeys.tcl
│ │ │ ├── hash.tcl
│ │ │ ├── hooks.tcl
│ │ │ ├── infotest.tcl
│ │ │ ├── infra.tcl
│ │ │ ├── internalsecret.tcl
│ │ │ ├── keymeta.tcl
│ │ │ ├── keyspace_events.tcl
│ │ │ ├── keyspecs.tcl
│ │ │ ├── ksn_notify_side_effect.tcl
│ │ │ ├── list.tcl
│ │ │ ├── mallocsize.tcl
│ │ │ ├── misc.tcl
│ │ │ ├── moduleauth.tcl
│ │ │ ├── moduleconfigs.tcl
│ │ │ ├── postnotifications.tcl
│ │ │ ├── propagate.tcl
│ │ │ ├── publish.tcl
│ │ │ ├── rdbloadsave.tcl
│ │ │ ├── reply.tcl
│ │ │ ├── scan.tcl
│ │ │ ├── stream.tcl
│ │ │ ├── subcommands.tcl
│ │ │ ├── test_lazyfree.tcl
│ │ │ ├── testrdb.tcl
│ │ │ ├── timer.tcl
│ │ │ ├── usercall.tcl
│ │ │ └── zset.tcl
│ │ ├── multi.tcl
│ │ ├── networking.tcl
│ │ ├── obuf-limits.tcl
│ │ ├── oom-score-adj.tcl
│ │ ├── other.tcl
│ │ ├── pause.tcl
│ │ ├── printver.tcl
│ │ ├── protocol.tcl
│ │ ├── pubsub.tcl
│ │ ├── pubsubshard.tcl
│ │ ├── querybuf.tcl
│ │ ├── quit.tcl
│ │ ├── replybufsize.tcl
│ │ ├── scan.tcl
│ │ ├── scripting.tcl
│ │ ├── shutdown.tcl
│ │ ├── slowlog.tcl
│ │ ├── sort.tcl
│ │ ├── tls.tcl
│ │ ├── tracking.tcl
│ │ ├── type/
│ │ │ ├── hash-field-expire.tcl
│ │ │ ├── hash.tcl
│ │ │ ├── incr.tcl
│ │ │ ├── list-2.tcl
│ │ │ ├── list-3.tcl
│ │ │ ├── list.tcl
│ │ │ ├── set.tcl
│ │ │ ├── stream-cgroups.tcl
│ │ │ ├── stream.tcl
│ │ │ ├── string.tcl
│ │ │ └── zset.tcl
│ │ ├── violations.tcl
│ │ └── wait.tcl
│ └── vectorset/
│ └── vectorset.tcl
└── utils/
├── build-static-symbols.tcl
├── cluster_fail_time.tcl
├── corrupt_rdb.c
├── create-cluster/
│ ├── .gitignore
│ ├── README
│ └── create-cluster
├── gen-test-certs.sh
├── generate-command-code.py
├── generate-commands-json.py
├── generate-fmtargs.py
├── generate-module-api-doc.rb
├── graphs/
│ └── commits-over-time/
│ ├── README.md
│ └── genhtml.tcl
├── hyperloglog/
│ ├── .gitignore
│ ├── hll-err.rb
│ └── hll-gnuplot-graph.rb
├── install_server.sh
├── lru/
│ ├── README
│ ├── lfu-simulation.c
│ └── test-lru.rb
├── redis-copy.rb
├── redis-sha1.rb
├── redis_init_script
├── redis_init_script.tpl
├── releasetools/
│ ├── 01_create_tarball.sh
│ ├── 02_upload_tarball.sh
│ ├── 03_test_release.sh
│ ├── 04_release_hash.sh
│ └── changelog.tcl
├── reply_schema_linter.js
├── req-res-log-validator.py
├── req-res-validator/
│ └── requirements.txt
├── speed-regression.tcl
├── srandmember/
│ ├── README.md
│ ├── showdist.rb
│ └── showfreq.rb
├── systemd-redis_multiple_servers@.service
├── systemd-redis_server.service
├── tracking_collisions.c
└── whatisdoing.sh
Showing preview only (1,024K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (12077 symbols across 697 files)
FILE: deps/fpconv/fpconv_dtoa.c
function get_dbits (line 75) | static inline uint64_t get_dbits(double d) {
function Fp (line 85) | static Fp build_fp(double d) {
function normalize (line 103) | static void normalize(Fp *fp) {
function get_normalized_boundaries (line 114) | static void get_normalized_boundaries(Fp *fp, Fp *lower, Fp *upper) {
function Fp (line 137) | static Fp multiply(Fp *a, Fp *b) {
function round_digit (line 154) | static void round_digit(char *digits,
function generate_digits (line 167) | static int generate_digits(Fp *fp, Fp *upper, Fp *lower, char *digits, i...
function grisu2 (line 226) | static int grisu2(double d, char *digits, int *K) {
function emit_digits (line 249) | static int emit_digits(char *digits, int ndigits, char *dest, int K, boo...
function filter_special (line 321) | static int filter_special(double fp, char *dest) {
function fpconv_dtoa (line 349) | int fpconv_dtoa(double d, char dest[24]) {
FILE: deps/fpconv/fpconv_powers.h
type Fp (line 49) | typedef struct Fp {
function Fp (line 109) | static Fp find_cachedpow10(int exp, int* k)
FILE: deps/hdr_histogram/hdr_atomic.h
function hdr_atomic_store_pointer (line 23) | static void hdr_atomic_store_pointer(void** pointer, void* value)
function hdr_atomic_load_64 (line 29) | static int64_t __inline hdr_atomic_load_64(int64_t* field)
function hdr_atomic_store_64 (line 35) | static void __inline hdr_atomic_store_64(int64_t* field, int64_t value)
function hdr_atomic_exchange_64 (line 41) | static int64_t __inline hdr_atomic_exchange_64(volatile int64_t* field, ...
function hdr_atomic_add_fetch_64 (line 59) | static int64_t __inline hdr_atomic_add_fetch_64(volatile int64_t* field,...
function hdr_atomic_compare_exchange_64 (line 77) | static bool __inline hdr_atomic_compare_exchange_64(volatile int64_t* fi...
function hdr_atomic_store_pointer (line 104) | static inline void hdr_atomic_store_pointer(void** pointer, void* value)
function hdr_atomic_load_64 (line 109) | static inline int64_t hdr_atomic_load_64(int64_t* field)
function hdr_atomic_store_64 (line 116) | static inline void hdr_atomic_store_64(int64_t* field, int64_t value)
function hdr_atomic_exchange_64 (line 121) | static inline int64_t hdr_atomic_exchange_64(volatile int64_t* field, in...
function hdr_atomic_add_fetch_64 (line 128) | static inline int64_t hdr_atomic_add_fetch_64(volatile int64_t* field, i...
function hdr_atomic_compare_exchange_64 (line 133) | static inline bool hdr_atomic_compare_exchange_64(volatile int64_t* fiel...
FILE: deps/hdr_histogram/hdr_histogram.c
function normalize_index (line 34) | static int32_t normalize_index(const struct hdr_histogram* h, int32_t in...
function counts_get_direct (line 57) | static int64_t counts_get_direct(const struct hdr_histogram* h, int32_t ...
function counts_get_normalised (line 62) | static int64_t counts_get_normalised(const struct hdr_histogram* h, int3...
function counts_inc_normalised (line 67) | static void counts_inc_normalised(
function counts_inc_normalised_atomic (line 75) | static void counts_inc_normalised_atomic(
function update_min_max (line 84) | static void update_min_max(struct hdr_histogram* h, int64_t value)
function update_min_max_atomic (line 90) | static void update_min_max_atomic(struct hdr_histogram* h, int64_t value)
function power (line 126) | static int64_t power(int64_t base, int64_t exp)
function count_leading_zeros_64 (line 144) | static int32_t count_leading_zeros_64(int64_t value)
function get_bucket_index (line 168) | static int32_t get_bucket_index(const struct hdr_histogram* h, int64_t v...
function get_sub_bucket_index (line 174) | static int32_t get_sub_bucket_index(int64_t value, int32_t bucket_index,...
function counts_index (line 179) | static int32_t counts_index(const struct hdr_histogram* h, int32_t bucke...
function value_from_index (line 190) | static int64_t value_from_index(int32_t bucket_index, int32_t sub_bucket...
function counts_index_for (line 195) | int32_t counts_index_for(const struct hdr_histogram* h, int64_t value)
function hdr_value_at_index (line 203) | int64_t hdr_value_at_index(const struct hdr_histogram *h, int32_t index)
function hdr_size_of_equivalent_value_range (line 217) | int64_t hdr_size_of_equivalent_value_range(const struct hdr_histogram* h...
function size_of_equivalent_value_range_given_bucket_indices (line 225) | static int64_t size_of_equivalent_value_range_given_bucket_indices(
function lowest_equivalent_value (line 234) | static int64_t lowest_equivalent_value(const struct hdr_histogram* h, in...
function lowest_equivalent_value_given_bucket_indices (line 241) | static int64_t lowest_equivalent_value_given_bucket_indices(
function hdr_next_non_equivalent_value (line 249) | int64_t hdr_next_non_equivalent_value(const struct hdr_histogram *h, int...
function highest_equivalent_value (line 254) | static int64_t highest_equivalent_value(const struct hdr_histogram* h, i...
function hdr_median_equivalent_value (line 259) | int64_t hdr_median_equivalent_value(const struct hdr_histogram *h, int64...
function non_zero_min (line 264) | static int64_t non_zero_min(const struct hdr_histogram* h)
function hdr_reset_internal_counters (line 274) | void hdr_reset_internal_counters(struct hdr_histogram* h)
function buckets_needed_to_cover_value (line 318) | static int32_t buckets_needed_to_cover_value(int64_t value, int32_t sub_...
function hdr_calculate_bucket_config (line 343) | int hdr_calculate_bucket_config(
function hdr_init_preallocated (line 389) | void hdr_init_preallocated(struct hdr_histogram* h, struct hdr_histogram...
function hdr_init (line 408) | int hdr_init(
function hdr_close (line 445) | void hdr_close(struct hdr_histogram* h)
function hdr_alloc (line 453) | int hdr_alloc(int64_t highest_trackable_value, int significant_figures, ...
function hdr_reset (line 459) | void hdr_reset(struct hdr_histogram *h)
function hdr_get_memory_size (line 467) | size_t hdr_get_memory_size(struct hdr_histogram *h)
function hdr_record_value (line 481) | bool hdr_record_value(struct hdr_histogram* h, int64_t value)
function hdr_record_value_atomic (line 486) | bool hdr_record_value_atomic(struct hdr_histogram* h, int64_t value)
function hdr_record_values (line 491) | bool hdr_record_values(struct hdr_histogram* h, int64_t value, int64_t c...
function hdr_record_values_atomic (line 513) | bool hdr_record_values_atomic(struct hdr_histogram* h, int64_t value, in...
function hdr_record_corrected_value (line 535) | bool hdr_record_corrected_value(struct hdr_histogram* h, int64_t value, ...
function hdr_record_corrected_value_atomic (line 540) | bool hdr_record_corrected_value_atomic(struct hdr_histogram* h, int64_t ...
function hdr_record_corrected_values (line 545) | bool hdr_record_corrected_values(struct hdr_histogram* h, int64_t value,...
function hdr_record_corrected_values_atomic (line 571) | bool hdr_record_corrected_values_atomic(struct hdr_histogram* h, int64_t...
function hdr_add (line 597) | int64_t hdr_add(struct hdr_histogram* h, const struct hdr_histogram* from)
function hdr_add_while_correcting_for_coordinated_omission (line 617) | int64_t hdr_add_while_correcting_for_coordinated_omission(
function hdr_max (line 649) | int64_t hdr_max(const struct hdr_histogram* h)
function hdr_min (line 659) | int64_t hdr_min(const struct hdr_histogram* h)
function get_value_from_idx_up_to_count (line 669) | static int64_t get_value_from_idx_up_to_count(const struct hdr_histogram...
function hdr_value_at_percentile (line 687) | int64_t hdr_value_at_percentile(const struct hdr_histogram* h, double pe...
function hdr_value_at_percentiles (line 700) | int hdr_value_at_percentiles(const struct hdr_histogram *h, const double...
function hdr_mean (line 734) | double hdr_mean(const struct hdr_histogram* h)
function hdr_stddev (line 752) | double hdr_stddev(const struct hdr_histogram* h)
function hdr_values_are_equivalent (line 772) | bool hdr_values_are_equivalent(const struct hdr_histogram* h, int64_t a,...
function hdr_lowest_equivalent_value (line 777) | int64_t hdr_lowest_equivalent_value(const struct hdr_histogram* h, int64...
function hdr_count_at_value (line 782) | int64_t hdr_count_at_value(const struct hdr_histogram* h, int64_t value)
function hdr_count_at_index (line 787) | int64_t hdr_count_at_index(const struct hdr_histogram* h, int32_t index)
function has_buckets (line 802) | static bool has_buckets(struct hdr_iter* iter)
function has_next (line 807) | static bool has_next(struct hdr_iter* iter)
function move_next (line 812) | static bool move_next(struct hdr_iter* iter)
function peek_next_value_from_index (line 837) | static int64_t peek_next_value_from_index(struct hdr_iter* iter)
function next_value_greater_than_reporting_level_upper_bound (line 842) | static bool next_value_greater_than_reporting_level_upper_bound(
function basic_iter_next (line 853) | static bool basic_iter_next(struct hdr_iter *iter)
function update_iterated_values (line 865) | static void update_iterated_values(struct hdr_iter* iter, int64_t new_va...
function all_values_iter_next (line 871) | static bool all_values_iter_next(struct hdr_iter* iter)
function hdr_iter_init (line 883) | void hdr_iter_init(struct hdr_iter* iter, const struct hdr_histogram* h)
function hdr_iter_next (line 899) | bool hdr_iter_next(struct hdr_iter* iter)
function percentile_iter_next (line 912) | static bool percentile_iter_next(struct hdr_iter* iter)
function hdr_iter_percentile_init (line 958) | void hdr_iter_percentile_init(struct hdr_iter* iter, const struct hdr_hi...
function format_line_string (line 972) | static void format_line_string(char* str, size_t len, int significant_fi...
function recorded_iter_next (line 1008) | static bool recorded_iter_next(struct hdr_iter* iter)
function hdr_iter_recorded_init (line 1024) | void hdr_iter_recorded_init(struct hdr_iter* iter, const struct hdr_hist...
function iter_linear_next (line 1042) | static bool iter_linear_next(struct hdr_iter* iter)
function hdr_iter_linear_init (line 1079) | void hdr_iter_linear_init(struct hdr_iter* iter, const struct hdr_histog...
function hdr_iter_linear_set_value_units_per_bucket (line 1091) | void hdr_iter_linear_set_value_units_per_bucket(struct hdr_iter* iter, i...
function log_iter_next (line 1104) | static bool log_iter_next(struct hdr_iter *iter)
function hdr_iter_log_init (line 1139) | void hdr_iter_log_init(
function hdr_percentiles_print (line 1173) | int hdr_percentiles_print(
FILE: deps/hdr_histogram/hdr_histogram.h
type hdr_histogram (line 17) | struct hdr_histogram
type hdr_histogram (line 65) | struct hdr_histogram
type hdr_histogram (line 72) | struct hdr_histogram
type hdr_histogram (line 80) | struct hdr_histogram
type hdr_histogram (line 92) | struct hdr_histogram
type hdr_histogram (line 100) | struct hdr_histogram
type hdr_histogram (line 111) | struct hdr_histogram
type hdr_histogram (line 126) | struct hdr_histogram
type hdr_histogram (line 139) | struct hdr_histogram
type hdr_histogram (line 156) | struct hdr_histogram
type hdr_histogram (line 173) | struct hdr_histogram
type hdr_histogram (line 194) | struct hdr_histogram
type hdr_histogram (line 207) | struct hdr_histogram
type hdr_histogram (line 224) | struct hdr_histogram
type hdr_histogram (line 236) | struct hdr_histogram
type hdr_histogram (line 236) | struct hdr_histogram
type hdr_histogram (line 249) | struct hdr_histogram
type hdr_histogram (line 249) | struct hdr_histogram
type hdr_histogram (line 257) | struct hdr_histogram
type hdr_histogram (line 265) | struct hdr_histogram
type hdr_histogram (line 273) | struct hdr_histogram
type hdr_histogram (line 285) | struct hdr_histogram
type hdr_histogram (line 293) | struct hdr_histogram
type hdr_histogram (line 301) | struct hdr_histogram
type hdr_histogram (line 313) | struct hdr_histogram
type hdr_histogram (line 324) | struct hdr_histogram
type hdr_histogram (line 335) | struct hdr_histogram
type hdr_histogram (line 337) | struct hdr_histogram
type hdr_histogram (line 339) | struct hdr_histogram
type hdr_iter_percentiles (line 341) | struct hdr_iter_percentiles
type hdr_iter_recorded (line 349) | struct hdr_iter_recorded
type hdr_iter_linear (line 354) | struct hdr_iter_linear
type hdr_iter_log (line 362) | struct hdr_iter_log
type hdr_iter (line 378) | struct hdr_iter
type hdr_iter (line 415) | struct hdr_iter
type hdr_histogram (line 415) | struct hdr_histogram
type hdr_iter (line 420) | struct hdr_iter
type hdr_histogram (line 420) | struct hdr_histogram
type hdr_iter (line 425) | struct hdr_iter
type hdr_histogram (line 425) | struct hdr_histogram
type hdr_iter (line 431) | struct hdr_iter
type hdr_histogram (line 432) | struct hdr_histogram
type hdr_iter (line 438) | struct hdr_iter
type hdr_iter (line 444) | struct hdr_iter
type hdr_histogram (line 445) | struct hdr_histogram
type hdr_iter (line 456) | struct hdr_iter
type format_type (line 458) | typedef enum
type hdr_histogram (line 477) | struct hdr_histogram
type hdr_histogram_bucket_config (line 483) | struct hdr_histogram_bucket_config
type hdr_histogram_bucket_config (line 501) | struct hdr_histogram_bucket_config
type hdr_histogram (line 503) | struct hdr_histogram
type hdr_histogram_bucket_config (line 503) | struct hdr_histogram_bucket_config
type hdr_histogram (line 505) | struct hdr_histogram
type hdr_histogram (line 507) | struct hdr_histogram
type hdr_histogram (line 509) | struct hdr_histogram
type hdr_histogram (line 515) | struct hdr_histogram
FILE: deps/hdr_histogram/hdr_tests.h
type hdr_histogram (line 12) | struct hdr_histogram
type hdr_histogram (line 13) | struct hdr_histogram
type hdr_histogram (line 14) | struct hdr_histogram
FILE: deps/hiredis/adapters/ae.h
type redisAeEvents (line 38) | typedef struct redisAeEvents {
function redisAeReadEvent (line 45) | static void redisAeReadEvent(aeEventLoop *el, int fd, void *privdata, in...
function redisAeWriteEvent (line 52) | static void redisAeWriteEvent(aeEventLoop *el, int fd, void *privdata, i...
function redisAeAddRead (line 59) | static void redisAeAddRead(void *privdata) {
function redisAeDelRead (line 68) | static void redisAeDelRead(void *privdata) {
function redisAeAddWrite (line 77) | static void redisAeAddWrite(void *privdata) {
function redisAeDelWrite (line 86) | static void redisAeDelWrite(void *privdata) {
function redisAeCleanup (line 95) | static void redisAeCleanup(void *privdata) {
function redisAeAttach (line 102) | static int redisAeAttach(aeEventLoop *loop, redisAsyncContext *ac) {
FILE: deps/hiredis/adapters/glib.h
type RedisSource (line 9) | typedef struct
function redis_source_add_read (line 16) | static void
function redis_source_del_read (line 25) | static void
function redis_source_add_write (line 34) | static void
function redis_source_del_write (line 43) | static void
function redis_source_cleanup (line 52) | static void
function gboolean (line 71) | static gboolean
function gboolean (line 80) | static gboolean
function gboolean (line 87) | static gboolean
function redis_source_finalize (line 111) | static void
function GSource (line 122) | static GSource *
FILE: deps/hiredis/adapters/ivykis.h
type redisIvykisEvents (line 7) | typedef struct redisIvykisEvents {
function redisIvykisReadEvent (line 12) | static void redisIvykisReadEvent(void *arg) {
function redisIvykisWriteEvent (line 17) | static void redisIvykisWriteEvent(void *arg) {
function redisIvykisAddRead (line 22) | static void redisIvykisAddRead(void *privdata) {
function redisIvykisDelRead (line 27) | static void redisIvykisDelRead(void *privdata) {
function redisIvykisAddWrite (line 32) | static void redisIvykisAddWrite(void *privdata) {
function redisIvykisDelWrite (line 37) | static void redisIvykisDelWrite(void *privdata) {
function redisIvykisCleanup (line 42) | static void redisIvykisCleanup(void *privdata) {
function redisIvykisAttach (line 49) | static int redisIvykisAttach(redisAsyncContext *ac) {
FILE: deps/hiredis/adapters/libev.h
type redisLibevEvents (line 39) | typedef struct redisLibevEvents {
function redisLibevReadEvent (line 47) | static void redisLibevReadEvent(EV_P_ ev_io *watcher, int revents) {
function redisLibevWriteEvent (line 57) | static void redisLibevWriteEvent(EV_P_ ev_io *watcher, int revents) {
function redisLibevAddRead (line 67) | static void redisLibevAddRead(void *privdata) {
function redisLibevDelRead (line 78) | static void redisLibevDelRead(void *privdata) {
function redisLibevAddWrite (line 89) | static void redisLibevAddWrite(void *privdata) {
function redisLibevDelWrite (line 100) | static void redisLibevDelWrite(void *privdata) {
function redisLibevStopTimer (line 111) | static void redisLibevStopTimer(void *privdata) {
function redisLibevCleanup (line 119) | static void redisLibevCleanup(void *privdata) {
function redisLibevTimeout (line 127) | static void redisLibevTimeout(EV_P_ ev_timer *timer, int revents) {
function redisLibevSetTimeout (line 136) | static void redisLibevSetTimeout(void *privdata, struct timeval tv) {
function redisLibevAttach (line 151) | static int redisLibevAttach(EV_P_ redisAsyncContext *ac) {
FILE: deps/hiredis/adapters/libevent.h
type redisLibeventEvents (line 40) | typedef struct redisLibeventEvents {
function redisLibeventDestroy (line 49) | static void redisLibeventDestroy(redisLibeventEvents *e) {
function redisLibeventHandler (line 53) | static void redisLibeventHandler(evutil_socket_t fd, short event, void *...
function redisLibeventUpdate (line 82) | static void redisLibeventUpdate(void *privdata, short flag, int isRemove) {
function redisLibeventAddRead (line 106) | static void redisLibeventAddRead(void *privdata) {
function redisLibeventDelRead (line 110) | static void redisLibeventDelRead(void *privdata) {
function redisLibeventAddWrite (line 114) | static void redisLibeventAddWrite(void *privdata) {
function redisLibeventDelWrite (line 118) | static void redisLibeventDelWrite(void *privdata) {
function redisLibeventCleanup (line 122) | static void redisLibeventCleanup(void *privdata) {
function redisLibeventSetTimeout (line 138) | static void redisLibeventSetTimeout(void *privdata, struct timeval tv) {
function redisLibeventAttach (line 146) | static int redisLibeventAttach(redisAsyncContext *ac, struct event_base ...
FILE: deps/hiredis/adapters/libhv.h
type redisLibhvEvents (line 8) | typedef struct redisLibhvEvents {
function redisLibhvHandleEvents (line 13) | static void redisLibhvHandleEvents(hio_t* io) {
function redisLibhvAddRead (line 25) | static void redisLibhvAddRead(void *privdata) {
function redisLibhvDelRead (line 30) | static void redisLibhvDelRead(void *privdata) {
function redisLibhvAddWrite (line 35) | static void redisLibhvAddWrite(void *privdata) {
function redisLibhvDelWrite (line 40) | static void redisLibhvDelWrite(void *privdata) {
function redisLibhvCleanup (line 45) | static void redisLibhvCleanup(void *privdata) {
function redisLibhvTimeout (line 57) | static void redisLibhvTimeout(htimer_t* timer) {
function redisLibhvSetTimeout (line 62) | static void redisLibhvSetTimeout(void *privdata, struct timeval tv) {
function redisLibhvAttach (line 87) | static int redisLibhvAttach(redisAsyncContext* ac, hloop_t* loop) {
FILE: deps/hiredis/adapters/libsdevent.h
type redisLibsdeventEvents (line 10) | typedef struct redisLibsdeventEvents {
function redisLibsdeventDestroy (line 20) | static void redisLibsdeventDestroy(redisLibsdeventEvents *e) {
function redisLibsdeventTimeoutHandler (line 31) | static int redisLibsdeventTimeoutHandler(sd_event_source *s, uint64_t us...
function redisLibsdeventHandler (line 39) | static int redisLibsdeventHandler(sd_event_source *s, int fd, uint32_t e...
function redisLibsdeventAddRead (line 66) | static void redisLibsdeventAddRead(void *userdata) {
function redisLibsdeventDelRead (line 82) | static void redisLibsdeventDelRead(void *userdata) {
function redisLibsdeventAddWrite (line 94) | static void redisLibsdeventAddWrite(void *userdata) {
function redisLibsdeventDelWrite (line 110) | static void redisLibsdeventDelWrite(void *userdata) {
function redisLibsdeventCleanup (line 122) | static void redisLibsdeventCleanup(void *userdata) {
function redisLibsdeventSetTimeout (line 136) | static void redisLibsdeventSetTimeout(void *userdata, struct timeval tv) {
function redisLibsdeventAttach (line 147) | static int redisLibsdeventAttach(redisAsyncContext *ac, struct sd_event ...
FILE: deps/hiredis/adapters/libuv.h
type redisLibuvEvents (line 9) | typedef struct redisLibuvEvents {
function redisLibuvPoll (line 17) | static void redisLibuvPoll(uv_poll_t* handle, int status, int events) {
function redisLibuvAddRead (line 30) | static void redisLibuvAddRead(void *privdata) {
function redisLibuvDelRead (line 43) | static void redisLibuvDelRead(void *privdata) {
function redisLibuvAddWrite (line 56) | static void redisLibuvAddWrite(void *privdata) {
function redisLibuvDelWrite (line 69) | static void redisLibuvDelWrite(void *privdata) {
function on_timer_close (line 81) | static void on_timer_close(uv_handle_t *handle) {
function on_handle_close (line 91) | static void on_handle_close(uv_handle_t *handle) {
function redisLibuvTimeout (line 108) | static void redisLibuvTimeout(uv_timer_t *timer) {
function redisLibuvSetTimeout (line 114) | static void redisLibuvSetTimeout(void *privdata, struct timeval tv) {
function redisLibuvCleanup (line 130) | static void redisLibuvCleanup(void *privdata) {
function redisLibuvAttach (line 141) | static int redisLibuvAttach(redisAsyncContext* ac, uv_loop_t* loop) {
FILE: deps/hiredis/adapters/macosx.h
type RedisRunLoop (line 14) | typedef struct {
function freeRedisRunLoop (line 20) | static int freeRedisRunLoop(RedisRunLoop* redisRunLoop) {
function redisMacOSAddRead (line 35) | static void redisMacOSAddRead(void *privdata) {
function redisMacOSDelRead (line 40) | static void redisMacOSDelRead(void *privdata) {
function redisMacOSAddWrite (line 45) | static void redisMacOSAddWrite(void *privdata) {
function redisMacOSDelWrite (line 50) | static void redisMacOSDelWrite(void *privdata) {
function redisMacOSCleanup (line 55) | static void redisMacOSCleanup(void *privdata) {
function redisMacOSAsyncCallback (line 60) | static void redisMacOSAsyncCallback(CFSocketRef __unused s, CFSocketCall...
function redisMacOSAttach (line 77) | static int redisMacOSAttach(redisAsyncContext *redisAsyncCtx, CFRunLoopR...
FILE: deps/hiredis/adapters/poll.h
type redisPollEvents (line 19) | typedef struct redisPollEvents {
function redisPollTimevalToDouble (line 28) | static double redisPollTimevalToDouble(struct timeval *tv) {
function redisPollGetNow (line 34) | static double redisPollGetNow(void) {
function redisPollTick (line 52) | static int redisPollTick(redisAsyncContext *ac, double timeout) {
function redisPollAddRead (line 129) | static void redisPollAddRead(void *data) {
function redisPollDelRead (line 134) | static void redisPollDelRead(void *data) {
function redisPollAddWrite (line 139) | static void redisPollAddWrite(void *data) {
function redisPollDelWrite (line 144) | static void redisPollDelWrite(void *data) {
function redisPollCleanup (line 149) | static void redisPollCleanup(void *data) {
function redisPollScheduleTimer (line 159) | static void redisPollScheduleTimer(void *data, struct timeval tv)
function redisPollAttach (line 166) | static int redisPollAttach(redisAsyncContext *ac) {
FILE: deps/hiredis/adapters/qt.h
function class (line 37) | class RedisQtAdapter : public QObject {
FILE: deps/hiredis/adapters/redismoduleapi.h
type redisModuleEvents (line 11) | typedef struct redisModuleEvents {
function redisModuleReadEvent (line 20) | static inline void redisModuleReadEvent(int fd, void *privdata, int mask) {
function redisModuleWriteEvent (line 28) | static inline void redisModuleWriteEvent(int fd, void *privdata, int mas...
function redisModuleAddRead (line 36) | static inline void redisModuleAddRead(void *privdata) {
function redisModuleDelRead (line 44) | static inline void redisModuleDelRead(void *privdata) {
function redisModuleAddWrite (line 52) | static inline void redisModuleAddWrite(void *privdata) {
function redisModuleDelWrite (line 60) | static inline void redisModuleDelWrite(void *privdata) {
function redisModuleStopTimer (line 68) | static inline void redisModuleStopTimer(void *privdata) {
function redisModuleCleanup (line 76) | static inline void redisModuleCleanup(void *privdata) {
function redisModuleTimeout (line 84) | static inline void redisModuleTimeout(RedisModuleCtx *ctx, void *privdat...
function redisModuleSetTimeout (line 92) | static inline void redisModuleSetTimeout(void *privdata, struct timeval ...
function redisModuleCompatibilityCheck (line 103) | static inline int redisModuleCompatibilityCheck(void) {
function redisModuleAttach (line 113) | static inline int redisModuleAttach(redisAsyncContext *ac, RedisModuleCt...
FILE: deps/hiredis/alloc.c
function hiredisAllocFuncs (line 45) | hiredisAllocFuncs hiredisSetAllocators(hiredisAllocFuncs *override) {
function hiredisResetAllocators (line 54) | void hiredisResetAllocators(void) {
function hi_free (line 86) | void hi_free(void *ptr) {
FILE: deps/hiredis/alloc.h
type hiredisAllocFuncs (line 42) | typedef struct hiredisAllocFuncs {
function hi_free (line 78) | static inline void hi_free(void *ptr) {
FILE: deps/hiredis/async.c
function callbackHash (line 60) | static unsigned int callbackHash(const void *key) {
function callbackKeyCompare (line 77) | static int callbackKeyCompare(void *privdata, const void *key1, const vo...
function callbackKeyDestructor (line 87) | static void callbackKeyDestructor(void *privdata, void *key) {
function callbackValDestructor (line 92) | static void callbackValDestructor(void *privdata, void *val) {
function redisAsyncContext (line 106) | static redisAsyncContext *redisAsyncInitialize(redisContext *c) {
function __redisAsyncCopyError (line 163) | static void __redisAsyncCopyError(redisAsyncContext *ac) {
function redisAsyncContext (line 172) | redisAsyncContext *redisAsyncConnectWithOptions(const redisOptions *opti...
function redisAsyncContext (line 201) | redisAsyncContext *redisAsyncConnect(const char *ip, int port) {
function redisAsyncContext (line 207) | redisAsyncContext *redisAsyncConnectBind(const char *ip, int port,
function redisAsyncContext (line 215) | redisAsyncContext *redisAsyncConnectBindWithReuse(const char *ip, int port,
function redisAsyncContext (line 224) | redisAsyncContext *redisAsyncConnectUnix(const char *path) {
function redisAsyncSetConnectCallbackImpl (line 230) | static int
function redisAsyncSetConnectCallback (line 252) | int redisAsyncSetConnectCallback(redisAsyncContext *ac, redisConnectCall...
function redisAsyncSetConnectCallbackNC (line 256) | int redisAsyncSetConnectCallbackNC(redisAsyncContext *ac, redisConnectCa...
function redisAsyncSetDisconnectCallback (line 260) | int redisAsyncSetDisconnectCallback(redisAsyncContext *ac, redisDisconne...
function __redisPushCallback (line 269) | static int __redisPushCallback(redisCallbackList *list, redisCallback *s...
function __redisShiftCallback (line 291) | static int __redisShiftCallback(redisCallbackList *list, redisCallback *...
function __redisRunCallback (line 307) | static void __redisRunCallback(redisAsyncContext *ac, redisCallback *cb,...
function __redisRunPushCallback (line 316) | static void __redisRunPushCallback(redisAsyncContext *ac, redisReply *re...
function __redisRunConnectCallback (line 324) | static void __redisRunConnectCallback(redisAsyncContext *ac, int status)
function __redisRunDisconnectCallback (line 347) | static void __redisRunDisconnectCallback(redisAsyncContext *ac, int status)
function __redisAsyncFree (line 362) | static void __redisAsyncFree(redisAsyncContext *ac) {
function redisAsyncFree (line 415) | void redisAsyncFree(redisAsyncContext *ac) {
function __redisAsyncDisconnect (line 427) | void __redisAsyncDisconnect(redisAsyncContext *ac) {
function redisAsyncDisconnect (line 460) | void redisAsyncDisconnect(redisAsyncContext *ac) {
function __redisGetSubscribeCallback (line 470) | static int __redisGetSubscribeCallback(redisAsyncContext *ac, redisReply...
function redisIsSubscribeReply (line 549) | static int redisIsSubscribeReply(redisReply *reply) {
function redisProcessCallbacks (line 570) | void redisProcessCallbacks(redisAsyncContext *ac) {
function __redisAsyncHandleConnectFailure (line 664) | static void __redisAsyncHandleConnectFailure(redisAsyncContext *ac) {
function __redisAsyncHandleConnect (line 672) | static int __redisAsyncHandleConnect(redisAsyncContext *ac) {
function redisAsyncRead (line 709) | void redisAsyncRead(redisAsyncContext *ac) {
function redisAsyncHandleRead (line 724) | void redisAsyncHandleRead(redisAsyncContext *ac) {
function redisAsyncWrite (line 741) | void redisAsyncWrite(redisAsyncContext *ac) {
function redisAsyncHandleWrite (line 759) | void redisAsyncHandleWrite(redisAsyncContext *ac) {
function redisAsyncHandleTimeout (line 776) | void redisAsyncHandleTimeout(redisAsyncContext *ac) {
function __redisAsyncCommand (line 834) | static int __redisAsyncCommand(redisAsyncContext *ac, redisCallbackFn *f...
function redisvAsyncCommand (line 970) | int redisvAsyncCommand(redisAsyncContext *ac, redisCallbackFn *fn, void ...
function redisAsyncCommand (line 985) | int redisAsyncCommand(redisAsyncContext *ac, redisCallbackFn *fn, void *...
function redisAsyncCommandArgv (line 994) | int redisAsyncCommandArgv(redisAsyncContext *ac, redisCallbackFn *fn, vo...
function redisAsyncFormattedCommand (line 1006) | int redisAsyncFormattedCommand(redisAsyncContext *ac, redisCallbackFn *f...
function redisAsyncPushFn (line 1011) | redisAsyncPushFn *redisAsyncSetPushCallback(redisAsyncContext *ac, redis...
function redisAsyncSetTimeout (line 1017) | int redisAsyncSetTimeout(redisAsyncContext *ac, struct timeval tv) {
FILE: deps/hiredis/async.h
type redisAsyncContext (line 40) | struct redisAsyncContext
type dict (line 41) | struct dict
type redisAsyncContext (line 44) | struct redisAsyncContext
type redisCallback (line 45) | typedef struct redisCallback {
type redisCallbackList (line 54) | typedef struct redisCallbackList {
type redisAsyncContext (line 59) | struct redisAsyncContext
type redisAsyncContext (line 60) | struct redisAsyncContext
type redisAsyncContext (line 61) | struct redisAsyncContext
type redisAsyncContext (line 65) | typedef struct redisAsyncContext {
type timeval (line 130) | struct timeval
FILE: deps/hiredis/async_private.h
function refreshTimeout (line 56) | static inline void refreshTimeout(redisAsyncContext *ctx) {
FILE: deps/hiredis/dict.c
function dictGenHashFunction (line 54) | static unsigned int dictGenHashFunction(const unsigned char *buf, int le...
function _dictReset (line 66) | static void _dictReset(dict *ht) {
function dict (line 74) | static dict *dictCreate(dictType *type, void *privDataPtr) {
function _dictInit (line 84) | static int _dictInit(dict *ht, dictType *type, void *privDataPtr) {
function dictExpand (line 92) | static int dictExpand(dict *ht, unsigned long size) {
function dictAdd (line 141) | static int dictAdd(dict *ht, void *key, void *val) {
function dictReplace (line 169) | static int dictReplace(dict *ht, void *key, void *val) {
function dictDelete (line 194) | static int dictDelete(dict *ht, const void *key) {
function _dictClear (line 225) | static int _dictClear(dict *ht) {
function dictRelease (line 250) | static void dictRelease(dict *ht) {
function dictEntry (line 255) | static dictEntry *dictFind(dict *ht, const void *key) {
function dictInitIterator (line 270) | static void dictInitIterator(dictIterator *iter, dict *ht) {
function dictEntry (line 277) | static dictEntry *dictNext(dictIterator *iter) {
function _dictExpandIfNeeded (line 300) | static int _dictExpandIfNeeded(dict *ht) {
function _dictNextPower (line 311) | static unsigned long _dictNextPower(unsigned long size) {
function _dictKeyIndex (line 325) | static int _dictKeyIndex(dict *ht, const void *key) {
FILE: deps/hiredis/dict.h
type dictEntry (line 45) | typedef struct dictEntry {
type dictType (line 51) | typedef struct dictType {
type dict (line 60) | typedef struct dict {
type dictIterator (line 69) | typedef struct dictIterator {
FILE: deps/hiredis/examples/example-ae.c
function getCallback (line 13) | void getCallback(redisAsyncContext *c, void *r, void *privdata) {
function connectCallback (line 22) | void connectCallback(const redisAsyncContext *c, int status) {
function disconnectCallback (line 32) | void disconnectCallback(const redisAsyncContext *c, int status) {
function main (line 43) | int main (int argc, char **argv) {
FILE: deps/hiredis/examples/example-glib.c
function connect_cb (line 9) | static void
function disconnect_cb (line 21) | static void
function command_cb (line 33) | static void
function gint (line 47) | gint
FILE: deps/hiredis/examples/example-ivykis.c
function getCallback (line 10) | void getCallback(redisAsyncContext *c, void *r, void *privdata) {
function connectCallback (line 19) | void connectCallback(const redisAsyncContext *c, int status) {
function disconnectCallback (line 27) | void disconnectCallback(const redisAsyncContext *c, int status) {
function main (line 35) | int main (int argc, char **argv) {
FILE: deps/hiredis/examples/example-libev.c
function getCallback (line 10) | void getCallback(redisAsyncContext *c, void *r, void *privdata) {
function connectCallback (line 19) | void connectCallback(const redisAsyncContext *c, int status) {
function disconnectCallback (line 27) | void disconnectCallback(const redisAsyncContext *c, int status) {
function main (line 35) | int main (int argc, char **argv) {
FILE: deps/hiredis/examples/example-libevent-ssl.c
function getCallback (line 11) | void getCallback(redisAsyncContext *c, void *r, void *privdata) {
function connectCallback (line 20) | void connectCallback(const redisAsyncContext *c, int status) {
function disconnectCallback (line 28) | void disconnectCallback(const redisAsyncContext *c, int status) {
function main (line 36) | int main (int argc, char **argv) {
FILE: deps/hiredis/examples/example-libevent.c
function getCallback (line 10) | void getCallback(redisAsyncContext *c, void *r, void *privdata) {
function connectCallback (line 24) | void connectCallback(const redisAsyncContext *c, int status) {
function disconnectCallback (line 32) | void disconnectCallback(const redisAsyncContext *c, int status) {
function main (line 40) | int main (int argc, char **argv) {
FILE: deps/hiredis/examples/example-libhv.c
function getCallback (line 10) | void getCallback(redisAsyncContext *c, void *r, void *privdata) {
function debugCallback (line 19) | void debugCallback(redisAsyncContext *c, void *r, void *privdata) {
function connectCallback (line 31) | void connectCallback(const redisAsyncContext *c, int status) {
function disconnectCallback (line 39) | void disconnectCallback(const redisAsyncContext *c, int status) {
function main (line 47) | int main (int argc, char **argv) {
FILE: deps/hiredis/examples/example-libsdevent.c
function debugCallback (line 10) | void debugCallback(redisAsyncContext *c, void *r, void *privdata) {
function getCallback (line 22) | void getCallback(redisAsyncContext *c, void *r, void *privdata) {
function connectCallback (line 34) | void connectCallback(const redisAsyncContext *c, int status) {
function disconnectCallback (line 42) | void disconnectCallback(const redisAsyncContext *c, int status) {
function main (line 50) | int main (int argc, char **argv) {
FILE: deps/hiredis/examples/example-libuv.c
function debugCallback (line 10) | void debugCallback(redisAsyncContext *c, void *r, void *privdata) {
function getCallback (line 22) | void getCallback(redisAsyncContext *c, void *r, void *privdata) {
function connectCallback (line 34) | void connectCallback(const redisAsyncContext *c, int status) {
function disconnectCallback (line 42) | void disconnectCallback(const redisAsyncContext *c, int status) {
function main (line 50) | int main (int argc, char **argv) {
FILE: deps/hiredis/examples/example-macosx.c
function getCallback (line 12) | void getCallback(redisAsyncContext *c, void *r, void *privdata) {
function connectCallback (line 21) | void connectCallback(const redisAsyncContext *c, int status) {
function disconnectCallback (line 29) | void disconnectCallback(const redisAsyncContext *c, int status) {
function main (line 38) | int main (int argc, char **argv) {
FILE: deps/hiredis/examples/example-poll.c
function getCallback (line 13) | void getCallback(redisAsyncContext *c, void *r, void *privdata) {
function connectCallback (line 22) | void connectCallback(const redisAsyncContext *c, int status) {
function disconnectCallback (line 32) | void disconnectCallback(const redisAsyncContext *c, int status) {
function main (line 42) | int main (int argc, char **argv) {
FILE: deps/hiredis/examples/example-push.c
function assertReplyAndFree (line 43) | static void assertReplyAndFree(redisContext *context, redisReply *reply,...
function enableClientTracking (line 58) | static void enableClientTracking(redisContext *c) {
function pushReplyHandler (line 78) | void pushReplyHandler(void *privdata, void *r) {
function privdata_dtor (line 101) | void privdata_dtor(void *privdata) {
function main (line 106) | int main(int argc, char **argv) {
FILE: deps/hiredis/examples/example-qt.cpp
function getCallback (line 9) | void getCallback(redisAsyncContext *, void * r, void * privdata) {
function main (line 36) | int main (int argc, char **argv) {
FILE: deps/hiredis/examples/example-qt.h
function class (line 6) | class ExampleQt : public QObject {
FILE: deps/hiredis/examples/example-redismoduleapi.c
function debugCallback (line 10) | void debugCallback(redisAsyncContext *c, void *r, void *privdata) {
function getCallback (line 22) | void getCallback(redisAsyncContext *c, void *r, void *privdata) {
function connectCallback (line 36) | void connectCallback(const redisAsyncContext *c, int status) {
function disconnectCallback (line 44) | void disconnectCallback(const redisAsyncContext *c, int status) {
function RedisModule_OnLoad (line 62) | int RedisModule_OnLoad(RedisModuleCtx *ctx, RedisModuleString **argv, in...
FILE: deps/hiredis/examples/example-ssl.c
function main (line 12) | int main(int argc, char **argv) {
FILE: deps/hiredis/examples/example.c
function example_argv_command (line 10) | static void example_argv_command(redisContext *c, size_t n) {
function main (line 58) | int main(int argc, char **argv) {
FILE: deps/hiredis/fuzzing/format_command_fuzzer.c
function LLVMFuzzerTestOneInput (line 38) | int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
FILE: deps/hiredis/hiredis.c
type timeval (line 47) | struct timeval
type timeval (line 48) | struct timeval
function redisReply (line 80) | static redisReply *createReplyObject(int type) {
function freeReplyObject (line 91) | void freeReplyObject(void *reply) {
function countDigits (line 299) | static uint32_t countDigits(uint64_t v) {
function bulklen (line 312) | static size_t bulklen(size_t len) {
function redisvFormatCommand (line 316) | int redisvFormatCommand(char **target, const char *format, va_list ap) {
function redisFormatCommand (line 565) | int redisFormatCommand(char **target, const char *format, ...) {
function redisFormatSdsCommandArgv (line 586) | long long redisFormatSdsCommandArgv(hisds *target, int argc, const char ...
function redisFreeSdsCommand (line 633) | void redisFreeSdsCommand(hisds cmd) {
function redisFormatCommandArgv (line 642) | long long redisFormatCommandArgv(char **target, int argc, const char **a...
function redisFreeCommand (line 680) | void redisFreeCommand(char *cmd) {
function __redisSetError (line 684) | void __redisSetError(redisContext *c, int type, const char *str) {
function redisReader (line 700) | redisReader *redisReaderCreate(void) {
function redisPushAutoFree (line 704) | static void redisPushAutoFree(void *privdata, void *reply) {
function redisContext (line 709) | static redisContext *redisContextInit(void) {
function redisFree (line 730) | void redisFree(redisContext *c) {
function redisFD (line 757) | redisFD redisFreeKeepFd(redisContext *c) {
function redisReconnect (line 764) | int redisReconnect(redisContext *c) {
function redisContext (line 808) | redisContext *redisConnectWithOptions(const redisOptions *options) {
function redisContext (line 875) | redisContext *redisConnect(const char *ip, int port) {
function redisContext (line 881) | redisContext *redisConnectWithTimeout(const char *ip, int port, const st...
function redisContext (line 888) | redisContext *redisConnectNonBlock(const char *ip, int port) {
function redisContext (line 895) | redisContext *redisConnectBindNonBlock(const char *ip, int port,
function redisContext (line 904) | redisContext *redisConnectBindNonBlockWithReuse(const char *ip, int port,
function redisContext (line 913) | redisContext *redisConnectUnix(const char *path) {
function redisContext (line 919) | redisContext *redisConnectUnixWithTimeout(const char *path, const struct...
function redisContext (line 926) | redisContext *redisConnectUnixNonBlock(const char *path) {
function redisContext (line 933) | redisContext *redisConnectFd(redisFD fd) {
function redisSetTimeout (line 941) | int redisSetTimeout(redisContext *c, const struct timeval tv) {
function redisEnableKeepAliveWithInterval (line 947) | int redisEnableKeepAliveWithInterval(redisContext *c, int interval) {
function redisEnableKeepAlive (line 952) | int redisEnableKeepAlive(redisContext *c) {
function redisSetTcpUserTimeout (line 957) | int redisSetTcpUserTimeout(redisContext *c, unsigned int timeout) {
function redisPushFn (line 962) | redisPushFn *redisSetPushCallback(redisContext *c, redisPushFn *fn) {
function redisBufferRead (line 973) | int redisBufferRead(redisContext *c) {
function redisBufferWrite (line 1001) | int redisBufferWrite(redisContext *c, int *done) {
function redisHandledPushReply (line 1032) | static int redisHandledPushReply(redisContext *c, void *reply) {
function redisGetReplyFromReader (line 1042) | int redisGetReplyFromReader(redisContext *c, void **reply) {
function redisNextInBandReplyFromReader (line 1054) | static int redisNextInBandReplyFromReader(redisContext *c, void **reply) {
function redisGetReply (line 1063) | int redisGetReply(redisContext *c, void **reply) {
function __redisAppendCommand (line 1106) | int __redisAppendCommand(redisContext *c, const char *cmd, size_t len) {
function redisAppendFormattedCommand (line 1119) | int redisAppendFormattedCommand(redisContext *c, const char *cmd, size_t...
function redisvAppendCommand (line 1128) | int redisvAppendCommand(redisContext *c, const char *format, va_list ap) {
function redisAppendCommand (line 1150) | int redisAppendCommand(redisContext *c, const char *format, ...) {
function redisAppendCommandArgv (line 1160) | int redisAppendCommandArgv(redisContext *c, int argc, const char **argv,...
FILE: deps/hiredis/hiredis.h
type timeval (line 41) | struct timeval
type redisAsyncContext (line 107) | struct redisAsyncContext
type redisContext (line 108) | struct redisContext
type redisAsyncContext (line 113) | struct redisAsyncContext
type redisReply (line 120) | typedef struct redisReply {
type redisConnectionType (line 147) | enum redisConnectionType {
type redisSsl (line 153) | struct redisSsl
type redisFD (line 174) | typedef int redisFD;
type redisFD (line 178) | typedef unsigned long long redisFD;
type redisFD (line 180) | typedef unsigned long redisFD;
type redisOptions (line 185) | typedef struct {
type redisContextFuncs (line 241) | typedef struct redisContextFuncs {
type redisContext (line 257) | typedef struct redisContext {
type timeval (line 300) | struct timeval
type timeval (line 307) | struct timeval
type timeval (line 323) | struct timeval
FILE: deps/hiredis/hiredis_ssl.h
type ssl_st (line 42) | struct ssl_st
type redisSSLContext (line 47) | typedef struct redisSSLContext redisSSLContext;
type redisSSLContextError (line 53) | typedef enum {
type redisSSLOptions (line 77) | typedef struct {
type ssl_st (line 157) | struct ssl_st
FILE: deps/hiredis/net.c
type timeval (line 53) | struct timeval
function redisNetClose (line 55) | void redisNetClose(redisContext *c) {
function redisNetRead (line 62) | ssize_t redisNetRead(redisContext *c, char *buf, size_t bufcap) {
function redisNetWrite (line 84) | ssize_t redisNetWrite(redisContext *c) {
function __redisSetErrorFromErrno (line 101) | static void __redisSetErrorFromErrno(redisContext *c, int type, const ch...
function redisSetReuseAddr (line 112) | static int redisSetReuseAddr(redisContext *c) {
function redisCreateSocket (line 122) | static int redisCreateSocket(redisContext *c, int type) {
function redisSetBlocking (line 137) | static int redisSetBlocking(redisContext *c, int blocking) {
function redisKeepAlive (line 171) | int redisKeepAlive(redisContext *c, int interval) {
function redisSetTcpNoDelay (line 221) | int redisSetTcpNoDelay(redisContext *c) {
function redisContextSetTcpUserTimeout (line 231) | int redisContextSetTcpUserTimeout(redisContext *c, unsigned int timeout) {
function redisContextTimeoutMsec (line 250) | static int redisContextTimeoutMsec(redisContext *c, long *result)
function redisContextWaitReady (line 274) | static int redisContextWaitReady(redisContext *c, long msec) {
function redisCheckConnectDone (line 307) | int redisCheckConnectDone(redisContext *c, int *completed) {
function redisCheckSocketError (line 343) | int redisCheckSocketError(redisContext *c) {
function redisContextSetTimeout (line 365) | int redisContextSetTimeout(redisContext *c, const struct timeval tv) {
function redisContextUpdateConnectTimeout (line 384) | int redisContextUpdateConnectTimeout(redisContext *c, const struct timev...
function redisContextUpdateCommandTimeout (line 400) | int redisContextUpdateCommandTimeout(redisContext *c, const struct timev...
function _redisContextConnectTcp (line 416) | static int _redisContextConnectTcp(redisContext *c, const char *addr, in...
function redisContextConnectTcp (line 596) | int redisContextConnectTcp(redisContext *c, const char *addr, int port,
function redisContextConnectBindTcp (line 601) | int redisContextConnectBindTcp(redisContext *c, const char *addr, int port,
function redisContextConnectUnix (line 607) | int redisContextConnectUnix(redisContext *c, const char *path, const str...
FILE: deps/hiredis/net.h
type timeval (line 45) | struct timeval
type timeval (line 46) | struct timeval
type timeval (line 48) | struct timeval
type timeval (line 50) | struct timeval
FILE: deps/hiredis/read.c
function __redisReaderSetError (line 53) | static void __redisReaderSetError(redisReader *r, int type, const char *...
function chrtos (line 77) | static size_t chrtos(char *buf, size_t size, char byte) {
function __redisReaderSetErrorProtocolByte (line 101) | static void __redisReaderSetErrorProtocolByte(redisReader *r, char byte) {
function __redisReaderSetErrorOOM (line 110) | static void __redisReaderSetErrorOOM(redisReader *r) {
function string2ll (line 162) | static int string2ll(const char *s, size_t slen, long long *value) {
function moveToNextTask (line 240) | static void moveToNextTask(redisReader *r) {
function processLineItem (line 268) | static int processLineItem(redisReader *r) {
function processBulkItem (line 397) | static int processBulkItem(redisReader *r) {
function redisReaderGrow (line 469) | static int redisReaderGrow(redisReader *r) {
function processAggregateItem (line 495) | static int processAggregateItem(redisReader *r) {
function processItem (line 573) | static int processItem(redisReader *r) {
function redisReader (line 654) | redisReader *redisReaderCreateWithFunctions(redisReplyObjectFunctions *f...
function redisReaderFree (line 686) | void redisReaderFree(redisReader *r) {
function redisReaderFeed (line 706) | int redisReaderFeed(redisReader *r, const char *buf, size_t len) {
function redisReaderGetReply (line 737) | int redisReaderGetReply(redisReader *r, void **reply) {
FILE: deps/hiredis/read.h
type redisReadTask (line 76) | typedef struct redisReadTask {
type redisReplyObjectFunctions (line 85) | typedef struct redisReplyObjectFunctions {
type redisReader (line 95) | typedef struct redisReader {
FILE: deps/hiredis/sds.c
function hi_sdsHdrSize (line 43) | static inline int hi_sdsHdrSize(char type) {
function hi_sdsReqType (line 59) | static inline char hi_sdsReqType(size_t string_size) {
function hisds (line 83) | hisds hi_sdsnewlen(const void *init, size_t initlen) {
function hisds (line 142) | hisds hi_sdsempty(void) {
function hisds (line 147) | hisds hi_sdsnew(const char *init) {
function hisds (line 153) | hisds hi_sdsdup(const hisds s) {
function hi_sdsfree (line 158) | void hi_sdsfree(hisds s) {
function hi_sdsupdatelen (line 177) | void hi_sdsupdatelen(hisds s) {
function hi_sdsclear (line 186) | void hi_sdsclear(hisds s) {
function hisds (line 197) | hisds hi_sdsMakeRoomFor(hisds s, size_t addlen) {
function hisds (line 250) | hisds hi_sdsRemoveFreeSpace(hisds s) {
function hi_sdsAllocSize (line 283) | size_t hi_sdsAllocSize(hisds s) {
function hi_sdsIncrLen (line 317) | void hi_sdsIncrLen(hisds s, int incr) {
function hisds (line 363) | hisds hi_sdsgrowzero(hisds s, size_t len) {
function hisds (line 381) | hisds hi_sdscatlen(hisds s, const void *t, size_t len) {
function hisds (line 396) | hisds hi_sdscat(hisds s, const char *t) {
function hisds (line 404) | hisds hi_sdscatsds(hisds s, const hisds t) {
function hisds (line 410) | hisds hi_sdscpylen(hisds s, const char *t, size_t len) {
function hisds (line 423) | hisds hi_sdscpy(hisds s, const char *t) {
function hi_sdsll2str (line 434) | int hi_sdsll2str(char *s, long long value) {
function hi_sdsull2str (line 466) | int hi_sdsull2str(char *s, unsigned long long v) {
function hisds (line 498) | hisds hi_sdsfromlonglong(long long value) {
function hisds (line 506) | hisds hi_sdscatvprintf(hisds s, const char *fmt, va_list ap) {
function hisds (line 559) | hisds hi_sdscatprintf(hisds s, const char *fmt, ...) {
function hisds (line 584) | hisds hi_sdscatfmt(hisds s, char const *fmt, ...) {
function hisds (line 694) | hisds hi_sdstrim(hisds s, const char *cset) {
function hi_sdsrange (line 729) | int hi_sdsrange(hisds s, ssize_t start, ssize_t end) {
function hi_sdstolower (line 760) | void hi_sdstolower(hisds s) {
function hi_sdstoupper (line 767) | void hi_sdstoupper(hisds s) {
function hi_sdscmp (line 784) | int hi_sdscmp(const hisds s1, const hisds s2) {
function hisds (line 812) | hisds *hi_sdssplitlen(const char *s, int len, const char *sep, int seple...
function hi_sdsfreesplitres (line 862) | void hi_sdsfreesplitres(hisds *tokens, int count) {
function hisds (line 875) | hisds hi_sdscatrepr(hisds s, const char *p, size_t len) {
function hi_hex_digit_to_int (line 902) | static int hi_hex_digit_to_int(char c) {
function hisds (line 943) | hisds *hi_sdssplitargs(const char *line, int *argc) {
function hisds (line 1070) | hisds hi_sdsmapchars(hisds s, const char *from, const char *to, size_t s...
function hisds (line 1086) | hisds hi_sdsjoin(char **argv, int argc, char *sep) {
function hisds (line 1098) | hisds hi_sdsjoinsds(hisds *argv, int argc, const char *sep, size_t seple...
function hi_sds_free (line 1116) | void hi_sds_free(void *ptr) { hi_s_free(ptr); }
function hi_sdsTest (line 1124) | int hi_sdsTest(void) {
function main (line 1289) | int main(void) {
FILE: deps/hiredis/sds.h
type hisdshdr5 (line 53) | struct __attribute__ ((__packed__)) hisdshdr5 {
type hisdshdr8 (line 57) | struct __attribute__ ((__packed__)) hisdshdr8 {
type hisdshdr16 (line 63) | struct __attribute__ ((__packed__)) hisdshdr16 {
type hisdshdr32 (line 69) | struct __attribute__ ((__packed__)) hisdshdr32 {
type hisdshdr64 (line 75) | struct __attribute__ ((__packed__)) hisdshdr64 {
function hi_sdslen (line 93) | static inline size_t hi_sdslen(const hisds s) {
function hi_sdsavail (line 110) | static inline size_t hi_sdsavail(const hisds s) {
function hi_sdssetlen (line 136) | static inline void hi_sdssetlen(hisds s, size_t newlen) {
function hi_sdsinclen (line 160) | static inline void hi_sdsinclen(hisds s, size_t inc) {
function hi_sdsalloc (line 186) | static inline size_t hi_sdsalloc(const hisds s) {
function hi_sdssetalloc (line 203) | static inline void hi_sdssetalloc(hisds s, size_t newlen) {
FILE: deps/hiredis/sockcompat.c
function _wsaErrorToErrno (line 35) | static int _wsaErrorToErrno(int err) {
function _updateErrno (line 97) | static void _updateErrno(int success) {
function _initWinsock (line 101) | static int _initWinsock() {
function win32_getaddrinfo (line 115) | int win32_getaddrinfo(const char *node, const char *service, const struc...
function win32_freeaddrinfo (line 149) | void win32_freeaddrinfo(struct addrinfo *res) {
function SOCKET (line 153) | SOCKET win32_socket(int domain, int type, int protocol) {
function win32_ioctl (line 165) | int win32_ioctl(SOCKET fd, unsigned long request, unsigned long *argp) {
function win32_bind (line 171) | int win32_bind(SOCKET sockfd, const struct sockaddr *addr, socklen_t add...
function win32_connect (line 177) | int win32_connect(SOCKET sockfd, const struct sockaddr *addr, socklen_t ...
function win32_getsockopt (line 198) | int win32_getsockopt(SOCKET sockfd, int level, int optname, void *optval...
function win32_setsockopt (line 227) | int win32_setsockopt(SOCKET sockfd, int level, int optname, const void *...
function win32_close (line 240) | int win32_close(SOCKET fd) {
function win32_recv (line 246) | ssize_t win32_recv(SOCKET sockfd, void *buf, size_t len, int flags) {
function win32_send (line 252) | ssize_t win32_send(SOCKET sockfd, const void *buf, size_t len, int flags) {
function win32_poll (line 258) | int win32_poll(struct pollfd *fds, nfds_t nfds, int timeout) {
function win32_redisKeepAlive (line 264) | int win32_redisKeepAlive(SOCKET sockfd, int interval_ms) {
FILE: deps/hiredis/sockcompat.h
type addrinfo (line 60) | struct addrinfo
type addrinfo (line 60) | struct addrinfo
type addrinfo (line 62) | struct addrinfo
type sockaddr (line 65) | struct sockaddr
type sockaddr (line 66) | struct sockaddr
type ULONG (line 72) | typedef ULONG nfds_t;
type pollfd (line 73) | struct pollfd
FILE: deps/hiredis/ssl.c
type redisSSLContext (line 66) | struct redisSSLContext {
type redisSSL (line 75) | typedef struct redisSSL {
type CRITICAL_SECTION (line 111) | typedef CRITICAL_SECTION sslLockType;
function sslLockInit (line 112) | static void sslLockInit(sslLockType* l) {
function sslLockAcquire (line 115) | static void sslLockAcquire(sslLockType* l) {
function sslLockRelease (line 118) | static void sslLockRelease(sslLockType* l) {
type pthread_mutex_t (line 122) | typedef pthread_mutex_t sslLockType;
function sslLockInit (line 123) | static void sslLockInit(sslLockType *l) {
function sslLockAcquire (line 126) | static void sslLockAcquire(sslLockType *l) {
function sslLockRelease (line 129) | static void sslLockRelease(sslLockType *l) {
function opensslDoLock (line 136) | static void opensslDoLock(int mode, int lkid, const char *f, int line) {
function initOpensslLocks (line 149) | static int initOpensslLocks(void) {
function redisInitOpenSSL (line 168) | int redisInitOpenSSL(void)
function redisFreeSSLContext (line 206) | void redisFreeSSLContext(redisSSLContext *ctx)
function redisSSLContext (line 229) | redisSSLContext *redisCreateSSLContext(const char *cacert_filename, cons...
function redisSSLContext (line 245) | redisSSLContext *redisCreateSSLContextWithOptions(redisSSLOptions *optio...
function redisSSLConnect (line 355) | static int redisSSLConnect(redisContext *c, SSL *ssl) {
function redisInitiateSSL (line 409) | int redisInitiateSSL(redisContext *c, SSL *ssl) {
function redisInitiateSSLWithContext (line 418) | int redisInitiateSSLWithContext(redisContext *c, redisSSLContext *redis_...
function maybeCheckWant (line 454) | static int maybeCheckWant(redisSSL *rssl, int rv) {
function redisSSLFree (line 474) | static void redisSSLFree(void *privctx){
function redisSSLRead (line 485) | static ssize_t redisSSLRead(redisContext *c, char *buf, size_t bufcap) {
function redisSSLWrite (line 527) | static ssize_t redisSSLWrite(redisContext *c) {
function redisSSLAsyncRead (line 549) | static void redisSSLAsyncRead(redisAsyncContext *ac) {
function redisSSLAsyncWrite (line 579) | static void redisSSLAsyncWrite(redisAsyncContext *ac) {
FILE: deps/hiredis/test.c
type connection_type (line 29) | enum connection_type {
type config (line 36) | struct config {
type privdata (line 58) | struct privdata {
type pushCounters (line 62) | struct pushCounters {
function millisleep (line 79) | static void millisleep(int ms)
function usec (line 88) | static long long usec(void) {
function get_redis_version (line 109) | void get_redis_version(redisContext *c, int *majorptr, int *minorptr) {
function redisContext (line 144) | static redisContext *select_database(redisContext *c) {
function send_hello (line 167) | static void send_hello(redisContext *c, int version) {
function send_client_tracking (line 178) | static void send_client_tracking(redisContext *c, const char *str) {
function disconnect (line 186) | static int disconnect(redisContext *c, int keep_fd) {
function do_ssl_handshake (line 204) | static void do_ssl_handshake(redisContext *c) {
function redisContext (line 217) | static redisContext *do_connect(struct config config) {
function do_reconnect (line 254) | static void do_reconnect(redisContext *c, struct config config) {
function test_format_commands (line 262) | static void test_format_commands(void) {
function test_append_formatted_commands (line 386) | static void test_append_formatted_commands(struct config config) {
function test_tcp_options (line 408) | static void test_tcp_options(struct config cfg) {
function test_reply_reader (line 427) | static void test_reply_reader(void) {
function test_free_null (line 821) | static void test_free_null(void) {
function test_allocator_injection (line 858) | static void test_allocator_injection(void) {
function test_blocking_connection_errors (line 892) | static void test_blocking_connection_errors(void) {
function push_handler (line 950) | void push_handler(void *privdata, void *r) {
function push_handler_async (line 971) | void push_handler_async(redisAsyncContext *ac, void *reply) {
function test_resp3_push_handler (line 976) | static void test_resp3_push_handler(redisContext *c) {
function redisOptions (line 1050) | redisOptions get_redis_tcp_options(struct config config) {
function test_resp3_push_options (line 1056) | static void test_resp3_push_options(struct config config) {
function free_privdata (line 1095) | void free_privdata(void *privdata) {
function test_privdata_hooks (line 1100) | static void test_privdata_hooks(struct config config) {
function test_blocking_connection (line 1116) | static void test_blocking_connection(struct config config) {
function detect_debug_sleep (line 1214) | static int detect_debug_sleep(redisContext *c) {
function test_blocking_connection_timeouts (line 1230) | static void test_blocking_connection_timeouts(struct config config) {
function test_blocking_io_errors (line 1296) | static void test_blocking_io_errors(struct config config) {
function test_invalid_timeout_errors (line 1342) | static void test_invalid_timeout_errors(struct config config) {
function test_throughput (line 1390) | static void test_throughput(struct config config) {
type event_base (line 1582) | struct event_base
type TestState (line 1584) | typedef struct TestState {
function async_disconnect (line 1592) | void async_disconnect(redisAsyncContext *ac) {
function timeout_cb (line 1598) | void timeout_cb(int fd, short event, void *arg) {
function unexpected_cb (line 1605) | void unexpected_cb(redisAsyncContext *ac, void *r, void *privdata) {
function publish_msg (line 1612) | void publish_msg(redisOptions *options, const char* channel, const char*...
function integer_cb (line 1622) | void integer_cb(redisAsyncContext *ac, void *r, void *privdata) {
function subscribe_cb (line 1633) | void subscribe_cb(redisAsyncContext *ac, void *r, void *privdata) {
function array_cb (line 1669) | void array_cb(redisAsyncContext *ac, void *r, void *privdata) {
function null_cb (line 1678) | void null_cb(redisAsyncContext *ac, void *r, void *privdata) {
function test_pubsub_handling (line 1685) | static void test_pubsub_handling(struct config config) {
function unexpected_push_cb (line 1719) | void unexpected_push_cb(redisAsyncContext *ac, void *r) {
function test_pubsub_handling_resp3 (line 1725) | static void test_pubsub_handling_resp3(struct config config) {
function subscribe_with_timeout_cb (line 1772) | void subscribe_with_timeout_cb(redisAsyncContext *ac, void *r, void *pri...
function test_command_timeout_during_pubsub (line 1806) | static void test_command_timeout_during_pubsub(struct config config) {
function subscribe_channel_a_cb (line 1847) | void subscribe_channel_a_cb(redisAsyncContext *ac, void *r, void *privda...
function subscribe_channel_b_cb (line 1884) | void subscribe_channel_b_cb(redisAsyncContext *ac, void *r, void *privda...
function test_pubsub_multiple_channels (line 1911) | static void test_pubsub_multiple_channels(struct config config) {
function monitor_cb (line 1946) | void monitor_cb(redisAsyncContext *ac, void *r, void *privdata) {
function test_monitor (line 1988) | static void test_monitor(struct config config) {
type astest_no (line 2025) | typedef enum astest_no
type _astest (line 2036) | struct _astest {
type _astest (line 2049) | struct _astest
function asCleanup (line 2052) | static void asCleanup(void* data)
type redisAsyncContext (line 2058) | struct redisAsyncContext
function connectCallback (line 2060) | static void connectCallback(redisAsyncContext *c, int status) {
function disconnectCallback (line 2079) | static void disconnectCallback(const redisAsyncContext *c, int status) {
function commandCallback (line 2089) | static void commandCallback(struct redisAsyncContext *ac, void* _reply, ...
function redisAsyncContext (line 2118) | static redisAsyncContext *do_aconnect(struct config config, astest_no te...
function as_printerr (line 2158) | static void as_printerr(void) {
function test_async_polling (line 2168) | static void test_async_polling(struct config config) {
function main (line 2266) | int main(int argc, char **argv) {
FILE: deps/hiredis/win32.h
function c99_vsnprintf (line 26) | __inline int c99_vsnprintf(char* str, size_t size, const char* format, v...
function c99_snprintf (line 38) | __inline int c99_snprintf(char* str, size_t size, const char* format, ...)
FILE: deps/jemalloc/include/jemalloc/internal/activity_callback.h
type activity_callback_thunk_t (line 17) | typedef struct activity_callback_thunk_s activity_callback_thunk_t;
type activity_callback_thunk_s (line 18) | struct activity_callback_thunk_s {
FILE: deps/jemalloc/include/jemalloc/internal/arena_inlines_a.h
function arena_ind_get (line 4) | static inline unsigned
function arena_internal_add (line 9) | static inline void
function arena_internal_sub (line 14) | static inline void
function arena_internal_get (line 19) | static inline size_t
FILE: deps/jemalloc/include/jemalloc/internal/arena_inlines_b.h
function arena_t (line 14) | static inline arena_t *
function JEMALLOC_ALWAYS_INLINE (line 20) | JEMALLOC_ALWAYS_INLINE arena_t *
function JEMALLOC_ALWAYS_INLINE (line 41) | JEMALLOC_ALWAYS_INLINE void
function JEMALLOC_ALWAYS_INLINE (line 74) | JEMALLOC_ALWAYS_INLINE void
function JEMALLOC_ALWAYS_INLINE (line 96) | JEMALLOC_ALWAYS_INLINE void
function JEMALLOC_ALWAYS_INLINE (line 108) | JEMALLOC_ALWAYS_INLINE void
function JEMALLOC_ALWAYS_INLINE (line 117) | JEMALLOC_ALWAYS_INLINE void
function JEMALLOC_ALWAYS_INLINE (line 139) | JEMALLOC_ALWAYS_INLINE void
function JEMALLOC_ALWAYS_INLINE (line 144) | JEMALLOC_ALWAYS_INLINE void *
function JEMALLOC_ALWAYS_INLINE (line 165) | JEMALLOC_ALWAYS_INLINE arena_t *
function JEMALLOC_ALWAYS_INLINE (line 172) | JEMALLOC_ALWAYS_INLINE size_t
function JEMALLOC_ALWAYS_INLINE (line 182) | JEMALLOC_ALWAYS_INLINE size_t
function JEMALLOC_ALWAYS_INLINE (line 213) | JEMALLOC_ALWAYS_INLINE bool
function arena_dalloc_large_no_tcache (line 242) | static inline void
function arena_dalloc_no_tcache (line 257) | static inline void
function JEMALLOC_ALWAYS_INLINE (line 280) | JEMALLOC_ALWAYS_INLINE void
function JEMALLOC_ALWAYS_INLINE (line 301) | JEMALLOC_ALWAYS_INLINE void
function arena_sdalloc_no_tcache (line 339) | static inline void
function JEMALLOC_ALWAYS_INLINE (line 378) | JEMALLOC_ALWAYS_INLINE void
function arena_cache_oblivious_randomize (line 426) | static inline void
type arena_dalloc_bin_locked_info_t (line 458) | typedef struct arena_dalloc_bin_locked_info_s arena_dalloc_bin_locked_in...
type arena_dalloc_bin_locked_info_s (line 459) | struct arena_dalloc_bin_locked_info_s {
function JEMALLOC_ALWAYS_INLINE (line 465) | JEMALLOC_ALWAYS_INLINE size_t
function JEMALLOC_ALWAYS_INLINE (line 487) | JEMALLOC_ALWAYS_INLINE void
function JEMALLOC_ALWAYS_INLINE (line 503) | JEMALLOC_ALWAYS_INLINE bool
function JEMALLOC_ALWAYS_INLINE (line 534) | JEMALLOC_ALWAYS_INLINE void
function bin_t (line 544) | static inline bin_t *
FILE: deps/jemalloc/include/jemalloc/internal/arena_stats.h
type arena_stats_large_s (line 13) | struct arena_stats_large_s
type arena_stats_large_s (line 14) | struct arena_stats_large_s {
type arena_stats_t (line 45) | typedef struct arena_stats_s arena_stats_t;
type arena_stats_s (line 46) | struct arena_stats_s {
function arena_stats_init (line 87) | static inline bool
function arena_stats_large_flush_nrequests_add (line 102) | static inline void
FILE: deps/jemalloc/include/jemalloc/internal/arena_structs.h
type arena_s (line 20) | struct arena_s {
FILE: deps/jemalloc/include/jemalloc/internal/arena_types.h
type arena_decay_t (line 12) | typedef struct arena_decay_s arena_decay_t;
type arena_t (line 13) | typedef struct arena_s arena_t;
type percpu_arena_mode_t (line 15) | typedef enum {
type arena_config_s (line 44) | struct arena_config_s {
type arena_config_t (line 54) | typedef struct arena_config_s arena_config_t;
FILE: deps/jemalloc/include/jemalloc/internal/atomic_gcc_atomic.h
type atomic_memory_order_t (line 8) | typedef enum {
function ATOMIC_INLINE (line 16) | ATOMIC_INLINE int
function ATOMIC_INLINE (line 34) | ATOMIC_INLINE void
FILE: deps/jemalloc/include/jemalloc/internal/atomic_gcc_sync.h
type atomic_memory_order_t (line 6) | typedef enum {
function ATOMIC_INLINE (line 14) | ATOMIC_INLINE void
function ATOMIC_INLINE (line 65) | ATOMIC_INLINE void
function ATOMIC_INLINE (line 75) | ATOMIC_INLINE void
FILE: deps/jemalloc/include/jemalloc/internal/atomic_msvc.h
type atomic_memory_order_t (line 6) | typedef enum {
type atomic_repr_0_t (line 14) | typedef char atomic_repr_0_t;
type atomic_repr_1_t (line 15) | typedef short atomic_repr_1_t;
type atomic_repr_2_t (line 16) | typedef long atomic_repr_2_t;
type __int64 (line 17) | typedef __int64 atomic_repr_3_t;
function ATOMIC_INLINE (line 19) | ATOMIC_INLINE void
FILE: deps/jemalloc/include/jemalloc/internal/background_thread_inlines.h
function JEMALLOC_ALWAYS_INLINE (line 4) | JEMALLOC_ALWAYS_INLINE bool
function JEMALLOC_ALWAYS_INLINE (line 9) | JEMALLOC_ALWAYS_INLINE void
function JEMALLOC_ALWAYS_INLINE (line 15) | JEMALLOC_ALWAYS_INLINE background_thread_info_t *
function JEMALLOC_ALWAYS_INLINE (line 21) | JEMALLOC_ALWAYS_INLINE background_thread_info_t *
function JEMALLOC_ALWAYS_INLINE (line 26) | JEMALLOC_ALWAYS_INLINE uint64_t
function JEMALLOC_ALWAYS_INLINE (line 34) | JEMALLOC_ALWAYS_INLINE void
function JEMALLOC_ALWAYS_INLINE (line 43) | JEMALLOC_ALWAYS_INLINE bool
FILE: deps/jemalloc/include/jemalloc/internal/background_thread_structs.h
type background_thread_state_t (line 25) | typedef enum {
type background_thread_info_s (line 32) | struct background_thread_info_s {
type background_thread_info_t (line 56) | typedef struct background_thread_info_s background_thread_info_t;
type background_thread_stats_s (line 58) | struct background_thread_stats_s {
type background_thread_stats_t (line 64) | typedef struct background_thread_stats_s background_thread_stats_t;
FILE: deps/jemalloc/include/jemalloc/internal/base.h
type metadata_thp_mode_e (line 8) | enum metadata_thp_mode_e {
type metadata_thp_mode_t (line 22) | typedef enum metadata_thp_mode_e metadata_thp_mode_t;
type base_block_t (line 30) | typedef struct base_block_s base_block_t;
type base_block_s (line 31) | struct base_block_s {
type base_t (line 42) | typedef struct base_s base_t;
type base_s (line 43) | struct base_s {
function base_ind_get (line 83) | static inline unsigned
function metadata_thp_enabled (line 88) | static inline bool
FILE: deps/jemalloc/include/jemalloc/internal/bin.h
type bin_t (line 14) | typedef struct bin_s bin_t;
type bin_s (line 15) | struct bin_s {
type bins_t (line 45) | typedef struct bins_s bins_t;
type bins_s (line 46) | struct bins_s {
function bin_stats_merge (line 64) | static inline void
FILE: deps/jemalloc/include/jemalloc/internal/bin_info.h
type bin_info_t (line 25) | typedef struct bin_info_s bin_info_t;
type bin_info_s (line 26) | struct bin_info_s {
FILE: deps/jemalloc/include/jemalloc/internal/bin_stats.h
type bin_stats_t (line 6) | typedef struct bin_stats_s bin_stats_t;
type bin_stats_s (line 7) | struct bin_stats_s {
type bin_stats_data_t (line 52) | typedef struct bin_stats_data_s bin_stats_data_t;
type bin_stats_data_s (line 53) | struct bin_stats_data_s {
FILE: deps/jemalloc/include/jemalloc/internal/bin_types.h
type tsd_binshards_t (line 12) | typedef struct tsd_binshards_s tsd_binshards_t;
type tsd_binshards_s (line 13) | struct tsd_binshards_s {
FILE: deps/jemalloc/include/jemalloc/internal/bit_util.h
function ffs_llu (line 19) | static inline unsigned
function ffs_lu (line 25) | static inline unsigned
function ffs_u (line 31) | static inline unsigned
function fls_llu_slow (line 61) | static inline unsigned
function fls_lu_slow (line 66) | static inline unsigned
function fls_u_slow (line 71) | static inline unsigned
function fls_llu (line 79) | static inline unsigned
function fls_lu (line 97) | static inline unsigned
function fls_u (line 103) | static inline unsigned
function fls_llu (line 147) | unsigned
function fls_lu (line 152) | static inline unsigned
function fls_u (line 157) | static inline unsigned
function fls_llu (line 166) | static inline unsigned
function fls_lu (line 171) | static inline unsigned
function fls_u (line 176) | static inline unsigned
function popcount_u_slow (line 230) | unsigned
function popcount_lu_slow (line 235) | static inline unsigned
function popcount_llu_slow (line 240) | static inline unsigned
function popcount_u (line 247) | static inline unsigned
function popcount_lu (line 256) | static inline unsigned
function popcount_llu (line 265) | static inline unsigned
function cfs_lu (line 279) | static inline size_t
function ffs_zu (line 287) | static inline unsigned
function fls_zu (line 300) | static inline unsigned
function ffs_u64 (line 314) | static inline unsigned
function fls_u64 (line 325) | static inline unsigned
function ffs_u32 (line 336) | static inline unsigned
function fls_u32 (line 346) | static inline unsigned
function pow2_ceil_u64 (line 356) | static inline uint64_t
function pow2_ceil_u32 (line 370) | static inline uint32_t
function pow2_ceil_zu (line 382) | static inline size_t
function lg_floor (line 391) | static inline unsigned
function lg_ceil (line 401) | static inline unsigned
FILE: deps/jemalloc/include/jemalloc/internal/bitmap.h
type bitmap_t (line 7) | typedef unsigned long bitmap_t;
type bitmap_info_t (line 151) | typedef struct bitmap_info_s {
function bitmap_full (line 174) | static inline bool
function bitmap_get (line 193) | static inline bool
function bitmap_set (line 204) | static inline void
function bitmap_ffu (line 240) | static inline size_t
function bitmap_sfu (line 299) | static inline size_t
function bitmap_unset (line 329) | static inline void
FILE: deps/jemalloc/include/jemalloc/internal/buf_writer.h
type buf_writer_t (line 13) | typedef struct {
FILE: deps/jemalloc/include/jemalloc/internal/cache_bin.h
type cache_bin_sz_t (line 21) | typedef uint16_t cache_bin_sz_t;
type cache_bin_stats_t (line 49) | typedef struct cache_bin_stats_s cache_bin_stats_t;
type cache_bin_stats_s (line 50) | struct cache_bin_stats_s {
type cache_bin_info_t (line 62) | typedef struct cache_bin_info_s cache_bin_info_t;
type cache_bin_info_s (line 63) | struct cache_bin_info_s {
type cache_bin_t (line 81) | typedef struct cache_bin_s cache_bin_t;
type cache_bin_s (line 82) | struct cache_bin_s {
type cache_bin_array_descriptor_t (line 133) | typedef struct cache_bin_array_descriptor_s cache_bin_array_descriptor_t;
type cache_bin_array_descriptor_s (line 134) | struct cache_bin_array_descriptor_s {
function cache_bin_array_descriptor_init (line 144) | static inline void
function JEMALLOC_ALWAYS_INLINE (line 151) | JEMALLOC_ALWAYS_INLINE bool
function cache_bin_sz_t (line 172) | static inline cache_bin_sz_t
function cache_bin_assert_earlier (line 183) | static inline void
function cache_bin_diff (line 196) | static inline uint16_t
function cache_bin_sz_t (line 214) | static inline cache_bin_sz_t
function cache_bin_sz_t (line 237) | static inline cache_bin_sz_t
function cache_bin_low_bits_low_bound_get (line 276) | static inline uint16_t
function cache_bin_assert_empty (line 300) | static inline void
function cache_bin_sz_t (line 311) | static inline cache_bin_sz_t
function cache_bin_sz_t (line 318) | static inline cache_bin_sz_t
function cache_bin_low_water_set (line 334) | static inline void
function cache_bin_low_water_adjust (line 339) | static inline void
function JEMALLOC_ALWAYS_INLINE (line 347) | JEMALLOC_ALWAYS_INLINE void *
function JEMALLOC_ALWAYS_INLINE (line 396) | JEMALLOC_ALWAYS_INLINE void *
function JEMALLOC_ALWAYS_INLINE (line 406) | JEMALLOC_ALWAYS_INLINE void *
function JEMALLOC_ALWAYS_INLINE (line 411) | JEMALLOC_ALWAYS_INLINE cache_bin_sz_t
function JEMALLOC_ALWAYS_INLINE (line 425) | JEMALLOC_ALWAYS_INLINE bool
function JEMALLOC_ALWAYS_INLINE (line 433) | JEMALLOC_ALWAYS_INLINE bool
function JEMALLOC_ALWAYS_INLINE (line 448) | JEMALLOC_ALWAYS_INLINE bool
function JEMALLOC_ALWAYS_INLINE (line 476) | JEMALLOC_ALWAYS_INLINE cache_bin_sz_t
function JEMALLOC_ALWAYS_INLINE (line 504) | JEMALLOC_ALWAYS_INLINE cache_bin_sz_t
function cache_bin_nitems_get_remote (line 516) | static inline void
type cache_bin_ptr_array_t (line 546) | typedef struct cache_bin_ptr_array_s cache_bin_ptr_array_t;
type cache_bin_ptr_array_s (line 547) | struct cache_bin_ptr_array_s {
function cache_bin_init_ptr_array_for_fill (line 569) | static inline void
function cache_bin_finish_fill (line 581) | static inline void
function cache_bin_init_ptr_array_for_flush (line 597) | static inline void
function cache_bin_finish_flush (line 605) | static inline void
function cache_bin_init_ptr_array_for_stashed (line 615) | static inline void
function cache_bin_finish_flush_stashed (line 627) | static inline void
FILE: deps/jemalloc/include/jemalloc/internal/ckh.h
type ckhc_t (line 28) | typedef struct {
type ckh_t (line 34) | typedef struct {
FILE: deps/jemalloc/include/jemalloc/internal/counter.h
type counter_accum_t (line 6) | typedef struct counter_accum_s {
function JEMALLOC_ALWAYS_INLINE (line 12) | JEMALLOC_ALWAYS_INLINE bool
FILE: deps/jemalloc/include/jemalloc/internal/ctl.h
type ctl_node_t (line 14) | typedef struct ctl_node_s {
type ctl_named_node_t (line 18) | typedef struct ctl_named_node_s {
type ctl_indexed_node_t (line 28) | typedef struct ctl_indexed_node_s {
type ctl_arena_stats_t (line 34) | typedef struct ctl_arena_stats_s {
type ctl_stats_t (line 52) | typedef struct ctl_stats_s {
type ctl_arena_t (line 65) | typedef struct ctl_arena_s ctl_arena_t;
type ctl_arena_s (line 66) | struct ctl_arena_s {
type ctl_arenas_t (line 84) | typedef struct ctl_arenas_s {
FILE: deps/jemalloc/include/jemalloc/internal/decay.h
type decay_t (line 23) | typedef struct decay_s decay_t;
type decay_s (line 24) | struct decay_s {
function decay_ms_read (line 90) | static inline ssize_t
function decay_npages_limit_get (line 99) | static inline size_t
function decay_epoch_npages_delta (line 105) | static inline size_t
function decay_epoch_duration_ns (line 116) | static inline uint64_t
function decay_immediately (line 121) | static inline bool
function decay_disabled (line 127) | static inline bool
function decay_gradually (line 134) | static inline bool
FILE: deps/jemalloc/include/jemalloc/internal/div.h
type div_info_t (line 15) | typedef struct div_info_s div_info_t;
type div_info_s (line 16) | struct div_info_s {
function div_compute (line 25) | static inline size_t
FILE: deps/jemalloc/include/jemalloc/internal/ecache.h
type ecache_t (line 8) | typedef struct ecache_s ecache_t;
type ecache_s (line 9) | struct ecache_s {
function ecache_npages_get (line 24) | static inline size_t
function ecache_nextents_get (line 31) | static inline size_t
function ecache_nbytes_get (line 38) | static inline size_t
function ecache_ind_get (line 44) | static inline unsigned
FILE: deps/jemalloc/include/jemalloc/internal/edata.h
type extent_state_e (line 22) | enum extent_state_e {
type extent_state_t (line 31) | typedef enum extent_state_e extent_state_t;
type extent_head_state_e (line 33) | enum extent_head_state_e {
type extent_head_state_t (line 37) | typedef enum extent_head_state_e extent_head_state_t;
type extent_pai_e (line 43) | enum extent_pai_e {
type extent_pai_t (line 47) | typedef enum extent_pai_e extent_pai_t;
type e_prof_info_s (line 49) | struct e_prof_info_s {
type e_prof_info_t (line 63) | typedef struct e_prof_info_s e_prof_info_t;
type edata_map_info_t (line 76) | typedef struct edata_map_info_s edata_map_info_t;
type edata_map_info_s (line 77) | struct edata_map_info_s {
type edata_cmp_summary_t (line 82) | typedef struct edata_cmp_summary_s edata_cmp_summary_t;
type edata_cmp_summary_s (line 83) | struct edata_cmp_summary_s {
type edata_t (line 89) | typedef struct edata_s edata_t;
type edata_s (line 92) | struct edata_s {
function edata_arena_ind_get (line 256) | static inline unsigned
function szind_t (line 265) | static inline szind_t
function szind_t (line 273) | static inline szind_t
function edata_usize_get (line 280) | static inline size_t
function edata_binshard_get (line 285) | static inline unsigned
function edata_sn_get (line 293) | static inline uint64_t
function extent_state_t (line 298) | static inline extent_state_t
function edata_guarded_get (line 304) | static inline bool
function edata_zeroed_get (line 310) | static inline bool
function edata_committed_get (line 316) | static inline bool
function extent_pai_t (line 322) | static inline extent_pai_t
function edata_slab_get (line 328) | static inline bool
function edata_nfree_get (line 334) | static inline unsigned
function edata_size_get (line 355) | static inline size_t
function edata_esn_get (line 360) | static inline size_t
function edata_bsize_get (line 365) | static inline size_t
function hpdata_t (line 370) | static inline hpdata_t *
function slab_data_t (line 393) | static inline slab_data_t *
function slab_data_t (line 399) | static inline const slab_data_t *
function prof_tctx_t (line 405) | static inline prof_tctx_t *
function nstime_t (line 411) | static inline const nstime_t *
function edata_prof_alloc_size_get (line 416) | static inline size_t
function prof_recent_t (line 421) | static inline prof_recent_t *
function edata_arena_ind_set (line 427) | static inline void
function edata_binshard_set (line 433) | static inline void
function edata_addr_set (line 441) | static inline void
function edata_size_set (line 446) | static inline void
function edata_esn_set (line 452) | static inline void
function edata_bsize_set (line 458) | static inline void
function edata_ps_set (line 463) | static inline void
function edata_szind_set (line 469) | static inline void
function edata_nfree_set (line 476) | static inline void
function edata_nfree_binshard_set (line 483) | static inline void
function edata_nfree_inc (line 493) | static inline void
function edata_nfree_dec (line 499) | static inline void
function edata_nfree_sub (line 505) | static inline void
function edata_sn_set (line 511) | static inline void
function edata_state_set (line 516) | static inline void
function edata_guarded_set (line 522) | static inline void
function edata_zeroed_set (line 528) | static inline void
function edata_committed_set (line 534) | static inline void
function edata_pai_set (line 540) | static inline void
function edata_slab_set (line 546) | static inline void
function edata_prof_tctx_set (line 552) | static inline void
function edata_prof_alloc_time_set (line 557) | static inline void
function edata_prof_alloc_size_set (line 562) | static inline void
function edata_prof_recent_alloc_set_dont_call_directly (line 567) | static inline void
function edata_is_head_get (line 574) | static inline bool
function edata_is_head_set (line 580) | static inline void
function edata_state_in_transition (line 586) | static inline bool
function edata_init (line 598) | static inline void
function edata_binit (line 621) | static inline void
function edata_esn_comp (line 641) | static inline int
function edata_ead_comp (line 649) | static inline int
function edata_cmp_summary_t (line 657) | static inline edata_cmp_summary_t
function edata_cmp_summary_comp (line 663) | static inline int
function edata_snad_comp (line 674) | static inline int
function edata_esnead_comp (line 682) | static inline int
FILE: deps/jemalloc/include/jemalloc/internal/edata_cache.h
type edata_cache_t (line 15) | typedef struct edata_cache_s edata_cache_t;
type edata_cache_s (line 16) | struct edata_cache_s {
type edata_cache_fast_t (line 36) | typedef struct edata_cache_fast_s edata_cache_fast_t;
type edata_cache_fast_s (line 37) | struct edata_cache_fast_s {
FILE: deps/jemalloc/include/jemalloc/internal/ehooks.h
type ehooks_t (line 21) | typedef struct ehooks_s ehooks_t;
type ehooks_s (line 22) | struct ehooks_s {
function ehooks_pre_reentrancy (line 84) | static inline void
function ehooks_post_reentrancy (line 90) | static inline void
function ehooks_ind_get (line 99) | static inline unsigned
function ehooks_set_extent_hooks_ptr (line 104) | static inline void
function extent_hooks_t (line 109) | static inline extent_hooks_t *
function ehooks_are_default (line 114) | static inline bool
function ehooks_dalloc_will_fail (line 125) | static inline bool
function ehooks_split_will_fail (line 134) | static inline bool
function ehooks_merge_will_fail (line 139) | static inline bool
function ehooks_guard_will_fail (line 144) | static inline bool
function ehooks_debug_zero_check (line 161) | static inline void
function ehooks_dalloc (line 213) | static inline bool
function ehooks_destroy (line 230) | static inline void
function ehooks_commit (line 246) | static inline bool
function ehooks_decommit (line 267) | static inline bool
function ehooks_purge_lazy (line 284) | static inline bool
function ehooks_purge_forced (line 304) | static inline bool
function ehooks_split (line 332) | static inline bool
function ehooks_merge (line 349) | static inline bool
function ehooks_zero (line 366) | static inline void
function ehooks_guard (line 382) | static inline bool
function ehooks_unguard (line 397) | static inline bool
FILE: deps/jemalloc/include/jemalloc/internal/emap.h
type emap_t (line 16) | typedef struct emap_s emap_t;
type emap_s (line 17) | struct emap_s {
type emap_alloc_ctx_t (line 22) | typedef struct emap_alloc_ctx_t emap_alloc_ctx_t;
type emap_alloc_ctx_t (line 23) | struct emap_alloc_ctx_t {
type emap_full_alloc_ctx_t (line 28) | typedef struct emap_full_alloc_ctx_s emap_full_alloc_ctx_t;
type emap_full_alloc_ctx_s (line 29) | struct emap_full_alloc_ctx_s {
type emap_prepare_t (line 99) | typedef struct emap_prepare_s emap_prepare_t;
type emap_prepare_s (line 100) | struct emap_prepare_s {
function emap_assert_mapped (line 140) | static inline void
function emap_assert_not_mapped (line 149) | static inline void
function JEMALLOC_ALWAYS_INLINE (line 156) | JEMALLOC_ALWAYS_INLINE bool
function JEMALLOC_ALWAYS_INLINE (line 168) | JEMALLOC_ALWAYS_INLINE bool
function JEMALLOC_ALWAYS_INLINE (line 204) | JEMALLOC_ALWAYS_INLINE void
function JEMALLOC_ALWAYS_INLINE (line 216) | JEMALLOC_ALWAYS_INLINE void
function JEMALLOC_ALWAYS_INLINE (line 225) | JEMALLOC_ALWAYS_INLINE edata_t *
function JEMALLOC_ALWAYS_INLINE (line 233) | JEMALLOC_ALWAYS_INLINE void
function JEMALLOC_ALWAYS_INLINE (line 245) | JEMALLOC_ALWAYS_INLINE void
function JEMALLOC_ALWAYS_INLINE (line 262) | JEMALLOC_ALWAYS_INLINE bool
function JEMALLOC_ALWAYS_INLINE (line 283) | JEMALLOC_ALWAYS_INLINE bool
type emap_batch_lookup_result_t (line 313) | typedef union emap_batch_lookup_result_u emap_batch_lookup_result_t;
function JEMALLOC_ALWAYS_INLINE (line 319) | JEMALLOC_ALWAYS_INLINE void
FILE: deps/jemalloc/include/jemalloc/internal/emitter.h
type emitter_output_t (line 6) | typedef enum emitter_output_e emitter_output_t;
type emitter_output_e (line 7) | enum emitter_output_e {
type emitter_justify_t (line 13) | typedef enum emitter_justify_e emitter_justify_t;
type emitter_justify_e (line 14) | enum emitter_justify_e {
type emitter_type_t (line 21) | typedef enum emitter_type_e emitter_type_t;
type emitter_type_e (line 22) | enum emitter_type_e {
type emitter_col_t (line 39) | typedef struct emitter_col_s emitter_col_t;
type emitter_col_s (line 40) | struct emitter_col_s {
type emitter_row_t (line 62) | typedef struct emitter_row_s emitter_row_t;
type emitter_row_s (line 63) | struct emitter_row_s {
type emitter_t (line 67) | typedef struct emitter_s emitter_t;
type emitter_s (line 68) | struct emitter_s {
function emitter_outputs_json (line 80) | static inline bool
function emitter_printf (line 88) | static inline void
function emitter_print_value (line 124) | static inline void
function emitter_nest_inc (line 194) | static inline void
function emitter_nest_dec (line 200) | static inline void
function emitter_indent (line 206) | static inline void
function emitter_json_key_prefix (line 222) | static inline void
function emitter_init (line 241) | static inline void
function emitter_json_key (line 259) | static inline void
function emitter_json_value (line 269) | static inline void
function emitter_json_kv (line 281) | static inline void
function emitter_json_array_begin (line 288) | static inline void
function emitter_json_array_kv_begin (line 298) | static inline void
function emitter_json_array_end (line 304) | static inline void
function emitter_json_object_begin (line 317) | static inline void
function emitter_json_object_kv_begin (line 327) | static inline void
function emitter_json_object_end (line 333) | static inline void
function emitter_table_dict_begin (line 350) | static inline void
function emitter_table_dict_end (line 359) | static inline void
function emitter_table_kv_note (line 366) | static inline void
function emitter_table_kv (line 387) | static inline void
function emitter_table_printf (line 397) | static inline void
function emitter_table_row (line 407) | static inline void
function emitter_row_init (line 420) | static inline void
function emitter_col_init (line 425) | static inline void
function emitter_kv_note (line 441) | static inline void
function emitter_kv (line 456) | static inline void
function emitter_dict_begin (line 463) | static inline void
function emitter_dict_end (line 474) | static inline void
function emitter_begin (line 483) | static inline void
function emitter_end (line 500) | static inline void
FILE: deps/jemalloc/include/jemalloc/internal/eset.h
type eset_bin_t (line 18) | typedef struct eset_bin_s eset_bin_t;
type eset_bin_s (line 19) | struct eset_bin_s {
type eset_bin_stats_t (line 31) | typedef struct eset_bin_stats_s eset_bin_stats_t;
type eset_bin_stats_s (line 32) | struct eset_bin_stats_s {
type eset_t (line 37) | typedef struct eset_s eset_t;
type eset_s (line 38) | struct eset_s {
FILE: deps/jemalloc/include/jemalloc/internal/exp_grow.h
type exp_grow_t (line 4) | typedef struct exp_grow_s exp_grow_t;
type exp_grow_s (line 5) | struct exp_grow_s {
function exp_grow_size_prepare (line 21) | static inline bool
function exp_grow_size_commit (line 38) | static inline void
FILE: deps/jemalloc/include/jemalloc/internal/extent.h
function JEMALLOC_ALWAYS_INLINE (line 63) | JEMALLOC_ALWAYS_INLINE bool
function JEMALLOC_ALWAYS_INLINE (line 83) | JEMALLOC_ALWAYS_INLINE bool
FILE: deps/jemalloc/include/jemalloc/internal/extent_dss.h
type dss_prec_t (line 4) | typedef enum {
FILE: deps/jemalloc/include/jemalloc/internal/fb.h
type fb_group_t (line 12) | typedef unsigned long fb_group_t;
function fb_init (line 17) | static inline void
function fb_empty (line 23) | static inline bool
function fb_full (line 34) | static inline bool
function fb_get (line 50) | static inline bool
function fb_set (line 58) | static inline void
function fb_unset (line 66) | static inline void
function JEMALLOC_ALWAYS_INLINE (line 81) | JEMALLOC_ALWAYS_INLINE void
function JEMALLOC_ALWAYS_INLINE (line 123) | JEMALLOC_ALWAYS_INLINE void
function fb_set_range (line 134) | static inline void
function fb_unset_range (line 141) | static inline void
function JEMALLOC_ALWAYS_INLINE (line 147) | JEMALLOC_ALWAYS_INLINE void
function JEMALLOC_ALWAYS_INLINE (line 154) | JEMALLOC_ALWAYS_INLINE size_t
function JEMALLOC_ALWAYS_INLINE (line 162) | JEMALLOC_ALWAYS_INLINE size_t
function JEMALLOC_ALWAYS_INLINE (line 174) | JEMALLOC_ALWAYS_INLINE ssize_t
function fb_ffu (line 224) | static inline size_t
function fb_ffs (line 231) | static inline size_t
function fb_flu (line 241) | static inline ssize_t
function fb_fls (line 247) | static inline ssize_t
function JEMALLOC_ALWAYS_INLINE (line 254) | JEMALLOC_ALWAYS_INLINE bool
function fb_srange_iter (line 284) | static inline bool
function fb_srange_riter (line 295) | static inline bool
function fb_urange_iter (line 303) | static inline bool
function fb_urange_riter (line 311) | static inline bool
function JEMALLOC_ALWAYS_INLINE (line 318) | JEMALLOC_ALWAYS_INLINE size_t
function fb_srange_longest (line 333) | static inline size_t
function fb_urange_longest (line 338) | static inline size_t
function fb_bit_and (line 347) | static inline void
function fb_bit_or (line 356) | static inline void
function fb_bit_not (line 365) | static inline void
FILE: deps/jemalloc/include/jemalloc/internal/fxp.h
type fxp_t (line 23) | typedef uint32_t fxp_t;
function fxp_t (line 48) | static inline fxp_t
function fxp_t (line 53) | static inline fxp_t
function fxp_t (line 59) | static inline fxp_t
function fxp_t (line 70) | static inline fxp_t
function fxp_round_down (line 82) | static inline uint32_t
function fxp_round_nearest (line 87) | static inline uint32_t
function fxp_mul_frac (line 98) | static inline size_t
FILE: deps/jemalloc/include/jemalloc/internal/hash.h
function hash_rotl_32 (line 14) | static inline uint32_t
function hash_rotl_64 (line 19) | static inline uint64_t
function hash_get_block_32 (line 24) | static inline uint32_t
function hash_get_block_64 (line 37) | static inline uint64_t
function hash_fmix_32 (line 50) | static inline uint32_t
function hash_fmix_64 (line 61) | static inline uint64_t
function hash_x86_32 (line 72) | static inline uint32_t
function hash_x86_128 (line 122) | static inline void
function hash_x64_128 (line 224) | static inline void
function hash (line 304) | static inline void
FILE: deps/jemalloc/include/jemalloc/internal/hook.h
type hook_alloc_e (line 51) | enum hook_alloc_e {
type hook_alloc_t (line 68) | typedef enum hook_alloc_e hook_alloc_t;
type hook_dalloc_e (line 70) | enum hook_dalloc_e {
type hook_dalloc_t (line 82) | typedef enum hook_dalloc_e hook_dalloc_t;
type hook_expand_e (line 85) | enum hook_expand_e {
type hook_expand_t (line 90) | typedef enum hook_expand_e hook_expand_t;
type hooks_t (line 103) | typedef struct hooks_s hooks_t;
type hooks_s (line 104) | struct hooks_s {
type hook_ralloc_args_t (line 130) | typedef struct hook_ralloc_args_s hook_ralloc_args_t;
type hook_ralloc_args_s (line 131) | struct hook_ralloc_args_s {
FILE: deps/jemalloc/include/jemalloc/internal/hpa.h
type hpa_central_t (line 10) | typedef struct hpa_central_s hpa_central_t;
type hpa_central_s (line 11) | struct hpa_central_s {
type hpa_shard_nonderived_stats_t (line 41) | typedef struct hpa_shard_nonderived_stats_s hpa_shard_nonderived_stats_t;
type hpa_shard_nonderived_stats_s (line 42) | struct hpa_shard_nonderived_stats_s {
type hpa_shard_stats_t (line 73) | typedef struct hpa_shard_stats_s hpa_shard_stats_t;
type hpa_shard_stats_s (line 74) | struct hpa_shard_stats_s {
type hpa_shard_t (line 79) | typedef struct hpa_shard_s hpa_shard_t;
type hpa_shard_s (line 80) | struct hpa_shard_s {
FILE: deps/jemalloc/include/jemalloc/internal/hpa_hooks.h
type hpa_hooks_t (line 4) | typedef struct hpa_hooks_s hpa_hooks_t;
type hpa_hooks_s (line 5) | struct hpa_hooks_s {
FILE: deps/jemalloc/include/jemalloc/internal/hpa_opts.h
type hpa_shard_opts_t (line 11) | typedef struct hpa_shard_opts_s hpa_shard_opts_t;
type hpa_shard_opts_s (line 12) | struct hpa_shard_opts_s {
FILE: deps/jemalloc/include/jemalloc/internal/hpdata.h
type hpdata_t (line 20) | typedef struct hpdata_s hpdata_t;
type hpdata_s (line 22) | struct hpdata_s {
function hpdata_addr_set (line 131) | static inline void
function hpdata_age_get (line 137) | static inline uint64_t
function hpdata_age_set (line 142) | static inline void
function hpdata_huge_get (line 147) | static inline bool
function hpdata_alloc_allowed_get (line 152) | static inline bool
function hpdata_alloc_allowed_set (line 157) | static inline void
function hpdata_in_psset_alloc_container_get (line 162) | static inline bool
function hpdata_in_psset_alloc_container_set (line 167) | static inline void
function hpdata_purge_allowed_get (line 173) | static inline bool
function hpdata_purge_allowed_set (line 178) | static inline void
function hpdata_hugify_allowed_get (line 184) | static inline bool
function hpdata_allow_hugify (line 189) | static inline void
function nstime_t (line 196) | static inline nstime_t
function hpdata_disallow_hugify (line 201) | static inline void
function hpdata_in_psset_hugify_container_get (line 206) | static inline bool
function hpdata_in_psset_hugify_container_set (line 211) | static inline void
function hpdata_mid_purge_get (line 217) | static inline bool
function hpdata_mid_purge_set (line 222) | static inline void
function hpdata_mid_hugify_get (line 228) | static inline bool
function hpdata_mid_hugify_set (line 233) | static inline void
function hpdata_changing_state_get (line 239) | static inline bool
function hpdata_updating_get (line 245) | static inline bool
function hpdata_updating_set (line 250) | static inline void
function hpdata_in_psset_get (line 256) | static inline bool
function hpdata_in_psset_set (line 261) | static inline void
function hpdata_longest_free_range_get (line 267) | static inline size_t
function hpdata_longest_free_range_set (line 272) | static inline void
function hpdata_nactive_get (line 278) | static inline size_t
function hpdata_ntouched_get (line 283) | static inline size_t
function hpdata_ndirty_get (line 288) | static inline size_t
function hpdata_nretained_get (line 293) | static inline size_t
function hpdata_assert_empty (line 298) | static inline void
function hpdata_consistent (line 309) | static inline bool
function hpdata_assert_consistent (line 340) | static inline void
function hpdata_empty (line 345) | static inline bool
function hpdata_full (line 350) | static inline bool
type hpdata_purge_state_t (line 369) | typedef struct hpdata_purge_state_s hpdata_purge_state_t;
type hpdata_purge_state_s (line 370) | struct hpdata_purge_state_s {
FILE: deps/jemalloc/include/jemalloc/internal/inspect.h
type inspect_extent_util_stats_t (line 15) | typedef struct inspect_extent_util_stats_s inspect_extent_util_stats_t;
type inspect_extent_util_stats_s (line 16) | struct inspect_extent_util_stats_s {
type inspect_extent_util_stats_verbose_t (line 22) | typedef struct inspect_extent_util_stats_verbose_s
type inspect_extent_util_stats_verbose_s (line 25) | struct inspect_extent_util_stats_verbose_s {
FILE: deps/jemalloc/include/jemalloc/internal/jemalloc_internal_decls.h
function isblank (line 89) | static int
FILE: deps/jemalloc/include/jemalloc/internal/jemalloc_internal_inlines_a.h
function malloc_getcpu (line 11) | malloc_getcpu(void) {
function percpu_arena_choose (line 24) | JEMALLOC_ALWAYS_INLINE unsigned
function percpu_arena_ind_limit (line 45) | JEMALLOC_ALWAYS_INLINE unsigned
function arena_t (line 59) | static inline arena_t *
function JEMALLOC_ALWAYS_INLINE (line 74) | JEMALLOC_ALWAYS_INLINE bool
function JEMALLOC_ALWAYS_INLINE (line 92) | JEMALLOC_ALWAYS_INLINE tcache_t *
function JEMALLOC_ALWAYS_INLINE (line 101) | JEMALLOC_ALWAYS_INLINE tcache_slow_t *
function pre_reentrancy (line 110) | static inline void
function post_reentrancy (line 117) | static inline void
FILE: deps/jemalloc/include/jemalloc/internal/jemalloc_internal_inlines_b.h
function percpu_arena_update (line 6) | static inline void
function arena_t (line 31) | static inline arena_t *
function arena_t (line 86) | static inline arena_t *
function arena_t (line 91) | static inline arena_t *
function arena_is_auto (line 96) | static inline bool
FILE: deps/jemalloc/include/jemalloc/internal/jemalloc_internal_inlines_c.h
function JEMALLOC_ALWAYS_INLINE (line 29) | JEMALLOC_ALWAYS_INLINE arena_t *
function JEMALLOC_ALWAYS_INLINE (line 36) | JEMALLOC_ALWAYS_INLINE size_t
function JEMALLOC_ALWAYS_INLINE (line 43) | JEMALLOC_ALWAYS_INLINE void *
function JEMALLOC_ALWAYS_INLINE (line 62) | JEMALLOC_ALWAYS_INLINE void *
function JEMALLOC_ALWAYS_INLINE (line 68) | JEMALLOC_ALWAYS_INLINE void *
function JEMALLOC_ALWAYS_INLINE (line 88) | JEMALLOC_ALWAYS_INLINE void *
function JEMALLOC_ALWAYS_INLINE (line 94) | JEMALLOC_ALWAYS_INLINE void *
function JEMALLOC_ALWAYS_INLINE (line 100) | JEMALLOC_ALWAYS_INLINE size_t
function JEMALLOC_ALWAYS_INLINE (line 105) | JEMALLOC_ALWAYS_INLINE void
function JEMALLOC_ALWAYS_INLINE (line 123) | JEMALLOC_ALWAYS_INLINE void
function JEMALLOC_ALWAYS_INLINE (line 128) | JEMALLOC_ALWAYS_INLINE void
function JEMALLOC_ALWAYS_INLINE (line 136) | JEMALLOC_ALWAYS_INLINE void *
function JEMALLOC_ALWAYS_INLINE (line 175) | JEMALLOC_ALWAYS_INLINE void *
function JEMALLOC_ALWAYS_INLINE (line 198) | JEMALLOC_ALWAYS_INLINE void *
function JEMALLOC_ALWAYS_INLINE (line 205) | JEMALLOC_ALWAYS_INLINE bool
function JEMALLOC_ALWAYS_INLINE (line 224) | JEMALLOC_ALWAYS_INLINE void
function JEMALLOC_ALWAYS_INLINE (line 235) | JEMALLOC_ALWAYS_INLINE bool
function JEMALLOC_ALWAYS_INLINE (line 257) | JEMALLOC_ALWAYS_INLINE void *
function JEMALLOC_ALWAYS_INLINE (line 342) | JEMALLOC_ALWAYS_INLINE int
FILE: deps/jemalloc/include/jemalloc/internal/jemalloc_internal_types.h
type malloc_cpuid_t (line 7) | typedef int malloc_cpuid_t;
type zero_realloc_action_e (line 10) | enum zero_realloc_action_e {
type zero_realloc_action_t (line 18) | typedef enum zero_realloc_action_e zero_realloc_action_t;
type malloc_init_e (line 23) | enum malloc_init_e {
type malloc_init_t (line 29) | typedef enum malloc_init_e malloc_init_t;
FILE: deps/jemalloc/include/jemalloc/internal/lockedint.h
type locked_u64_t (line 10) | typedef struct locked_u64_s locked_u64_t;
type locked_u64_s (line 12) | struct locked_u64_s {
type locked_u64_s (line 17) | struct locked_u64_s {
type locked_zu_t (line 22) | typedef struct locked_zu_s locked_zu_t;
type locked_zu_s (line 23) | struct locked_zu_s {
function locked_read_u64 (line 57) | static inline uint64_t
function locked_inc_u64 (line 67) | static inline void
function locked_dec_u64 (line 78) | static inline void
function locked_inc_mod_u64 (line 92) | static inline bool
function locked_inc_u64_unsynchronized (line 126) | static inline void
function locked_read_u64_unsynchronized (line 136) | static inline uint64_t
function locked_init_u64_unsynchronized (line 145) | static inline void
function locked_read_zu (line 154) | static inline size_t
function locked_inc_zu (line 164) | static inline void
function locked_dec_zu (line 176) | static inline void
function locked_inc_zu_unsynchronized (line 190) | static inline void
function locked_read_atomic_zu (line 199) | static inline size_t
FILE: deps/jemalloc/include/jemalloc/internal/log.h
type log_var_t (line 41) | typedef struct log_var_s log_var_t;
type log_var_s (line 42) | struct log_var_s {
function log_impl_varargs (line 88) | static inline void
FILE: deps/jemalloc/include/jemalloc/internal/malloc_io.h
function malloc_write_fd (line 69) | static inline ssize_t
function malloc_read_fd (line 91) | static inline ssize_t
FILE: deps/jemalloc/include/jemalloc/internal/mutex.h
type malloc_mutex_lock_order_t (line 11) | typedef enum {
type malloc_mutex_t (line 21) | typedef struct malloc_mutex_s malloc_mutex_t;
type malloc_mutex_s (line 22) | struct malloc_mutex_s {
function malloc_mutex_lock_final (line 149) | static inline void
function malloc_mutex_trylock_final (line 155) | static inline bool
function mutex_owner_stats_update (line 160) | static inline void
function malloc_mutex_trylock (line 173) | static inline bool
function malloc_mutex_prof_merge (line 189) | static inline void
function malloc_mutex_lock (line 212) | static inline void
function malloc_mutex_unlock (line 225) | static inline void
function malloc_mutex_assert_owner (line 234) | static inline void
function malloc_mutex_assert_not_owner (line 239) | static inline void
function malloc_mutex_prof_copy (line 244) | static inline void
function malloc_mutex_prof_read (line 257) | static inline void
function malloc_mutex_prof_accum (line 265) | static inline void
function malloc_mutex_prof_max_update (line 288) | static inline void
FILE: deps/jemalloc/include/jemalloc/internal/mutex_prof.h
type mutex_prof_global_ind_t (line 19) | typedef enum {
type mutex_prof_arena_ind_t (line 40) | typedef enum {
type mutex_prof_data_t (line 85) | typedef struct {
FILE: deps/jemalloc/include/jemalloc/internal/nstime.h
type nstime_t (line 14) | typedef struct {
type prof_time_res_e (line 52) | enum prof_time_res_e {
type prof_time_res_t (line 56) | typedef enum prof_time_res_e prof_time_res_t;
function JEMALLOC_ALWAYS_INLINE (line 61) | JEMALLOC_ALWAYS_INLINE void
function JEMALLOC_ALWAYS_INLINE (line 66) | JEMALLOC_ALWAYS_INLINE bool
FILE: deps/jemalloc/include/jemalloc/internal/pa.h
type pa_central_t (line 23) | typedef struct pa_central_s pa_central_t;
type pa_central_s (line 24) | struct pa_central_s {
type pa_shard_stats_t (line 39) | typedef struct pa_shard_stats_s pa_shard_stats_t;
type pa_shard_stats_s (line 40) | struct pa_shard_stats_s {
type pa_shard_t (line 67) | typedef struct pa_shard_s pa_shard_t;
type pa_shard_s (line 68) | struct pa_shard_s {
function pa_shard_dont_decay_muzzy (line 121) | static inline bool
function ehooks_t (line 127) | static inline ehooks_t *
FILE: deps/jemalloc/include/jemalloc/internal/pac.h
type pac_purge_eagerness_e (line 18) | enum pac_purge_eagerness_e {
type pac_purge_eagerness_t (line 23) | typedef enum pac_purge_eagerness_e pac_purge_eagerness_t;
type pac_decay_stats_t (line 25) | typedef struct pac_decay_stats_s pac_decay_stats_t;
type pac_decay_stats_s (line 26) | struct pac_decay_stats_s {
type pac_estats_t (line 35) | typedef struct pac_estats_s pac_estats_t;
type pac_estats_s (line 36) | struct pac_estats_s {
type pac_stats_t (line 52) | typedef struct pac_stats_s pac_stats_t;
type pac_stats_s (line 53) | struct pac_stats_s {
type pac_t (line 77) | typedef struct pac_s pac_t;
type pac_s (line 78) | struct pac_s {
function pac_mapped (line 129) | static inline size_t
function ehooks_t (line 134) | static inline ehooks_t *
FILE: deps/jemalloc/include/jemalloc/internal/pages.h
type thp_mode_t (line 90) | typedef enum {
FILE: deps/jemalloc/include/jemalloc/internal/pai.h
type pai_t (line 6) | typedef struct pai_s pai_t;
type pai_s (line 7) | struct pai_s {
function edata_t (line 39) | static inline edata_t *
function pai_alloc_batch (line 47) | static inline size_t
function pai_expand (line 54) | static inline bool
function pai_shrink (line 61) | static inline bool
function pai_dalloc (line 68) | static inline void
function pai_dalloc_batch (line 74) | static inline void
function pai_time_until_deferred_work (line 80) | static inline uint64_t
FILE: deps/jemalloc/include/jemalloc/internal/peak.h
type peak_t (line 4) | typedef struct peak_s peak_t;
type peak_s (line 5) | struct peak_s {
function peak_max (line 17) | static inline uint64_t
function peak_update (line 22) | static inline void
function peak_set_zero (line 31) | static inline void
FILE: deps/jemalloc/include/jemalloc/internal/ph.h
type phn_link_t (line 55) | typedef struct phn_link_s phn_link_t;
type phn_link_s (line 56) | struct phn_link_s {
type ph_t (line 62) | typedef struct ph_s ph_t;
type ph_s (line 63) | struct ph_s {
function JEMALLOC_ALWAYS_INLINE (line 74) | JEMALLOC_ALWAYS_INLINE phn_link_t *
function JEMALLOC_ALWAYS_INLINE (line 79) | JEMALLOC_ALWAYS_INLINE void
function JEMALLOC_ALWAYS_INLINE (line 87) | JEMALLOC_ALWAYS_INLINE void *
function JEMALLOC_ALWAYS_INLINE (line 92) | JEMALLOC_ALWAYS_INLINE void
function JEMALLOC_ALWAYS_INLINE (line 97) | JEMALLOC_ALWAYS_INLINE void *
function JEMALLOC_ALWAYS_INLINE (line 102) | JEMALLOC_ALWAYS_INLINE void
function JEMALLOC_ALWAYS_INLINE (line 107) | JEMALLOC_ALWAYS_INLINE void *
function JEMALLOC_ALWAYS_INLINE (line 112) | JEMALLOC_ALWAYS_INLINE void
function JEMALLOC_ALWAYS_INLINE (line 117) | JEMALLOC_ALWAYS_INLINE void
function JEMALLOC_ALWAYS_INLINE (line 135) | JEMALLOC_ALWAYS_INLINE void *
function JEMALLOC_ALWAYS_INLINE (line 152) | JEMALLOC_ALWAYS_INLINE void *
function JEMALLOC_ALWAYS_INLINE (line 223) | JEMALLOC_ALWAYS_INLINE void
function JEMALLOC_ALWAYS_INLINE (line 237) | JEMALLOC_ALWAYS_INLINE void *
function JEMALLOC_ALWAYS_INLINE (line 249) | JEMALLOC_ALWAYS_INLINE void
function JEMALLOC_ALWAYS_INLINE (line 255) | JEMALLOC_ALWAYS_INLINE bool
function JEMALLOC_ALWAYS_INLINE (line 260) | JEMALLOC_ALWAYS_INLINE void *
function JEMALLOC_ALWAYS_INLINE (line 269) | JEMALLOC_ALWAYS_INLINE void *
function JEMALLOC_ALWAYS_INLINE (line 282) | JEMALLOC_ALWAYS_INLINE bool
function JEMALLOC_ALWAYS_INLINE (line 308) | JEMALLOC_ALWAYS_INLINE void
function JEMALLOC_ALWAYS_INLINE (line 354) | JEMALLOC_ALWAYS_INLINE void *
function JEMALLOC_ALWAYS_INLINE (line 369) | JEMALLOC_ALWAYS_INLINE void
FILE: deps/jemalloc/include/jemalloc/internal/prng.h
function JEMALLOC_ALWAYS_INLINE (line 34) | JEMALLOC_ALWAYS_INLINE uint32_t
function JEMALLOC_ALWAYS_INLINE (line 39) | JEMALLOC_ALWAYS_INLINE uint64_t
function JEMALLOC_ALWAYS_INLINE (line 44) | JEMALLOC_ALWAYS_INLINE size_t
function JEMALLOC_ALWAYS_INLINE (line 64) | JEMALLOC_ALWAYS_INLINE uint32_t
function JEMALLOC_ALWAYS_INLINE (line 75) | JEMALLOC_ALWAYS_INLINE uint64_t
function JEMALLOC_ALWAYS_INLINE (line 86) | JEMALLOC_ALWAYS_INLINE size_t
function JEMALLOC_ALWAYS_INLINE (line 102) | JEMALLOC_ALWAYS_INLINE uint32_t
function JEMALLOC_ALWAYS_INLINE (line 126) | JEMALLOC_ALWAYS_INLINE uint64_t
function JEMALLOC_ALWAYS_INLINE (line 147) | JEMALLOC_ALWAYS_INLINE size_t
FILE: deps/jemalloc/include/jemalloc/internal/prof_inlines.h
function JEMALLOC_ALWAYS_INLINE (line 8) | JEMALLOC_ALWAYS_INLINE void
function JEMALLOC_ALWAYS_INLINE (line 18) | JEMALLOC_ALWAYS_INLINE bool
function JEMALLOC_ALWAYS_INLINE (line 30) | JEMALLOC_ALWAYS_INLINE bool
function JEMALLOC_ALWAYS_INLINE (line 40) | JEMALLOC_ALWAYS_INLINE prof_tdata_t *
function JEMALLOC_ALWAYS_INLINE (line 64) | JEMALLOC_ALWAYS_INLINE void
function JEMALLOC_ALWAYS_INLINE (line 74) | JEMALLOC_ALWAYS_INLINE void
function JEMALLOC_ALWAYS_INLINE (line 84) | JEMALLOC_ALWAYS_INLINE void
function JEMALLOC_ALWAYS_INLINE (line 92) | JEMALLOC_ALWAYS_INLINE void
function JEMALLOC_ALWAYS_INLINE (line 100) | JEMALLOC_ALWAYS_INLINE void
function JEMALLOC_ALWAYS_INLINE (line 109) | JEMALLOC_ALWAYS_INLINE bool
function JEMALLOC_ALWAYS_INLINE (line 133) | JEMALLOC_ALWAYS_INLINE prof_tctx_t *
function JEMALLOC_ALWAYS_INLINE (line 147) | JEMALLOC_ALWAYS_INLINE void
function JEMALLOC_ALWAYS_INLINE (line 161) | JEMALLOC_ALWAYS_INLINE void
function JEMALLOC_ALWAYS_INLINE (line 219) | JEMALLOC_ALWAYS_INLINE size_t
function JEMALLOC_ALWAYS_INLINE (line 230) | JEMALLOC_ALWAYS_INLINE bool
function JEMALLOC_ALWAYS_INLINE (line 235) | JEMALLOC_ALWAYS_INLINE bool
function JEMALLOC_ALWAYS_INLINE (line 246) | JEMALLOC_ALWAYS_INLINE void
FILE: deps/jemalloc/include/jemalloc/internal/prof_recent.h
type prof_recent_list_t (line 14) | typedef ql_head(prof_recent_t) prof_recent_list_t;
FILE: deps/jemalloc/include/jemalloc/internal/prof_stats.h
type prof_stats_t (line 4) | typedef struct prof_stats_s prof_stats_t;
type prof_stats_s (line 5) | struct prof_stats_s {
FILE: deps/jemalloc/include/jemalloc/internal/prof_structs.h
type prof_bt_s (line 10) | struct prof_bt_s {
type prof_unwind_data_t (line 18) | typedef struct {
type prof_cnt_s (line 25) | struct prof_cnt_s {
type prof_tctx_state_t (line 37) | typedef enum {
type prof_tctx_s (line 44) | struct prof_tctx_s {
type prof_tctx_tree_t (line 100) | typedef rb_tree(prof_tctx_t) prof_tctx_tree_t;
type prof_info_s (line 102) | struct prof_info_s {
type prof_gctx_s (line 111) | struct prof_gctx_s {
type prof_gctx_tree_t (line 145) | typedef rb_tree(prof_gctx_t) prof_gctx_tree_t;
type prof_tdata_s (line 147) | struct prof_tdata_s {
type prof_tdata_tree_t (line 207) | typedef rb_tree(prof_tdata_t) prof_tdata_tree_t;
type prof_recent_s (line 209) | struct prof_recent_s {
FILE: deps/jemalloc/include/jemalloc/internal/prof_types.h
type prof_bt_t (line 4) | typedef struct prof_bt_s prof_bt_t;
type prof_cnt_t (line 5) | typedef struct prof_cnt_s prof_cnt_t;
type prof_tctx_t (line 6) | typedef struct prof_tctx_s prof_tctx_t;
type prof_info_t (line 7) | typedef struct prof_info_s prof_info_t;
type prof_gctx_t (line 8) | typedef struct prof_gctx_s prof_gctx_t;
type prof_tdata_t (line 9) | typedef struct prof_tdata_s prof_tdata_t;
type prof_recent_t (line 10) | typedef struct prof_recent_s prof_recent_t;
FILE: deps/jemalloc/include/jemalloc/internal/psset.h
type psset_bin_stats_t (line 34) | typedef struct psset_bin_stats_s psset_bin_stats_t;
type psset_bin_stats_s (line 35) | struct psset_bin_stats_s {
type psset_stats_t (line 44) | typedef struct psset_stats_s psset_stats_t;
type psset_stats_s (line 45) | struct psset_stats_s {
type psset_t (line 63) | typedef struct psset_s psset_t;
type psset_s (line 64) | struct psset_s {
function psset_npageslabs (line 116) | static inline size_t
function psset_nactive (line 121) | static inline size_t
function psset_ndirty (line 126) | static inline size_t
FILE: deps/jemalloc/include/jemalloc/internal/rtree.h
type rtree_node_elm_t (line 38) | typedef struct rtree_node_elm_s rtree_node_elm_t;
type rtree_node_elm_s (line 39) | struct rtree_node_elm_s {
type rtree_metadata_t (line 43) | typedef struct rtree_metadata_s rtree_metadata_t;
type rtree_metadata_s (line 44) | struct rtree_metadata_s {
type rtree_contents_t (line 51) | typedef struct rtree_contents_s rtree_contents_t;
type rtree_contents_s (line 52) | struct rtree_contents_s {
type rtree_leaf_elm_s (line 61) | struct rtree_leaf_elm_s {
type rtree_level_t (line 87) | typedef struct rtree_level_s rtree_level_t;
type rtree_level_s (line 88) | struct rtree_level_s {
type rtree_t (line 98) | typedef struct rtree_s rtree_t;
type rtree_s (line 99) | struct rtree_s {
function rtree_leaf_maskbits (line 137) | JEMALLOC_ALWAYS_INLINE unsigned
function JEMALLOC_ALWAYS_INLINE (line 145) | JEMALLOC_ALWAYS_INLINE uintptr_t
function JEMALLOC_ALWAYS_INLINE (line 151) | JEMALLOC_ALWAYS_INLINE size_t
function JEMALLOC_ALWAYS_INLINE (line 157) | JEMALLOC_ALWAYS_INLINE uintptr_t
function JEMALLOC_ALWAYS_INLINE (line 179) | JEMALLOC_ALWAYS_INLINE uintptr_t
function JEMALLOC_ALWAYS_INLINE (line 186) | JEMALLOC_ALWAYS_INLINE uintptr_t
function JEMALLOC_ALWAYS_INLINE (line 204) | JEMALLOC_ALWAYS_INLINE rtree_contents_t
function JEMALLOC_ALWAYS_INLINE (line 238) | JEMALLOC_ALWAYS_INLINE rtree_contents_t
function JEMALLOC_ALWAYS_INLINE (line 266) | JEMALLOC_ALWAYS_INLINE void
function JEMALLOC_ALWAYS_INLINE (line 281) | JEMALLOC_ALWAYS_INLINE void
function JEMALLOC_ALWAYS_INLINE (line 296) | JEMALLOC_ALWAYS_INLINE void
function JEMALLOC_ALWAYS_INLINE (line 308) | JEMALLOC_ALWAYS_INLINE void
function JEMALLOC_ALWAYS_INLINE (line 337) | JEMALLOC_ALWAYS_INLINE bool
function JEMALLOC_ALWAYS_INLINE (line 356) | JEMALLOC_ALWAYS_INLINE rtree_leaf_elm_t *
function rtree_read_independent (line 418) | static inline bool
function rtree_contents_t (line 431) | static inline rtree_contents_t
function rtree_metadata_t (line 440) | static inline rtree_metadata_t
function rtree_metadata_try_read_fast (line 453) | static inline bool
function JEMALLOC_ALWAYS_INLINE (line 472) | JEMALLOC_ALWAYS_INLINE void
function JEMALLOC_ALWAYS_INLINE (line 503) | JEMALLOC_ALWAYS_INLINE void
function JEMALLOC_ALWAYS_INLINE (line 510) | JEMALLOC_ALWAYS_INLINE bool
function rtree_clear (line 524) | static inline void
function rtree_clear_range (line 541) | static inline void
FILE: deps/jemalloc/include/jemalloc/internal/rtree_tsd.h
type rtree_leaf_elm_t (line 44) | typedef struct rtree_leaf_elm_s rtree_leaf_elm_t;
type rtree_ctx_cache_elm_t (line 46) | typedef struct rtree_ctx_cache_elm_s rtree_ctx_cache_elm_t;
type rtree_ctx_cache_elm_s (line 47) | struct rtree_ctx_cache_elm_s {
type rtree_ctx_t (line 52) | typedef struct rtree_ctx_s rtree_ctx_t;
type rtree_ctx_s (line 53) | struct rtree_ctx_s {
FILE: deps/jemalloc/include/jemalloc/internal/safety_check.h
function JEMALLOC_ALWAYS_INLINE (line 13) | JEMALLOC_ALWAYS_INLINE void
function JEMALLOC_ALWAYS_INLINE (line 21) | JEMALLOC_ALWAYS_INLINE void
FILE: deps/jemalloc/include/jemalloc/internal/san.h
function san_guard_pages_two_sided (line 39) | static inline void
function san_unguard_pages_two_sided (line 45) | static inline void
function san_two_side_unguarded_sz (line 51) | static inline size_t
function san_two_side_guarded_sz (line 58) | static inline size_t
function san_one_side_unguarded_sz (line 64) | static inline size_t
function san_one_side_guarded_sz (line 71) | static inline size_t
function san_guard_enabled (line 77) | static inline bool
function san_large_extent_decide_guard (line 82) | static inline bool
function san_slab_extent_decide_guard (line 112) | static inline bool
function san_junk_ptr_locations (line 133) | static inline void
function san_junk_ptr_should_slow (line 157) | static inline bool
function san_junk_ptr (line 166) | static inline void
function san_uaf_detection_enabled (line 180) | static inline bool
FILE: deps/jemalloc/include/jemalloc/internal/san_bump.h
type ehooks_t (line 12) | typedef struct ehooks_s ehooks_t;
type pac_t (line 13) | typedef struct pac_s pac_t;
type san_bump_alloc_t (line 15) | typedef struct san_bump_alloc_s san_bump_alloc_t;
type san_bump_alloc_s (line 16) | struct san_bump_alloc_s {
function san_bump_enabled (line 22) | static inline bool
function san_bump_alloc_init (line 36) | static inline bool
FILE: deps/jemalloc/include/jemalloc/internal/sc.h
type sc_t (line 290) | typedef struct sc_s sc_t;
type sc_s (line 291) | struct sc_s {
type sc_data_t (line 315) | typedef struct sc_data_s sc_data_t;
type sc_data_s (line 316) | struct sc_data_s {
FILE: deps/jemalloc/include/jemalloc/internal/sec.h
type sec_stats_t (line 20) | typedef struct sec_stats_s sec_stats_t;
type sec_stats_s (line 21) | struct sec_stats_s {
function sec_stats_accum (line 26) | static inline void
type sec_bin_t (line 32) | typedef struct sec_bin_s sec_bin_t;
type sec_bin_s (line 33) | struct sec_bin_s {
type sec_shard_t (line 62) | typedef struct sec_shard_s sec_shard_t;
type sec_shard_s (line 63) | struct sec_shard_s {
type sec_t (line 87) | typedef struct sec_s sec_t;
type sec_s (line 88) | struct sec_s {
FILE: deps/jemalloc/include/jemalloc/internal/sec_opts.h
type sec_opts_t (line 9) | typedef struct sec_opts_s sec_opts_t;
type sec_opts_s (line 10) | struct sec_opts_s {
FILE: deps/jemalloc/include/jemalloc/internal/slab_data.h
type slab_data_t (line 6) | typedef struct slab_data_s slab_data_t;
type slab_data_s (line 7) | struct slab_data_s {
FILE: deps/jemalloc/include/jemalloc/internal/spin.h
type spin_t (line 6) | typedef struct {
function spin_cpu_spinwait (line 10) | static inline void
function spin_adaptive (line 20) | static inline void
FILE: deps/jemalloc/include/jemalloc/internal/sz.h
type pszind_t (line 26) | typedef unsigned pszind_t;
type szind_t (line 29) | typedef unsigned szind_t;
function JEMALLOC_ALWAYS_INLINE (line 56) | JEMALLOC_ALWAYS_INLINE pszind_t
function sz_pind2sz_compute (line 107) | static inline size_t
function sz_pind2sz_lookup (line 127) | static inline size_t
function sz_pind2sz (line 134) | static inline size_t
function sz_psz2u (line 140) | static inline size_t
function szind_t (line 154) | static inline szind_t
function JEMALLOC_ALWAYS_INLINE (line 188) | JEMALLOC_ALWAYS_INLINE szind_t
function JEMALLOC_ALWAYS_INLINE (line 195) | JEMALLOC_ALWAYS_INLINE szind_t
function JEMALLOC_ALWAYS_INLINE (line 202) | JEMALLOC_ALWAYS_INLINE szind_t
function sz_index2size_compute (line 210) | static inline size_t
function JEMALLOC_ALWAYS_INLINE (line 236) | JEMALLOC_ALWAYS_INLINE size_t
function JEMALLOC_ALWAYS_INLINE (line 241) | JEMALLOC_ALWAYS_INLINE size_t
function JEMALLOC_ALWAYS_INLINE (line 248) | JEMALLOC_ALWAYS_INLINE size_t
function JEMALLOC_ALWAYS_INLINE (line 254) | JEMALLOC_ALWAYS_INLINE void
function JEMALLOC_ALWAYS_INLINE (line 260) | JEMALLOC_ALWAYS_INLINE size_t
function JEMALLOC_ALWAYS_INLINE (line 288) | JEMALLOC_ALWAYS_INLINE size_t
function JEMALLOC_ALWAYS_INLINE (line 300) | JEMALLOC_ALWAYS_INLINE size_t
function JEMALLOC_ALWAYS_INLINE (line 312) | JEMALLOC_ALWAYS_INLINE size_t
FILE: deps/jemalloc/include/jemalloc/internal/tcache_inlines.h
function tcache_enabled_get (line 11) | static inline bool
function tcache_enabled_set (line 16) | static inline void
function JEMALLOC_ALWAYS_INLINE (line 30) | JEMALLOC_ALWAYS_INLINE bool
function JEMALLOC_ALWAYS_INLINE (line 44) | JEMALLOC_ALWAYS_INLINE void *
function JEMALLOC_ALWAYS_INLINE (line 87) | JEMALLOC_ALWAYS_INLINE void *
function JEMALLOC_ALWAYS_INLINE (line 128) | JEMALLOC_ALWAYS_INLINE void
function JEMALLOC_ALWAYS_INLINE (line 163) | JEMALLOC_ALWAYS_INLINE void
function JEMALLOC_ALWAYS_INLINE (line 181) | JEMALLOC_ALWAYS_INLINE tcache_t *
FILE: deps/jemalloc/include/jemalloc/internal/tcache_structs.h
type tcache_slow_s (line 20) | struct tcache_slow_s {
type tcache_s (line 55) | struct tcache_s {
type tcaches_s (line 61) | struct tcaches_s {
FILE: deps/jemalloc/include/jemalloc/internal/tcache_types.h
type tcache_slow_t (line 6) | typedef struct tcache_slow_s tcache_slow_t;
type tcache_t (line 7) | typedef struct tcache_s tcache_t;
type tcaches_t (line 8) | typedef struct tcaches_s tcaches_t;
FILE: deps/jemalloc/include/jemalloc/internal/thread_event.h
type te_ctx_t (line 38) | typedef struct te_ctx_s {
function JEMALLOC_ALWAYS_INLINE (line 113) | JEMALLOC_ALWAYS_INLINE void
function JEMALLOC_ALWAYS_INLINE (line 120) | JEMALLOC_ALWAYS_INLINE void
function JEMALLOC_ALWAYS_INLINE (line 128) | JEMALLOC_ALWAYS_INLINE bool
function JEMALLOC_ALWAYS_INLINE (line 133) | JEMALLOC_ALWAYS_INLINE uint64_t
function JEMALLOC_ALWAYS_INLINE (line 138) | JEMALLOC_ALWAYS_INLINE void
function JEMALLOC_ALWAYS_INLINE (line 143) | JEMALLOC_ALWAYS_INLINE uint64_t
function JEMALLOC_ALWAYS_INLINE (line 148) | JEMALLOC_ALWAYS_INLINE void
function JEMALLOC_ALWAYS_INLINE (line 154) | JEMALLOC_ALWAYS_INLINE uint64_t
function JEMALLOC_ALWAYS_INLINE (line 161) | JEMALLOC_ALWAYS_INLINE void
function JEMALLOC_ALWAYS_INLINE (line 167) | JEMALLOC_ALWAYS_INLINE void
function JEMALLOC_ALWAYS_INLINE (line 178) | JEMALLOC_ALWAYS_INLINE uint64_t
function JEMALLOC_ALWAYS_INLINE (line 183) | JEMALLOC_ALWAYS_INLINE void
function JEMALLOC_ALWAYS_INLINE (line 197) | JEMALLOC_ALWAYS_INLINE void
function JEMALLOC_ALWAYS_INLINE (line 204) | JEMALLOC_ALWAYS_INLINE void
function JEMALLOC_ALWAYS_INLINE (line 238) | JEMALLOC_ALWAYS_INLINE bool
function JEMALLOC_ALWAYS_INLINE (line 268) | JEMALLOC_ALWAYS_INLINE bool
function JEMALLOC_ALWAYS_INLINE (line 273) | JEMALLOC_ALWAYS_INLINE void
function JEMALLOC_ALWAYS_INLINE (line 291) | JEMALLOC_ALWAYS_INLINE void
function JEMALLOC_ALWAYS_INLINE (line 296) | JEMALLOC_ALWAYS_INLINE void
FILE: deps/jemalloc/include/jemalloc/internal/ticker.h
type ticker_t (line 14) | typedef struct ticker_s ticker_t;
type ticker_s (line 15) | struct ticker_s {
function ticker_init (line 20) | static inline void
function ticker_copy (line 26) | static inline void
function ticker_read (line 31) | static inline int32_t
function ticker_fixup (line 59) | static bool
function ticker_ticks (line 65) | static inline bool
function ticker_tick (line 74) | static inline bool
function ticker_trytick (line 83) | static inline bool
type ticker_geom_t (line 116) | typedef struct ticker_geom_s ticker_geom_t;
type ticker_geom_s (line 117) | struct ticker_geom_s {
function ticker_geom_init (line 129) | static inline void
function ticker_geom_read (line 142) | static inline int32_t
function ticker_geom_fixup (line 152) | static bool
function ticker_geom_ticks (line 161) | static inline bool
function ticker_geom_tick (line 170) | static inline bool
FILE: deps/jemalloc/include/jemalloc/internal/tsd.h
type tsd_link_t (line 56) | typedef ql_elm(tsd_t) tsd_link_t;
type tsd_s (line 240) | struct tsd_s {
function JEMALLOC_ALWAYS_INLINE (line 261) | JEMALLOC_ALWAYS_INLINE uint8_t
type tsdn_s (line 277) | struct tsdn_s {
function JEMALLOC_ALWAYS_INLINE (line 281) | JEMALLOC_ALWAYS_INLINE tsdn_t *
function JEMALLOC_ALWAYS_INLINE (line 286) | JEMALLOC_ALWAYS_INLINE bool
function JEMALLOC_ALWAYS_INLINE (line 291) | JEMALLOC_ALWAYS_INLINE tsd_t *
function JEMALLOC_ALWAYS_INLINE (line 391) | JEMALLOC_ALWAYS_INLINE void
function JEMALLOC_ALWAYS_INLINE (line 402) | JEMALLOC_ALWAYS_INLINE bool
function JEMALLOC_ALWAYS_INLINE (line 412) | JEMALLOC_ALWAYS_INLINE tsd_t *
function JEMALLOC_ALWAYS_INLINE (line 431) | JEMALLOC_ALWAYS_INLINE tsd_t *
function JEMALLOC_ALWAYS_INLINE (line 437) | JEMALLOC_ALWAYS_INLINE tsd_t *
function JEMALLOC_ALWAYS_INLINE (line 446) | JEMALLOC_ALWAYS_INLINE tsd_t *
function tsd_nominal (line 451) | static inline bool
function JEMALLOC_ALWAYS_INLINE (line 459) | JEMALLOC_ALWAYS_INLINE tsdn_t *
function JEMALLOC_ALWAYS_INLINE (line 468) | JEMALLOC_ALWAYS_INLINE rtree_ctx_t *
function JEMALLOC_ALWAYS_INLINE (line 473) | JEMALLOC_ALWAYS_INLINE rtree_ctx_t *
function tsd_state_nocleanup (line 486) | static inline bool
function tsd_pre_reentrancy_raw (line 497) | static inline void
function tsd_post_reentrancy_raw (line 509) | static inline void
FILE: deps/jemalloc/include/jemalloc/internal/tsd_generic.h
type tsd_init_block_t (line 6) | typedef struct tsd_init_block_s tsd_init_block_t;
type tsd_init_block_s (line 7) | struct tsd_init_block_s {
type tsd_init_head_t (line 14) | typedef struct tsd_init_head_s tsd_init_head_t;
type tsd_wrapper_t (line 16) | typedef struct {
function JEMALLOC_ALWAYS_INLINE (line 31) | JEMALLOC_ALWAYS_INLINE void
function JEMALLOC_ALWAYS_INLINE (line 53) | JEMALLOC_ALWAYS_INLINE void
function JEMALLOC_ALWAYS_INLINE (line 64) | JEMALLOC_ALWAYS_INLINE tsd_wrapper_t *
function JEMALLOC_ALWAYS_INLINE (line 101) | JEMALLOC_ALWAYS_INLINE bool
function JEMALLOC_ALWAYS_INLINE (line 121) | JEMALLOC_ALWAYS_INLINE void
function JEMALLOC_ALWAYS_INLINE (line 140) | JEMALLOC_ALWAYS_INLINE bool
function JEMALLOC_ALWAYS_INLINE (line 149) | JEMALLOC_ALWAYS_INLINE bool
function JEMALLOC_ALWAYS_INLINE (line 154) | JEMALLOC_ALWAYS_INLINE bool
function JEMALLOC_ALWAYS_INLINE (line 160) | JEMALLOC_ALWAYS_INLINE tsd_t *
function JEMALLOC_ALWAYS_INLINE (line 172) | JEMALLOC_ALWAYS_INLINE void
FILE: deps/jemalloc/include/jemalloc/internal/tsd_malloc_thread_cleanup.h
function JEMALLOC_ALWAYS_INLINE (line 13) | JEMALLOC_ALWAYS_INLINE bool
function JEMALLOC_ALWAYS_INLINE (line 22) | JEMALLOC_ALWAYS_INLINE bool
function JEMALLOC_ALWAYS_INLINE (line 29) | JEMALLOC_ALWAYS_INLINE void
function JEMALLOC_ALWAYS_INLINE (line 34) | JEMALLOC_ALWAYS_INLINE bool
function JEMALLOC_ALWAYS_INLINE (line 39) | JEMALLOC_ALWAYS_INLINE bool
function JEMALLOC_ALWAYS_INLINE (line 44) | JEMALLOC_ALWAYS_INLINE bool
function JEMALLOC_ALWAYS_INLINE (line 50) | JEMALLOC_ALWAYS_INLINE tsd_t *
function JEMALLOC_ALWAYS_INLINE (line 54) | JEMALLOC_ALWAYS_INLINE void
FILE: deps/jemalloc/include/jemalloc/internal/tsd_tls.h
function JEMALLOC_ALWAYS_INLINE (line 13) | JEMALLOC_ALWAYS_INLINE bool
function JEMALLOC_ALWAYS_INLINE (line 22) | JEMALLOC_ALWAYS_INLINE void
function JEMALLOC_ALWAYS_INLINE (line 27) | JEMALLOC_ALWAYS_INLINE bool
function JEMALLOC_ALWAYS_INLINE (line 32) | JEMALLOC_ALWAYS_INLINE bool
function JEMALLOC_ALWAYS_INLINE (line 37) | JEMALLOC_ALWAYS_INLINE bool
function JEMALLOC_ALWAYS_INLINE (line 43) | JEMALLOC_ALWAYS_INLINE tsd_t *
function JEMALLOC_ALWAYS_INLINE (line 48) | JEMALLOC_ALWAYS_INLINE void
FILE: deps/jemalloc/include/jemalloc/internal/tsd_types.h
type tsd_t (line 6) | typedef struct tsd_s tsd_t;
type tsdn_t (line 7) | typedef struct tsdn_s tsdn_t;
FILE: deps/jemalloc/include/jemalloc/internal/tsd_win.h
type tsd_wrapper_t (line 6) | typedef struct {
function JEMALLOC_ALWAYS_INLINE (line 16) | JEMALLOC_ALWAYS_INLINE bool
function JEMALLOC_ALWAYS_INLINE (line 38) | JEMALLOC_ALWAYS_INLINE void
function JEMALLOC_ALWAYS_INLINE (line 46) | JEMALLOC_ALWAYS_INLINE tsd_wrapper_t *
function JEMALLOC_ALWAYS_INLINE (line 69) | JEMALLOC_ALWAYS_INLINE bool
function JEMALLOC_ALWAYS_INLINE (line 81) | JEMALLOC_ALWAYS_INLINE void
function JEMALLOC_ALWAYS_INLINE (line 97) | JEMALLOC_ALWAYS_INLINE bool
function JEMALLOC_ALWAYS_INLINE (line 106) | JEMALLOC_ALWAYS_INLINE bool
function JEMALLOC_ALWAYS_INLINE (line 111) | JEMALLOC_ALWAYS_INLINE bool
function JEMALLOC_ALWAYS_INLINE (line 117) | JEMALLOC_ALWAYS_INLINE tsd_t *
function JEMALLOC_ALWAYS_INLINE (line 129) | JEMALLOC_ALWAYS_INLINE void
FILE: deps/jemalloc/include/jemalloc/internal/util.h
function UTIL_INLINE (line 46) | UTIL_INLINE void
function UTIL_INLINE (line 56) | UTIL_INLINE int
function JEMALLOC_ALWAYS_INLINE (line 65) | JEMALLOC_ALWAYS_INLINE void
function JEMALLOC_ALWAYS_INLINE (line 73) | JEMALLOC_ALWAYS_INLINE void
function JEMALLOC_ALWAYS_INLINE (line 91) | JEMALLOC_ALWAYS_INLINE void
function JEMALLOC_ALWAYS_INLINE (line 107) | JEMALLOC_ALWAYS_INLINE void
function JEMALLOC_ALWAYS_INLINE (line 114) | JEMALLOC_ALWAYS_INLINE void
FILE: deps/jemalloc/include/jemalloc/internal/witness.h
type witness_rank_e (line 10) | enum witness_rank_e {
type witness_rank_t (line 79) | typedef enum witness_rank_e witness_rank_t;
type witness_t (line 90) | typedef struct witness_s witness_t;
type witness_list_t (line 91) | typedef ql_head(witness_t) witness_list_t;
type witness_s (line 95) | struct witness_s {
type witness_tsd_t (line 122) | typedef struct witness_tsd_s witness_tsd_t;
type witness_tsd_s (line 123) | struct witness_tsd_s {
type witness_tsdn_t (line 134) | typedef struct witness_tsdn_s witness_tsdn_t;
type witness_tsdn_s (line 135) | struct witness_tsdn_s {
function JEMALLOC_ALWAYS_INLINE (line 139) | JEMALLOC_ALWAYS_INLINE witness_tsdn_t *
function JEMALLOC_ALWAYS_INLINE (line 144) | JEMALLOC_ALWAYS_INLINE bool
function JEMALLOC_ALWAYS_INLINE (line 149) | JEMALLOC_ALWAYS_INLINE witness_tsd_t *
function witness_owner (line 180) | static inline bool
function witness_assert_owner (line 197) | static inline void
function witness_assert_not_owner (line 219) | static inline void
function witness_depth_to_rank (line 247) | static inline unsigned
function witness_assert_depth_to_rank (line 265) | static inline void
function witness_assert_depth (line 280) | static inline void
function witness_assert_lockless (line 285) | static inline void
function witness_assert_positive_depth_to_rank (line 290) | static inline void
function witness_lock (line 305) | static inline void
function witness_unlock (line 348) | static inline void
FILE: deps/jemalloc/include/msvc_compat/C99/stdbool.h
type BOOL (line 11) | typedef BOOL _Bool;
FILE: deps/jemalloc/include/msvc_compat/C99/stdint.h
type int_least8_t (line 94) | typedef int8_t int_least8_t;
type int_least16_t (line 95) | typedef int16_t int_least16_t;
type int_least32_t (line 96) | typedef int32_t int_least32_t;
type int_least64_t (line 97) | typedef int64_t int_least64_t;
type uint_least8_t (line 98) | typedef uint8_t uint_least8_t;
type uint_least16_t (line 99) | typedef uint16_t uint_least16_t;
type uint_least32_t (line 100) | typedef uint32_t uint_least32_t;
type uint_least64_t (line 101) | typedef uint64_t uint_least64_t;
type int_fast8_t (line 104) | typedef int8_t int_fast8_t;
type int_fast16_t (line 105) | typedef int16_t int_fast16_t;
type int_fast32_t (line 106) | typedef int32_t int_fast32_t;
type int_fast64_t (line 107) | typedef int64_t int_fast64_t;
type uint_fast8_t (line 108) | typedef uint8_t uint_fast8_t;
type uint_fast16_t (line 109) | typedef uint16_t uint_fast16_t;
type uint_fast32_t (line 110) | typedef uint32_t uint_fast32_t;
type uint_fast64_t (line 111) | typedef uint64_t uint_fast64_t;
type intmax_t (line 123) | typedef int64_t intmax_t;
type uintmax_t (line 124) | typedef uint64_t uintmax_t;
FILE: deps/jemalloc/include/msvc_compat/strings.h
function ffsl (line 9) | static __forceinline int ffsl(long x) {
function ffs (line 18) | static __forceinline int ffs(int x) {
function ffsll (line 26) | static __forceinline int ffsll(unsigned __int64 x) {
FILE: deps/jemalloc/msvc/test_threads/test_threads.cpp
function test_threads (line 20) | int test_threads() {
FILE: deps/jemalloc/msvc/test_threads/test_threads_main.cpp
function main (line 8) | int main(int argc, char** argv) {
FILE: deps/jemalloc/scripts/gen_run_tests.py
function powerset (line 22) | def powerset(items):
FILE: deps/jemalloc/scripts/gen_travis.py
class Option (line 63) | class Option(object):
class Type (line 64) | class Type:
method __init__ (line 71) | def __init__(self, type, value):
method as_compiler (line 76) | def as_compiler(value):
method as_compiler_flag (line 80) | def as_compiler_flag(value):
method as_configure_flag (line 84) | def as_configure_flag(value):
method as_malloc_conf (line 88) | def as_malloc_conf(value):
method as_feature (line 92) | def as_feature(value):
method __eq__ (line 95) | def __eq__(self, obj):
function get_extra_cflags (line 143) | def get_extra_cflags(os, compiler):
function format_job (line 172) | def format_job(os, arch, combination):
function generate_unusual_combinations (line 210) | def generate_unusual_combinations(unusuals, max_unusual_opts):
function included (line 221) | def included(combination, exclude):
function generate_jobs (line 231) | def generate_jobs(os, arch, exclude, max_unusual_opts, unusuals=all_unus...
function generate_linux (line 239) | def generate_linux(arch):
function generate_macos (line 253) | def generate_macos(arch):
function generate_windows (line 268) | def generate_windows(arch):
function generate_freebsd (line 280) | def generate_freebsd(arch):
function get_manual_jobs (line 294) | def get_manual_jobs():
function main (line 309) | def main():
FILE: deps/jemalloc/src/arena.c
function arena_basic_stats_merge (line 73) | void
function arena_stats_merge (line 84) | void
function arena_background_thread_inactivity_check (line 199) | static void
function arena_handle_deferred_work (line 216) | void arena_handle_deferred_work(tsdn_t *tsdn, arena_t *arena) {
function arena_slab_reg_alloc_batch (line 242) | static void
function arena_large_malloc_stats_update (line 290) | static void
function arena_large_dalloc_stats_update (line 306) | static void
function arena_large_ralloc_stats_update (line 322) | static void
function edata_t (line 329) | edata_t *
function arena_extent_dalloc_large_prep (line 357) | void
function arena_extent_ralloc_large_shrink (line 367) | void
function arena_extent_ralloc_large_expand (line 379) | void
function pac_purge_eagerness_t (line 396) | static pac_purge_eagerness_t
function arena_decay_ms_set (line 407) | bool
function arena_decay_ms_get (line 416) | ssize_t
function arena_decay_impl (line 421) | static bool
function arena_decay_dirty (line 456) | static bool
function arena_decay_muzzy (line 464) | static bool
function arena_decay (line 475) | void
function arena_should_decay_early (line 491) | static bool
function arena_maybe_do_deferred_work (line 530) | static void
function arena_do_deferred_work (line 561) | void
function arena_slab_dalloc (line 567) | void
function arena_bin_slabs_nonfull_insert (line 576) | static void
function arena_bin_slabs_nonfull_remove (line 585) | static void
function edata_t (line 593) | static edata_t *
function arena_bin_slabs_full_insert (line 606) | static void
function arena_bin_slabs_full_remove (line 620) | static void
function arena_bin_reset (line 628) | static void
function arena_reset (line 659) | void
function arena_prepare_base_deletion_sync_finish (line 711) | static void
function arena_prepare_base_deletion_sync (line 721) | static void
function arena_prepare_base_deletion (line 741) | static void
function arena_destroy (line 795) | void
function edata_t (line 830) | static edata_t *
function arena_bin_refill_slabcur_with_fresh_slab (line 864) | static void
function arena_bin_refill_slabcur_no_fresh_slab (line 893) | static bool
function bin_t (line 911) | bin_t *
function arena_cache_bin_fill_small (line 927) | void
function arena_fill_small_fresh (line 1055) | size_t
function arena_prof_promote (line 1236) | void
function arena_prof_demote (line 1256) | static size_t
function arena_dalloc_promoted (line 1269) | void
function arena_dissociate_bin_slab (line 1294) | static void
function arena_bin_lower_slab (line 1316) | static void
function arena_dalloc_bin_slab_prepare (line 1343) | static void
function arena_dalloc_bin_locked_handle_newly_empty (line 1353) | void
function arena_dalloc_bin_locked_handle_newly_nonempty (line 1360) | void
function arena_dalloc_bin (line 1367) | static void
function arena_dalloc_small (line 1386) | void
function arena_ralloc_no_move (line 1395) | bool
function ehooks_t (line 1510) | ehooks_t *
function extent_hooks_t (line 1515) | extent_hooks_t *
function dss_prec_t (line 1533) | dss_prec_t
function arena_dss_prec_set (line 1538) | bool
function arena_dirty_decay_ms_default_get (line 1547) | ssize_t
function arena_dirty_decay_ms_default_set (line 1552) | bool
function arena_muzzy_decay_ms_default_get (line 1561) | ssize_t
function arena_muzzy_decay_ms_default_set (line 1566) | bool
function arena_retain_grow_limit_get_set (line 1575) | bool
function arena_nthreads_get (line 1583) | unsigned
function arena_nthreads_inc (line 1588) | void
function arena_nthreads_dec (line 1593) | void
function arena_t (line 1598) | arena_t *
function arena_t (line 1710) | arena_t *
function arena_init_huge (line 1744) | bool
function arena_is_huge (line 1764) | bool
function arena_boot (line 1772) | bool
function arena_prefork0 (line 1792) | void
function arena_prefork1 (line 1797) | void
function arena_prefork2 (line 1804) | void
function arena_prefork3 (line 1809) | void
function arena_prefork4 (line 1814) | void
function arena_prefork5 (line 1819) | void
function arena_prefork6 (line 1824) | void
function arena_prefork7 (line 1829) | void
function arena_prefork8 (line 1834) | void
function arena_postfork_parent (line 1841) | void
function arena_postfork_child (line 1855) | void
FILE: deps/jemalloc/src/background_thread.c
function pthread_create_wrapper_init (line 33) | static void
function pthread_create_wrapper (line 42) | int
function background_thread_info_init (line 71) | static void
function set_current_thread_affinity (line 81) | static inline bool
function background_thread_sleep (line 119) | static void
function background_thread_pause_check (line 173) | static bool
function background_work_sleep_once (line 187) | static inline void
function background_threads_disable_single (line 232) | static bool
function background_thread_create_signals_masked (line 273) | static int
function check_background_thread_creation (line 305) | static bool
function background_thread0_work (line 355) | static void
function background_work (line 404) | static void
function background_thread_init (line 451) | static void
function background_thread_create_locked (line 459) | static bool
function background_thread_create (line 514) | bool
function background_threads_enable (line 526) | bool
function background_threads_disable (line 573) | bool
function background_thread_is_started (line 596) | bool
function background_thread_wakeup_early (line 601) | void
function background_thread_prefork0 (line 616) | void
function background_thread_prefork1 (line 622) | void
function background_thread_postfork_parent (line 629) | void
function background_thread_postfork_child (line 638) | void
function background_thread_stats_read (line 665) | bool
function pthread_create_fptr_init (line 713) | static bool
function background_thread_ctl_init (line 748) | void
function background_thread_boot0 (line 759) | bool
function background_thread_boot1 (line 775) | bool
FILE: deps/jemalloc/src/base.c
function metadata_thp_madvise (line 33) | static inline bool
function base_unmap (line 61) | static void
function base_edata_init (line 113) | static void
function base_get_num_blocks (line 124) | static size_t
function base_auto_thp_switch (line 138) | static void
function base_extent_bump_alloc_post (line 192) | static void
function base_block_t (line 242) | static base_block_t *
function edata_t (line 302) | static edata_t *
function base_t (line 339) | base_t *
function base_t (line 344) | base_t *
function base_delete (line 404) | void
function ehooks_t (line 416) | ehooks_t *
function ehooks_t (line 421) | ehooks_t *
function extent_hooks_t (line 426) | extent_hooks_t *
function edata_t (line 482) | edata_t *
function base_stats_get (line 494) | void
function base_prefork (line 509) | void
function base_postfork_parent (line 514) | void
function base_postfork_child (line 519) | void
function base_boot (line 524) | bool
FILE: deps/jemalloc/src/bin.c
function bin_update_shard_size (line 9) | bool
function bin_shard_sizes_boot (line 33) | void
function bin_init (line 41) | bool
function bin_prefork (line 56) | void
function bin_postfork_parent (line 61) | void
function bin_postfork_child (line 66) | void
FILE: deps/jemalloc/src/bin_info.c
function bin_infos_init (line 8) | static void
function bin_info_boot (line 26) | void
FILE: deps/jemalloc/src/bitmap.c
function bitmap_info_init (line 10) | void
function bitmap_info_ngroups (line 38) | static size_t
function bitmap_init (line 43) | void
function bitmap_info_init (line 84) | void
function bitmap_info_ngroups (line 93) | static size_t
function bitmap_init (line 98) | void
function bitmap_size (line 117) | size_t
FILE: deps/jemalloc/src/buf_writer.c
function buf_writer_free_internal_buf (line 20) | static void
function buf_writer_assert (line 27) | static void
function buf_writer_init (line 40) | bool
function buf_writer_flush (line 69) | void
function buf_writer_cb (line 81) | void
function buf_writer_terminate (line 104) | void
function buf_writer_pipe (line 113) | void
FILE: deps/jemalloc/src/cache_bin.c
function cache_bin_info_init (line 8) | void
function cache_bin_info_compute_alloc (line 17) | void
function cache_bin_preincrement (line 40) | void
function cache_bin_postincrement (line 58) | void
function cache_bin_init (line 66) | void
function cache_bin_still_zero_initialized (line 96) | bool
FILE: deps/jemalloc/src/ckh.c
function ckh_bucket_search (line 61) | static size_t
function ckh_isearch (line 79) | static size_t
function ckh_try_bucket_insert (line 100) | static bool
function ckh_evict_reloc_insert (line 132) | static bool
function ckh_try_insert (line 203) | static bool
function ckh_rebuild (line 233) | static bool
function ckh_grow (line 255) | static bool
function ckh_shrink (line 310) | static void
function ckh_new (line 358) | bool
function ckh_delete (line 415) | void
function ckh_count (line 437) | size_t
function ckh_iter (line 444) | bool
function ckh_insert (line 465) | bool
function ckh_remove (line 488) | bool
function ckh_search (line 521) | bool
function ckh_string_hash (line 541) | void
function ckh_string_keycomp (line 546) | bool
function ckh_pointer_hash (line 554) | void
function ckh_pointer_keycomp (line 566) | bool
FILE: deps/jemalloc/src/counter.c
function counter_accum_init (line 6) | bool
function counter_prefork (line 17) | void
function counter_postfork_parent (line 22) | void
function counter_postfork_child (line 27) | void
FILE: deps/jemalloc/src/ctl.c
function ctl_named_node_t (line 36) | static const ctl_named_node_t *
function ctl_named_node_t (line 41) | static const ctl_named_node_t *
function ctl_indexed_node_t (line 48) | static const ctl_indexed_node_t *
function MUTEX_PROF_GLOBAL_MUTEXES (line 828) | MUTEX_PROF_GLOBAL_MUTEXES
function thread_peak_read_ctl (line 2328) | static int
function thread_peak_reset_ctl (line 2345) | static int
function thread_prof_name_ctl (line 2360) | static int
function thread_prof_active_ctl (line 2392) | static int
function thread_idle_ctl (line 2425) | static int
function tcache_create_ctl (line 2460) | static int
function tcache_flush_ctl (line 2479) | static int
function tcache_destroy_ctl (line 2494) | static int
function arena_i_initialized_ctl (line 2511) | static int
function arena_i_decay (line 2533) | static void
function arena_i_decay_ctl (line 2580) | static int
function arena_i_purge_ctl (line 2595) | static int
function arena_i_reset_destroy_helper (line 2610) | static int
function arena_reset_prepare_background_thread (line 2630) | static void
function arena_reset_finish_background_thread (line 2646) | static void
function arena_i_reset_ctl (line 2661) | static int
function arena_i_destroy_ctl (line 2681) | static int
function arena_i_dss_ctl (line 2726) | static int
function arena_i_oversize_threshold_ctl (line 2787) | static int
function arena_i_decay_ms_ctl_impl (line 2819) | static int
function arena_i_dirty_decay_ms_ctl (line 2867) | static int
function arena_i_muzzy_decay_ms_ctl (line 2874) | static int
function arena_i_extent_hooks_ctl (line 2881) | static int
function arena_i_retain_grow_limit_ctl (line 2941) | static int
function ctl_named_node_t (line 2978) | static const ctl_named_node_t *
function arenas_narenas_ctl (line 3004) | static int
function arenas_decay_ms_ctl_impl (line 3021) | static int
function arenas_dirty_decay_ms_ctl (line 3049) | static int
function arenas_muzzy_decay_ms_ctl (line 3056) | static int
function ctl_named_node_t (line 3072) | static const ctl_named_node_t *
function ctl_named_node_t (line 3084) | static const ctl_named_node_t *
function arenas_create_ctl (line 3093) | static int
function experimental_arenas_create_ext_ctl (line 3116) | static int
function arenas_lookup_ctl (line 3140) | static int
function prof_thread_active_init_ctl (line 3175) | static int
function prof_active_ctl (line 3208) | static int
function prof_dump_ctl (line 3246) | static int
function prof_gdump_ctl (line 3269) | static int
function prof_prefix_ctl (line 3299) | static int
function prof_reset_ctl (line 3319) | static int
function prof_log_start_ctl (line 3345) | static int
function prof_log_stop_ctl (line 3369) | static int
function experimental_hooks_prof_backtrace_ctl (line 3383) | static int
function experimental_hooks_prof_dump_ctl (line 3415) | static int
function experimental_hooks_safety_check_abort_ctl (line 3444) | static int
function stats_mutexes_reset_ctl (line 3616) | static int
function ctl_named_node_t (line 3695) | static const ctl_named_node_t *
function ctl_named_node_t (line 3716) | static const ctl_named_node_t *
function ctl_named_node_t (line 3738) | static const ctl_named_node_t *
function ctl_named_node_t (line 3814) | static const ctl_named_node_t *
function ctl_arenas_i_verify (line 3823) | static bool
function ctl_named_node_t (line 3833) | static const ctl_named_node_t *
function experimental_hooks_install_ctl (line 3850) | static int
function experimental_hooks_remove_ctl (line 3878) | static int
function experimental_thread_activity_callback_ctl (line 3895) | static int
function experimental_utilization_query_ctl (line 3988) | static int
function experimental_utilization_batch_query_ctl (line 4113) | static int
function ctl_named_node_t (line 4143) | static const ctl_named_node_t *
function experimental_arenas_i_pactivep_ctl (line 4159) | static int
function experimental_prof_recent_alloc_max_ctl (line 4196) | static int
type write_cb_packet_t (line 4229) | typedef struct write_cb_packet_s write_cb_packet_t;
type write_cb_packet_s (line 4230) | struct write_cb_packet_s {
function experimental_prof_recent_alloc_dump_ctl (line 4235) | static int
type batch_alloc_packet_t (line 4260) | typedef struct batch_alloc_packet_s batch_alloc_packet_t;
type batch_alloc_packet_s (line 4261) | struct batch_alloc_packet_s {
function experimental_batch_alloc_ctl (line 4268) | static int
function prof_stats_bins_i_live_ctl (line 4288) | static int
function prof_stats_bins_i_accum_ctl (line 4314) | static int
function ctl_named_node_t (line 4340) | static const ctl_named_node_t *
function prof_stats_lextents_i_live_ctl (line 4352) | static int
function prof_stats_lextents_i_accum_ctl (line 4378) | static int
function ctl_named_node_t (line 4404) | static const ctl_named_node_t *
FILE: deps/jemalloc/src/decay.c
function decay_deadline_init (line 17) | void
function decay_reinit (line 30) | void
function decay_init (line 46) | bool
function decay_ms_valid (line 63) | bool
function decay_maybe_update_time (line 75) | static void
function decay_backlog_npages_limit (line 96) | static size_t
function decay_backlog_update (line 117) | static void
function decay_deadline_reached (line 152) | static inline bool
function decay_npages_purge_in (line 157) | uint64_t
function decay_maybe_advance_epoch (line 176) | bool
function decay_npurge_after_interval (line 226) | static inline size_t
function decay_ns_until_purge (line 241) | uint64_t decay_ns_until_purge(decay_t *decay, size_t npages_current,
FILE: deps/jemalloc/src/div.c
function div_init (line 29) | void
FILE: deps/jemalloc/src/ecache.c
function ecache_init (line 6) | bool
function ecache_prefork (line 22) | void
function ecache_postfork_parent (line 27) | void
function ecache_postfork_child (line 32) | void
FILE: deps/jemalloc/src/edata_cache.c
function edata_cache_init (line 4) | bool
function edata_t (line 21) | edata_t *
function edata_cache_put (line 35) | void
function edata_cache_prefork (line 43) | void
function edata_cache_postfork_parent (line 48) | void
function edata_cache_postfork_child (line 53) | void
function edata_cache_fast_init (line 58) | void
function edata_cache_fast_try_fill_from_fallback (line 65) | static void
function edata_t (line 81) | edata_t *
function edata_cache_fast_flush_all (line 111) | static void
function edata_cache_fast_put (line 132) | void
function edata_cache_fast_disable (line 150) | void
FILE: deps/jemalloc/src/ehooks.c
function ehooks_init (line 7) | void
function ehooks_default_dalloc_impl (line 74) | bool
function ehooks_default_dalloc (line 82) | static bool
function ehooks_default_destroy_impl (line 88) | void
function ehooks_default_destroy (line 95) | static void
function ehooks_default_commit_impl (line 101) | bool
function ehooks_default_commit (line 107) | static bool
function ehooks_default_decommit_impl (line 113) | bool
function ehooks_default_decommit (line 119) | static bool
function ehooks_default_purge_lazy_impl (line 126) | bool
function ehooks_default_purge_lazy (line 132) | static bool
function ehooks_default_purge_forced_impl (line 144) | bool
function ehooks_default_purge_forced (line 150) | static bool
function ehooks_default_split_impl (line 161) | bool
function ehooks_default_split (line 175) | static bool
function ehooks_default_merge_impl (line 181) | bool
function ehooks_default_merge (line 222) | bool
function ehooks_default_zero_impl (line 230) | void
function ehooks_default_guard_impl (line 247) | void
function ehooks_default_unguard_impl (line 252) | void
FILE: deps/jemalloc/src/emap.c
type emap_lock_result_e (line 6) | enum emap_lock_result_e {
type emap_lock_result_t (line 11) | typedef enum emap_lock_result_e emap_lock_result_t;
function emap_init (line 13) | bool
function emap_update_edata_state (line 18) | void
function edata_t (line 41) | static inline edata_t *
function edata_t (line 96) | edata_t *
function edata_t (line 103) | edata_t *
function emap_release_edata (line 111) | void
function emap_rtree_leaf_elms_lookup (line 120) | static bool
function emap_rtree_write_acquired (line 141) | static void
function emap_register_boundary (line 157) | bool
function emap_register_interior (line 178) | void
function emap_deregister_boundary (line 215) | void
function emap_deregister_interior (line 235) | void
function emap_remap (line 247) | void
function emap_split_prepare (line 283) | bool
function emap_split_commit (line 309) | void
function emap_merge_prepare (line 326) | void
function emap_merge_commit (line 336) | void
function emap_do_assert_mapped (line 364) | void
function emap_do_assert_not_mapped (line 375) | void
FILE: deps/jemalloc/src/eset.c
function eset_bin_init (line 8) | static void
function eset_bin_stats_init (line 17) | static void
function eset_init (line 23) | void
function eset_npages_get (line 34) | size_t
function eset_nextents_get (line 39) | size_t
function eset_nbytes_get (line 44) | size_t
function eset_stats_add (line 49) | static void
function eset_stats_sub (line 60) | static void
function eset_insert (line 71) | void
function eset_remove (line 113) | void
function edata_t (line 162) | static edata_t *
function edata_t (line 205) | static edata_t *
function edata_t (line 261) | edata_t *
FILE: deps/jemalloc/src/exp_grow.c
function exp_grow_init (line 4) | void
FILE: deps/jemalloc/src/extent.c
function extent_sn_next (line 49) | size_t
function extent_may_force_decay (line 54) | static inline bool
function extent_try_delayed_coalesce (line 60) | static bool
function edata_t (line 77) | edata_t *
function edata_t (line 94) | edata_t *
function ecache_dalloc (line 135) | void
function edata_t (line 150) | edata_t *
function extents_abandon_vm (line 225) | static void
function extent_deactivate_locked_impl (line 247) | static void
function extent_deactivate_locked (line 259) | static void
function extent_deactivate_check_state_locked (line 266) | static void
function extent_activate_locked (line 273) | static void
function extent_gdump_add (line 284) | void
function extent_gdump_sub (line 310) | static void
function extent_register_impl (line 321) | static bool
function extent_register (line 340) | static bool
function extent_register_no_gdump_add (line 345) | static bool
function extent_reregister (line 350) | static void
function extent_deregister_impl (line 359) | static void
function extent_deregister (line 369) | static void
function extent_deregister_no_gdump_sub (line 374) | static void
function edata_t (line 384) | static edata_t *
type extent_split_interior_result_t (line 456) | typedef enum {
function extent_split_interior_result_t (line 475) | static extent_split_interior_result_t
function edata_t (line 531) | static edata_t *
function edata_t (line 595) | static edata_t *
function edata_t (line 643) | static edata_t *
function edata_t (line 773) | static edata_t *
function extent_coalesce (line 802) | static bool
function edata_t (line 819) | static edata_t *
function edata_t (line 874) | static edata_t *
function edata_t (line 881) | static edata_t *
function extent_maximally_purge (line 889) | static void
function extent_record (line 914) | void
function extent_dalloc_gap (line 955) | void
function extent_dalloc_wrapper_try (line 968) | static bool
function edata_t (line 991) | edata_t *
function extent_dalloc_wrapper (line 1027) | void
function extent_destroy_wrapper (line 1079) | void
function extent_commit_impl (line 1103) | static bool
function extent_commit_wrapper (line 1114) | bool
function extent_decommit_wrapper (line 1121) | bool
function extent_purge_lazy_impl (line 1132) | static bool
function extent_purge_lazy_wrapper (line 1142) | bool
function extent_purge_forced_impl (line 1149) | static bool
function extent_purge_forced_wrapper (line 1159) | bool
function edata_t (line 1173) | static edata_t *
function edata_t (line 1234) | edata_t *
function extent_merge_impl (line 1241) | static bool
function extent_merge_wrapper (line 1290) | bool
function extent_commit_zero (line 1297) | bool
function extent_boot (line 1317) | bool
FILE: deps/jemalloc/src/extent_dss.c
function dss_prec_t (line 50) | dss_prec_t
function extent_dss_prec_set (line 61) | bool
function extent_dss_extending_start (line 70) | static void
function extent_dss_extending_finish (line 83) | static void
function extent_in_dss_helper (line 237) | static bool
function extent_in_dss (line 243) | bool
function extent_dss_mergeable (line 251) | bool
function extent_dss_boot (line 267) | void
FILE: deps/jemalloc/src/extent_mmap.c
function extent_dalloc_mmap (line 35) | bool
FILE: deps/jemalloc/src/fxp.c
function fxp_isdigit (line 6) | static bool
function fxp_parse (line 11) | bool
function fxp_print (line 97) | void
FILE: deps/jemalloc/src/hook.c
type hooks_internal_t (line 9) | typedef struct hooks_internal_s hooks_internal_t;
type hooks_internal_s (line 10) | struct hooks_internal_s {
function hook_boot (line 21) | bool
function hook_remove_locked (line 58) | static void
function hook_remove (line 72) | void
function hook_invoke_alloc (line 153) | void
function hook_invoke_dalloc (line 169) | void
function hook_invoke_expand (line 182) | void
FILE: deps/jemalloc/src/hpa.c
function hpa_supported (line 26) | bool
function hpa_do_consistency_checks (line 56) | static void
function hpa_central_init (line 61) | bool
function hpdata_t (line 84) | static hpdata_t *
function hpdata_t (line 90) | hpdata_t *
function hpa_shard_init (line 177) | bool
function hpa_shard_nonderived_stats_accum (line 238) | static void
function hpa_shard_stats_accum (line 247) | void
function hpa_shard_stats_merge (line 254) | void
function hpa_good_hugification_candidate (line 267) | static bool
function hpa_adjusted_ndirty (line 278) | static size_t
function hpa_ndirty_max (line 284) | static size_t
function hpa_hugify_blocked_by_ndirty (line 294) | static bool
function hpa_should_purge (line 305) | static bool
function hpa_update_purge_hugify_eligibility (line 317) | static void
function hpa_shard_has_deferred_work (line 372) | static bool
function hpa_try_purge (line 380) | static bool
function hpa_try_hugify (line 465) | static bool
function hpa_shard_maybe_do_deferred_work (line 519) | static void
function edata_t (line 556) | static edata_t *
function hpa_try_alloc_batch_no_grow (line 625) | static size_t
function hpa_alloc_batch_psset (line 646) | static size_t
function hpa_shard_t (line 708) | static hpa_shard_t *
function hpa_alloc_batch (line 717) | static size_t
function edata_t (line 759) | static edata_t *
function hpa_expand (line 784) | static bool
function hpa_shrink (line 791) | static bool
function hpa_dalloc_prepare_unlocked (line 798) | static void
function hpa_dalloc_locked (line 823) | static void
function hpa_dalloc_batch (line 848) | static void
function hpa_dalloc (line 871) | static void
function hpa_time_until_deferred_work (line 886) | static uint64_t
function hpa_shard_disable (line 942) | void
function hpa_shard_assert_stats_empty (line 951) | static void
function hpa_assert_empty (line 957) | static void
function hpa_shard_destroy (line 969) | void
function hpa_shard_set_deferral_allowed (line 992) | void
function hpa_shard_do_deferred_work (line 1007) | void
function hpa_shard_prefork3 (line 1016) | void
function hpa_shard_prefork4 (line 1023) | void
function hpa_shard_postfork_parent (line 1030) | void
function hpa_shard_postfork_child (line 1038) | void
FILE: deps/jemalloc/src/hpa_hooks.c
function hpa_hooks_unmap (line 30) | static void
function hpa_hooks_purge (line 35) | static void
function hpa_hooks_hugify (line 40) | static void
function hpa_hooks_dehugify (line 46) | static void
function hpa_hooks_curtime (line 52) | static void
function hpa_hooks_ms_since (line 60) | static uint64_t
FILE: deps/jemalloc/src/hpdata.c
function hpdata_age_comp (line 6) | static int
function hpdata_init (line 18) | ph_gen(, hpdata_age_heap, hpdata_t, age_link, hpdata_age_comp)
function hpdata_unreserve (line 136) | void
function hpdata_purge_begin (line 166) | size_t
function hpdata_purge_next (line 258) | bool
function hpdata_purge_end (line 290) | void
function hpdata_hugify (line 311) | void
function hpdata_dehugify (line 320) | void
FILE: deps/jemalloc/src/inspect.c
function inspect_extent_util_stats_get (line 4) | void
function inspect_extent_util_stats_verbose_get (line 27) | void
FILE: deps/jemalloc/src/jemalloc.c
function default_junk_alloc (line 137) | static void default_junk_alloc(void *ptr, size_t usize) {
function default_junk_free (line 141) | static void default_junk_free(void *ptr, size_t usize) {
function WINAPI (line 220) | WINAPI
type malloc_utrace_t (line 249) | typedef struct {
function JEMALLOC_ALWAYS_INLINE (line 288) | JEMALLOC_ALWAYS_INLINE bool
function JEMALLOC_ALWAYS_INLINE (line 296) | JEMALLOC_ALWAYS_INLINE bool
function a0idalloc (line 319) | static void
function a0dalloc (line 329) | void
function bootstrap_free (line 362) | void
function arena_set (line 371) | void
function narenas_total_set (line 376) | static void
function narenas_total_inc (line 381) | static void
function narenas_total_get (line 386) | unsigned
function arena_t (line 392) | static arena_t *
function arena_new_create_background_thread (line 420) | static void
function arena_t (line 438) | arena_t *
function arena_bind (line 451) | static void
function arena_migrate (line 471) | void
function arena_unbind (line 487) | static void
function arena_t (line 502) | arena_t *
function iarena_cleanup (line 615) | void
function arena_cleanup (line 625) | void
function stats_print_atexit (line 635) | static void
function JEMALLOC_ALWAYS_INLINE (line 674) | JEMALLOC_ALWAYS_INLINE void
function malloc_ncpus (line 716) | static unsigned
function malloc_cpu_count_is_deterministic (line 761) | static bool
function init_opt_stats_opts (line 792) | static void
function malloc_conf_multi_sizes_next (line 818) | static bool
function malloc_conf_next (line 861) | static bool
function malloc_abort_invalid_conf (line 939) | static void
function malloc_conf_error (line 947) | static void
function malloc_slow_flag_init (line 961) | static void
function malloc_conf_init_helper (line 1065) | static void
function malloc_conf_init_check_deps (line 1732) | static bool
function malloc_conf_init (line 1743) | static void
function malloc_init_hard_needed (line 1763) | static bool
function malloc_init_hard_a0_locked (line 1789) | static bool
function malloc_init_hard_a0 (line 1913) | static bool
function malloc_init_hard_recursible (line 1924) | static bool
function malloc_narenas_default (line 1974) | static unsigned
function percpu_arena_mode_t (line 1994) | static percpu_arena_mode_t
function malloc_init_narenas (line 2006) | static bool
function malloc_init_percpu (line 2082) | static void
function malloc_init_hard_finish (line 2087) | static bool
function malloc_init_hard_cleanup (line 2099) | static void
function malloc_init_hard (line 2111) | static bool
type static_opts_t (line 2195) | typedef struct static_opts_s static_opts_t;
type static_opts_s (line 2196) | struct static_opts_s {
function JEMALLOC_ALWAYS_INLINE (line 2243) | JEMALLOC_ALWAYS_INLINE void
type dynamic_opts_t (line 2266) | typedef struct dynamic_opts_s dynamic_opts_t;
type dynamic_opts_s (line 2267) | struct dynamic_opts_s {
function JEMALLOC_ALWAYS_INLINE (line 2278) | JEMALLOC_ALWAYS_INLINE void
function JEMALLOC_ALWAYS_INLINE (line 2294) | JEMALLOC_ALWAYS_INLINE bool
function JEMALLOC_ALWAYS_INLINE (line 2321) | JEMALLOC_ALWAYS_INLINE bool
function JEMALLOC_ALWAYS_INLINE (line 2330) | JEMALLOC_ALWAYS_INLINE tcache_t *
function JEMALLOC_ALWAYS_INLINE (line 2361) | JEMALLOC_ALWAYS_INLINE bool
function JEMALLOC_ALWAYS_INLINE (line 2380) | JEMALLOC_ALWAYS_INLINE void *
function JEMALLOC_ALWAYS_INLINE (line 2402) | JEMALLOC_ALWAYS_INLINE void *
function JEMALLOC_ALWAYS_INLINE (line 2440) | JEMALLOC_ALWAYS_INLINE bool
function JEMALLOC_ALWAYS_INLINE (line 2478) | JEMALLOC_ALWAYS_INLINE int
function JEMALLOC_ALWAYS_INLINE (line 2656) | JEMALLOC_ALWAYS_INLINE bool
function JEMALLOC_ALWAYS_INLINE (line 2674) | JEMALLOC_ALWAYS_INLINE int
function JEMALLOC_NOINLINE (line 2698) | JEMALLOC_NOINLINE
function JEMALLOC_ALWAYS_INLINE (line 2873) | JEMALLOC_ALWAYS_INLINE void
function JEMALLOC_ALWAYS_INLINE (line 2910) | JEMALLOC_ALWAYS_INLINE bool
function JEMALLOC_ALWAYS_INLINE (line 2933) | JEMALLOC_ALWAYS_INLINE void
function JEMALLOC_NOINLINE (line 3005) | JEMALLOC_NOINLINE
function JEMALLOC_ALWAYS_INLINE (line 3039) | JEMALLOC_ALWAYS_INLINE bool
function JEMALLOC_ALWAYS_INLINE (line 3075) | JEMALLOC_ALWAYS_INLINE
function je_free_internal (line 3170) | static inline void je_free_internal(void *ptr, size_t *usize) {
function JEMALLOC_NOTHROW (line 3180) | JEMALLOC_NOTHROW
function mallocx_tcache_get (line 3333) | JEMALLOC_ALWAYS_INLINE unsigned
function mallocx_arena_get (line 3344) | JEMALLOC_ALWAYS_INLINE unsigned
type smallocx_return_t (line 3359) | typedef struct {
function JEMALLOC_NOTHROW (line 3365) | JEMALLOC_NOTHROW
function JEMALLOC_ALWAYS_INLINE (line 3480) | JEMALLOC_ALWAYS_INLINE void *
function JEMALLOC_ALWAYS_INLINE (line 3692) | JEMALLOC_ALWAYS_INLINE size_t
function ixallocx_prof_sample (line 3705) | static size_t
function JEMALLOC_ALWAYS_INLINE (line 3717) | JEMALLOC_ALWAYS_INLINE size_t
function JEMALLOC_NOTHROW (line 3780) | JEMALLOC_NOTHROW
function JEMALLOC_NOTHROW (line 3896) | JEMALLOC_NOTHROW
function JEMALLOC_ALWAYS_INLINE (line 3925) | JEMALLOC_ALWAYS_INLINE size_t
function JEMALLOC_NOINLINE (line 3935) | JEMALLOC_NOINLINE void
function JEMALLOC_NOTHROW (line 3961) | JEMALLOC_NOTHROW
function je_sdallocx_noflags (line 3973) | void JEMALLOC_NOTHROW
function JEMALLOC_NOTHROW (line 3985) | JEMALLOC_NOTHROW
function JEMALLOC_NOTHROW (line 4012) | JEMALLOC_NOTHROW
function JEMALLOC_NOTHROW (line 4034) | JEMALLOC_NOTHROW
function JEMALLOC_NOTHROW (line 4054) | JEMALLOC_NOTHROW
function JEMALLOC_NOTHROW (line 4076) | JEMALLOC_NOTHROW
function JEMALLOC_ALWAYS_INLINE (line 4101) | JEMALLOC_ALWAYS_INLINE size_t
function JEMALLOC_NOTHROW (line 4124) | JEMALLOC_NOTHROW
function JEMALLOC_NOTHROW (line 4135) | JEMALLOC_NOTHROW
function batch_alloc_prof_sample_assert (line 4146) | static void
function batch_alloc (line 4159) | size_t
function jemalloc_constructor (line 4347) | JEMALLOC_ATTR(constructor)
function jemalloc_prefork (line 4355) | void
function jemalloc_postfork_parent (line 4434) | void
function jemalloc_postfork_child (line 4474) | void
function JEMALLOC_NOTHROW (line 4509) | JEMALLOC_NOTHROW
function JEMALLOC_NOTHROW (line 4536) | JEMALLOC_NOTHROW
FILE: deps/jemalloc/src/jemalloc_cpp.cpp
function JEMALLOC_NOINLINE (line 56) | JEMALLOC_NOINLINE
function JEMALLOC_NOINLINE (line 95) | JEMALLOC_NOINLINE
function JEMALLOC_ALWAYS_INLINE (line 106) | JEMALLOC_ALWAYS_INLINE
function JEMALLOC_ALWAYS_INLINE (line 135) | JEMALLOC_ALWAYS_INLINE
function JEMALLOC_ALWAYS_INLINE (line 189) | JEMALLOC_ALWAYS_INLINE
function JEMALLOC_ALWAYS_INLINE (line 212) | JEMALLOC_ALWAYS_INLINE
FILE: deps/jemalloc/src/large.c
function large_ralloc_no_move_shrink (line 54) | static bool
function large_ralloc_no_move_expand (line 82) | static bool
function large_ralloc_no_move (line 129) | bool
function large_dalloc_prep_impl (line 230) | static void
function large_dalloc_finish_impl (line 250) | static void
function large_dalloc_prep_locked (line 259) | void
function large_dalloc_finish (line 264) | void
function large_dalloc (line 269) | void
function large_salloc (line 277) | size_t
function large_prof_info_get (line 282) | void
function large_prof_tctx_set (line 304) | static void
function large_prof_tctx_reset (line 309) | void
function large_prof_info_set (line 314) | void
FILE: deps/jemalloc/src/log.c
function log_var_matches_segment (line 21) | static bool
function log_var_update_state (line 43) | unsigned
FILE: deps/jemalloc/src/malloc_io.c
function wrtmessage (line 69) | void
function malloc_write (line 80) | void
function buferror (line 93) | int
function uintmax_t (line 111) | uintmax_t
function JEMALLOC_COLD (line 324) | JEMALLOC_COLD
function malloc_cprintf (line 669) | void
function malloc_printf (line 680) | void
FILE: deps/jemalloc/src/mutex.c
function JEMALLOC_EXPORT (line 36) | JEMALLOC_EXPORT int
function malloc_mutex_lock_slow (line 51) | void
function mutex_prof_data_init (line 109) | static void
function malloc_mutex_prof_data_reset (line 117) | void
function mutex_addr_comp (line 123) | static int
function malloc_mutex_init (line 139) | bool
function malloc_mutex_prefork (line 189) | void
function malloc_mutex_postfork_parent (line 194) | void
function malloc_mutex_postfork_child (line 199) | void
function malloc_mutex_boot (line 215) | bool
FILE: deps/jemalloc/src/nstime.c
function nstime_set_initialized (line 11) | static void
function nstime_assert_initialized (line 18) | static void
function nstime_pair_assert_initialized (line 30) | static void
function nstime_initialize_operand (line 36) | static void
function nstime_init (line 47) | void
function nstime_init2 (line 53) | void
function nstime_ns (line 59) | uint64_t
function nstime_msec (line 65) | uint64_t
function nstime_sec (line 71) | uint64_t
function nstime_nsec (line 77) | uint64_t
function nstime_copy (line 83) | void
function nstime_compare (line 91) | int
function nstime_add (line 97) | void
function nstime_iadd (line 106) | void
function nstime_subtract (line 115) | void
function nstime_isubtract (line 124) | void
function nstime_imultiply (line 133) | void
function nstime_idivide (line 143) | void
function nstime_divide (line 152) | uint64_t
function nstime_ns_since (line 162) | uint64_t
function nstime_get (line 176) | static void
function nstime_get (line 188) | static void
function nstime_get (line 197) | static void
function nstime_get (line 206) | static void
function nstime_get (line 212) | static void
function nstime_monotonic_impl (line 221) | static bool
function nstime_get_realtime (line 237) | static void
function nstime_prof_update_impl (line 249) | static void
function nstime_update_impl (line 263) | static void
function nstime_init_update (line 277) | void
function nstime_prof_init_update (line 283) | void
FILE: deps/jemalloc/src/pa.c
function pa_nactive_add (line 7) | static void
function pa_nactive_sub (line 12) | static void
function pa_central_init (line 18) | bool
function pa_shard_init (line 31) | bool
function pa_shard_enable_hpa (line 67) | bool
function pa_shard_disable_hpa (line 84) | void
function pa_shard_reset (line 93) | void
function pa_shard_uses_hpa (line 101) | static bool
function pa_shard_destroy (line 106) | void
function pai_t (line 115) | static pai_t *
function edata_t (line 121) | edata_t *
function pa_expand (line 156) | bool
function pa_shrink (line 181) | bool
function pa_dalloc (line 205) | void
function pa_shard_retain_grow_limit_get_set (line 223) | bool
function pa_decay_ms_set (line 230) | bool
function pa_decay_ms_get (line 236) | ssize_t
function pa_shard_set_deferral_allowed (line 241) | void
function pa_shard_do_deferred_work (line 250) | void
function pa_shard_time_until_deferred_work (line 262) | uint64_t
FILE: deps/jemalloc/src/pa_extra.c
function pa_shard_prefork0 (line 11) | void
function pa_shard_prefork2 (line 17) | void
function pa_shard_prefork3 (line 24) | void
function pa_shard_prefork4 (line 32) | void
function pa_shard_prefork5 (line 42) | void
function pa_shard_postfork_parent (line 47) | void
function pa_shard_postfork_child (line 62) | void
function pa_shard_basic_stats_merge (line 77) | void
function pa_shard_stats_merge (line 85) | void
function pa_shard_mtx_stats_read_single (line 158) | static void
function pa_shard_mtx_stats_read (line 166) | void
FILE: deps/jemalloc/src/pac.c
function pac_decay_data_get (line 18) | static inline void
function pac_init (line 37) | bool
function pac_may_have_muzzy (line 106) | static inline bool
function edata_t (line 111) | static edata_t *
function edata_t (line 136) | static edata_t *
function edata_t (line 163) | static edata_t *
function pac_expand_impl (line 190) | static bool
function pac_shrink_impl (line 228) | static bool
function pac_dalloc_impl (line 250) | static void
function pac_ns_until_purge (line 282) | static inline uint64_t
function pac_time_until_deferred_work (line 295) | static uint64_t
function pac_retain_grow_limit_get_set (line 316) | bool
function pac_stash_decayed (line 340) | static size_t
function pac_decay_stashed (line 362) | static size_t
function pac_decay_to_limit (line 434) | static void
function pac_decay_all (line 461) | void
function pac_decay_try_purge (line 469) | static void
function pac_maybe_decay_purge (line 480) | bool
function pac_decay_ms_set (line 519) | bool
function pac_decay_ms_get (line 549) | ssize_t
function pac_reset (line 558) | void
function pac_destroy (line 568) | void
FILE: deps/jemalloc/src/pages.c
function madvise_MADV_DONTNEED_zeroes_pages (line 62) | static int madvise_MADV_DONTNEED_zeroes_pages()
function pages_unmap (line 310) | void
function os_pages_commit (line 318) | static bool
function pages_commit_impl (line 347) | static bool
function pages_commit (line 356) | bool
function pages_decommit (line 361) | bool
function pages_mark_guards (line 366) | void
function pages_unmark_guards (line 389) | void
function pages_purge_lazy (line 426) | bool
function pages_purge_forced (line 464) | bool
function pages_huge_impl (line 489) | static bool
function pages_huge (line 507) | bool
function pages_huge_unaligned (line 512) | static bool
function pages_nohuge_impl (line 517) | static bool
function pages_nohuge (line 531) | bool
function pages_nohuge_unaligned (line 536) | static bool
function pages_dontdump (line 541) | bool
function pages_dodump (line 554) | bool
function os_page_detect (line 568) | static size_t
function os_overcommits_sysctl (line 590) | static bool
function os_overcommits_proc (line 620) | static bool
function pages_set_thp_state (line 681) | void
function init_thp_state (line 700) | static void
function pages_boot (line 757) | bool
FILE: deps/jemalloc/src/pai.c
function pai_alloc_batch_default (line 4) | size_t
function pai_dalloc_batch_default (line 21) | void
FILE: deps/jemalloc/src/peak_event.c
function peak_event_update (line 18) | void
function peak_event_activity_callback (line 26) | static void
function peak_event_zero (line 38) | void
function peak_event_max (line 46) | uint64_t
function peak_alloc_new_event_wait (line 52) | uint64_t
function peak_alloc_postponed_event_wait (line 57) | uint64_t
function peak_alloc_event_handler (line 62) | void
function peak_dalloc_new_event_wait (line 68) | uint64_t
function peak_dalloc_postponed_event_wait (line 73) | uint64_t
function peak_dalloc_event_handler (line 78) | void
FILE: deps/jemalloc/src/prof.c
function prof_alloc_rollback (line 82) | void
function prof_malloc_sample_object (line 98) | void
function prof_free_sampled_object (line 149) | void
function prof_tctx_t (line 182) | prof_tctx_t *
function prof_sample_new_event_wait (line 212) | uint64_t
function prof_sample_postponed_event_wait (line 255) | uint64_t
function prof_sample_event_handler (line 268) | void
function prof_fdump (line 280) | static void
function prof_idump_accum_init (line 296) | static bool
function prof_idump (line 303) | void
function prof_mdump (line 330) | bool
function prof_gdump (line 342) | void
function prof_thr_uid_alloc (line 369) | static uint64_t
function prof_tdata_t (line 381) | prof_tdata_t *
function prof_tdata_t (line 387) | prof_tdata_t *
function prof_tdata_cleanup (line 400) | void
function prof_active_get (line 414) | bool
function prof_active_set (line 425) | bool
function prof_thread_name_set (line 451) | int
function prof_thread_active_get (line 460) | bool
function prof_thread_active_set (line 473) | bool
function prof_thread_active_init_get (line 487) | bool
function prof_thread_active_init_set (line 497) | bool
function prof_gdump_get (line 508) | bool
function prof_gdump_set (line 518) | bool
function prof_backtrace_hook_set (line 529) | void
function prof_backtrace_hook_t (line 534) | prof_backtrace_hook_t
function prof_dump_hook_set (line 540) | void
function prof_dump_hook_t (line 545) | prof_dump_hook_t
function prof_boot0 (line 551) | void
function prof_boot1 (line 559) | void
function prof_boot2 (line 586) | bool
function prof_prefork0 (line 701) | void
function prof_prefork1 (line 720) | void
function prof_postfork_parent (line 734) | void
function prof_postfork_child (line 762) | void
FILE: deps/jemalloc/src/prof_data.c
function prof_tctx_comp (line 68) | static int
function malloc_mutex_t (line 134) | static malloc_mutex_t *
function prof_data_init (line 139) | bool
function prof_enter (line 146) | static void
function prof_leave (line 159) | static void
function prof_gctx_t (line 185) | static prof_gctx_t *
function prof_gctx_try_destroy (line 211) | static void
function prof_gctx_should_destroy (line 246) | static bool
function prof_lookup_global (line 260) | static bool
function prof_tctx_t (line 325) | prof_tctx_t *
function prof_tdata_t (line 399) | static prof_tdata_t *
function prof_tdata_count (line 410) | size_t
function prof_bt_count (line 425) | size_t
function prof_thread_name_set_impl (line 467) | int
function prof_dump_printf (line 508) | static void
function prof_double_uint64_cast (line 526) | static uint64_t
function prof_unbias_map_init (line 541) | void prof_unbias_map_init() {
function prof_do_unbias (line 615) | static void
function prof_dump_print_cnts (line 646) | static void
function prof_tctx_merge_tdata (line 669) | static void
function prof_tctx_merge_gctx (line 708) | static void
function prof_tctx_t (line 727) | static prof_tctx_t *
type prof_dump_iter_arg_t (line 748) | typedef struct prof_dump_iter_arg_s prof_dump_iter_arg_t;
type prof_dump_iter_arg_s (line 749) | struct prof_dump_iter_arg_s {
function prof_tctx_t (line 755) | static prof_tctx_t *
function prof_tctx_t (line 779) | static prof_tctx_t *
function prof_dump_gctx_prep (line 805) | static void
type prof_gctx_merge_iter_arg_t (line 824) | typedef struct prof_gctx_merge_iter_arg_s prof_gctx_merge_iter_arg_t;
type prof_gctx_merge_iter_arg_s (line 825) | struct prof_gctx_merge_iter_arg_s {
function prof_gctx_t (line 830) | static prof_gctx_t *
function prof_gctx_finish (line 845) | static void
type prof_tdata_merge_iter_arg_t (line 891) | typedef struct prof_tdata_merge_iter_arg_s prof_tdata_merge_iter_arg_t;
type prof_tdata_merge_iter_arg_s (line 892) | struct prof_tdata_merge_iter_arg_s {
function prof_tdata_t (line 897) | static prof_tdata_t *
function prof_tdata_t (line 941) | static prof_tdata_t *
function prof_dump_header (line 961) | static void
function prof_dump_gctx (line 973) | static void
function prof_leakcheck (line 1015) | static void
function prof_gctx_t (line 1054) | static prof_gctx_t *
function prof_dump_prep (line 1063) | static void
function prof_dump_impl (line 1105) | void
function prof_cnt_all (line 1124) | void
function prof_bt_hash (line 1138) | void
function prof_bt_keycomp (line 1147) | bool
function prof_tdata_t (line 1160) | prof_tdata_t *
function prof_tdata_should_destroy_unlocked (line 1205) | static bool
function prof_tdata_should_destroy (line 1216) | static bool
function prof_tdata_destroy_locked (line 1224) | static void
function prof_tdata_destroy (line 1242) | static void
function prof_tdata_detach (line 1249) | void
function prof_tdata_expire (line 1274) | static bool
function prof_tdata_t (line 1290) | static prof_tdata_t *
function prof_reset (line 1298) | void
function prof_tctx_should_destroy (line 1326) | static bool
function prof_tctx_destroy (line 1345) | static void
function prof_tctx_try_destroy (line 1436) | void
FILE: deps/jemalloc/src/prof_log.c
type prof_logging_state_t (line 16) | typedef enum prof_logging_state_e prof_logging_state_t;
type prof_logging_state_e (line 17) | enum prof_logging_state_e {
type prof_bt_node_t (line 50) | typedef struct prof_bt_node_s prof_bt_node_t;
type prof_bt_node_s (line 52) | struct prof_bt_node_s {
type prof_thr_node_t (line 60) | typedef struct prof_thr_node_s prof_thr_node_t;
type prof_thr_node_s (line 62) | struct prof_thr_node_s {
type prof_alloc_node_t (line 70) | typedef struct prof_alloc_node_s prof_alloc_node_t;
type prof_alloc_node_s (line 73) | struct prof_alloc_node_s {
function prof_log_bt_index (line 123) | static size_t
function prof_log_thr_index (line 166) | static size_t
function JEMALLOC_COLD (line 203) | JEMALLOC_COLD
function prof_bt_node_hash (line 282) | static void
function prof_bt_node_keycomp (line 288) | static bool
function prof_thr_node_hash (line 296) | static void
function prof_thr_node_keycomp (line 302) | static bool
function prof_log_bt_count (line 310) | size_t
function prof_log_alloc_count (line 323) | size_t
function prof_log_thr_count (line 336) | size_t
function prof_log_is_logging (line 349) | bool
function prof_log_rep_check (line 356) | bool
function prof_log_dummy_set (line 409) | void
function prof_log_stop_final (line 416) | static void
function JEMALLOC_COLD (line 422) | JEMALLOC_COLD
type prof_emitter_cb_arg_s (line 472) | struct prof_emitter_cb_arg_s {
function prof_emitter_write_cb (line 477) | static void
function prof_log_emit_threads (line 492) | static void
function prof_log_emit_traces (line 516) | static void
function prof_log_emit_allocs (line 545) | static void
function prof_log_emit_metadata (line 584) | static void
function JEMALLOC_COLD (line 612) | JEMALLOC_COLD
function JEMALLOC_COLD (line 701) | JEMALLOC_COLD
FILE: deps/jemalloc/src/prof_recent.c
function prof_recent_alloc_max_init (line 18) | static void
function prof_recent_alloc_max_get_no_lock (line 24) | static inline ssize_t
function prof_recent_alloc_max_get (line 29) | static inline ssize_t
function prof_recent_alloc_max_update (line 35) | static inline ssize_t
function prof_recent_t (line 43) | static prof_recent_t *
function prof_recent_free_node (line 50) | static void
function increment_recent_count (line 57) | static inline void
function prof_recent_alloc_prepare (line 64) | bool
function decrement_recent_count (line 93) | static void
function edata_t (line 103) | static inline edata_t *
function edata_t (line 108) | edata_t *
function edata_t (line 114) | static inline edata_t *
function prof_recent_alloc_edata_set (line 120) | static void
function edata_prof_recent_alloc_init (line 126) | void
function prof_recent_t (line 132) | static inline prof_recent_t *
function prof_recent_t (line 138) | prof_recent_t *
function prof_recent_t (line 144) | static inline prof_recent_t *
function prof_recent_t (line 154) | static prof_recent_t *
function edata_prof_recent_alloc_set (line 164) | static void
function edata_prof_recent_alloc_reset (line 175) | static void
function prof_recent_alloc_reset (line 195) | void
function prof_recent_alloc_evict_edata (line 241) | static void
function prof_recent_alloc_is_empty (line 250) | static bool
function prof_recent_alloc_assert_count (line 262) | static void
function prof_recent_alloc (line 278) | void
function prof_recent_alloc_max_ctl_read (line 405) | ssize_t
function prof_recent_alloc_restore_locked (line 412) | static void
function prof_recent_alloc_async_cleanup (line 444) | static void
function prof_recent_alloc_max_ctl_write (line 459) | ssize_t
function prof_recent_alloc_dump_bt (line 473) | static void
function prof_recent_alloc_dump_node (line 485) | static void
function JEMALLOC_COLD (line 531) | JEMALLOC_COLD
function prof_recent_init (line 582) | bool
FILE: deps/jemalloc/src/prof_stats.c
function prof_stats_enter (line 11) | static void
function prof_stats_leave (line 18) | static void
function prof_stats_inc (line 23) | void
function prof_stats_dec (line 34) | void
function prof_stats_get_live (line 43) | void
function prof_stats_get_accum (line 51) | void
FILE: deps/jemalloc/src/prof_sys.c
function bt_init (line 42) | void
function prof_backtrace_impl (line 51) | static void
function _Unwind_Reason_Code (line 67) | static _Unwind_Reason_Code
function _Unwind_Reason_Code (line 74) | static _Unwind_Reason_Code
function prof_backtrace_impl (line 94) | static void
function prof_backtrace_impl (line 105) | static void
function prof_backtrace_impl (line 270) | static void
function prof_backtrace (line 277) | void
function prof_hooks_init (line 288) | void
function prof_unwind_init (line 294) | void
function prof_sys_thread_name_read_impl (line 305) | static int
function prof_sys_thread_name_fetch (line 319) | void
function prof_getpid (line 329) | int
type prof_dump_arg_t (line 344) | typedef struct prof_dump_arg_s prof_dump_arg_t;
type prof_dump_arg_s (line 345) | struct prof_dump_arg_s {
function prof_dump_check_possible_error (line 364) | static void
function prof_dump_open_file_impl (line 389) | static int
function prof_dump_open (line 396) | static void
function prof_dump_flush (line 405) | static void
function prof_dump_close (line 417) | static void
function prof_open_maps_internal (line 426) | static int
function prof_dump_open_maps_impl (line 449) | static int
function prof_dump_read_maps_cb (line 471) | static ssize_t
function prof_dump_maps (line 478) | static void
function prof_dump (line 490) | static bool
function prof_strncpy (line 534) | static inline void
function prof_prefix_is_empty (line 549) | static bool
function prof_dump_filename (line 559) | static void
function prof_get_default_filename (line 580) | void
function prof_fdump_impl (line 588) | void
function prof_prefix_set (line 599) | bool
function prof_idump_impl (line 624) | void
function prof_mdump_impl (line 638) | bool
function prof_gdump_impl (line 656) | void
FILE: deps/jemalloc/src/psset.c
function psset_init (line 8) | void
function psset_bin_stats_accum (line 24) | static void
function psset_stats_accum (line 31) | void
function JEMALLOC_ALWAYS_INLINE (line 50) | JEMALLOC_ALWAYS_INLINE void
function psset_bin_stats_insert (line 83) | static void
function psset_bin_stats_remove (line 89) | static void
function psset_hpdata_heap_remove (line 95) | static void
function psset_hpdata_heap_insert (line 103) | static void
function psset_stats_insert (line 111) | static void
function psset_stats_remove (line 129) | static void
function psset_alloc_container_insert (line 151) | static void
function psset_alloc_container_remove (line 179) | static void
function psset_purge_list_ind (line 199) | static size_t
function psset_maybe_remove_purge_list (line 234) | static void
function psset_maybe_insert_purge_list (line 252) | static void
function psset_update_begin (line 265) | void
function psset_update_end (line 288) | void
function hpdata_t (line 316) | hpdata_t *
function hpdata_t (line 337) | hpdata_t *
function hpdata_t (line 351) | hpdata_t *
function psset_insert (line 356) | void
function psset_remove (line 372) | void
FILE: deps/jemalloc/src/rtree.c
function rtree_new (line 11) | bool
function rtree_node_elm_t (line 30) | static rtree_node_elm_t *
function rtree_leaf_elm_t (line 36) | static rtree_leaf_elm_t *
function rtree_node_elm_t (line 42) | static rtree_node_elm_t *
function rtree_leaf_elm_t (line 69) | static rtree_leaf_elm_t *
function rtree_node_valid (line 95) | static bool
function rtree_leaf_valid (line 100) | static bool
function rtree_node_elm_t (line 105) | static rtree_node_elm_t *
function rtree_node_elm_t (line 121) | static rtree_node_elm_t *
function rtree_leaf_elm_t (line 134) | static rtree_leaf_elm_t *
function rtree_leaf_elm_t (line 150) | static rtree_leaf_elm_t *
function rtree_leaf_elm_t (line 163) | rtree_leaf_elm_t *
function rtree_ctx_data_init (line 249) | void
FILE: deps/jemalloc/src/safety_check.c
function safety_check_fail_sized_dealloc (line 6) | void safety_check_fail_sized_dealloc(bool current_dealloc, const void *ptr,
function safety_check_set_abort (line 18) | void safety_check_set_abort(safety_check_abort_hook_t abort_fn) {
function safety_check_fail (line 22) | void safety_check_fail(const char *format, ...) {
FILE: deps/jemalloc/src/san.c
function san_find_guarded_addr (line 22) | static inline void
function san_find_unguarded_addr (line 42) | static inline void
function san_guard_pages (line 63) | void
function san_unguard_pages_impl (line 94) | static void
function san_unguard_pages (line 132) | void
function san_unguard_pages_pre_destroy (line 139) | void
function san_stashed_corrupted (line 153) | static bool
function san_check_stashed_ptrs (line 175) | void
function tsd_san_init (line 193) | void
function san_init (line 199) | void
FILE: deps/jemalloc/src/san_bump.c
function edata_t (line 14) | edata_t *
function san_bump_grow_locked (line 88) | static bool
FILE: deps/jemalloc/src/sc.c
function reg_size_compute (line 16) | size_t
function slab_size (line 22) | static int
function size_class (line 53) | static void
function size_classes (line 84) | static void
function sc_data_init (line 255) | void
function sc_data_update_sc_slab_size (line 263) | static void
function sc_data_update_slab_size (line 287) | void
function sc_boot (line 303) | void
FILE: deps/jemalloc/src/sec.c
function sec_bin_init (line 16) | static void
function sec_init (line 23) | bool
function sec_shard_t (line 88) | static sec_shard_t *
function sec_flush_some_and_unlock (line 120) | static void
function edata_t (line 157) | static edata_t *
function edata_t (line 175) | static edata_t *
function edata_t (line 220) | static edata_t *
function sec_expand (line 264) | static bool
function sec_shrink (line 272) | static bool
function sec_flush_all_locked (line 280) | static void
function sec_shard_dalloc_and_unlock (line 303) | static void
function sec_dalloc (line 336) | static void
function sec_flush (line 357) | void
function sec_disable (line 366) | void
function sec_stats_merge (line 376) | void
function sec_mutex_stats_read (line 392) | void
function sec_prefork2 (line 403) | void
function sec_postfork_parent (line 410) | void
function sec_postfork_child (line 417) | void
FILE: deps/jemalloc/src/stats.c
function rate_per_second (line 69) | static uint64_t
function get_rate_str (line 84) | static bool
function mutex_stats_init_cols (line 108) | static void
function mutex_stats_read_global (line 143) | static void
function mutex_stats_read_arena (line 176) | static void
function mutex_stats_read_arena_bin (line 209) | static void
function mutex_stats_emit (line 241) | static void
function JEMALLOC_COLD (line 301) | JEMALLOC_COLD
function JEMALLOC_COLD (line 559) | JEMALLOC_COLD
function JEMALLOC_COLD (line 693) | JEMALLOC_COLD
function stats_arena_hpa_shard_print (line 787) | static void
function stats_arena_mutexes_print (line 1011) | static void
function JEMALLOC_COLD (line 1041) | JEMALLOC_COLD
function JEMALLOC_COLD (line 1370) | JEMALLOC_COLD
function JEMALLOC_COLD (line 1679) | JEMALLOC_COLD
function stats_print (line 1854) | void
function stats_interval_new_event_wait (line 1917) | uint64_t
function stats_interval_postponed_event_wait (line 1922) | uint64_t
function stats_interval_event_handler (line 1927) | void
function stats_boot (line 1936) | bool
function stats_prefork (line 1960) | void
function stats_postfork_parent (line 1965) | void
function stats_postfork_child (line 1970) | void
FILE: deps/jemalloc/src/sz.c
function sz_psz_quantize_floor (line 9) | size_t
function sz_psz_quantize_ceil (line 32) | size_t
function sz_boot_pind2sz_tab (line 56) | static void
function sz_boot_index2size_tab (line 75) | static void
function sz_boot_size2index_tab (line 91) | static void
function sz_boot (line 108) | void
FILE: deps/jemalloc/src/tcache.c
function tcache_salloc (line 84) | size_t
function tcache_gc_new_event_wait (line 89) | uint64_t
function tcache_gc_postponed_event_wait (line 94) | uint64_t
function tcache_gc_dalloc_new_event_wait (line 99) | uint64_t
function tcache_gc_dalloc_postponed_event_wait (line 104) | uint64_t
function tcache_gc_item_delay_compute (line 109) | static uint8_t
function tcache_gc_small (line 122) | static void
function tcache_gc_large (line 161) | static void
function tcache_event (line 175) | static void
function tcache_gc_event_handler (line 216) | void
function tcache_gc_dalloc_event_handler (line 222) | void
function tcache_bin_flush_metadata_visitor (line 252) | static void
function JEMALLOC_NOINLINE (line 260) | JEMALLOC_NOINLINE static void
function tcache_bin_flush_edatas_lookup (line 278) | static void
function JEMALLOC_ALWAYS_INLINE (line 297) | JEMALLOC_ALWAYS_INLINE bool
function JEMALLOC_ALWAYS_INLINE (line 308) | JEMALLOC_ALWAYS_INLINE void
function JEMALLOC_ALWAYS_INLINE (line 505) | JEMALLOC_ALWAYS_INLINE void
function tcache_bin_flush_small (line 526) | void
function tcache_bin_flush_large (line 532) | void
function tcache_bin_flush_stashed (line 548) | void
function tcache_arena_associate (line 580) | void
function tcache_arena_dissociate (line 601) | static void
function tcache_arena_reassociate (line 629) | void
function tsd_tcache_enabled_data_init (line 636) | bool
function tcache_init (line 650) | static void
function tsd_tcache_data_init (line 708) | bool
function tcache_t (line 753) | tcache_t *
function tcache_flush_cache (line 782) | static void
function tcache_flush (line 800) | void
function tcache_destroy (line 806) | static void
function tcache_cleanup (line 841) | void
function tcache_stats_merge (line 862) | void
function tcaches_create_prep (line 882) | static bool
function tcaches_create (line 907) | bool
function tcache_t (line 946) | static tcache_t *
function tcaches_flush (line 966) | void
function tcaches_destroy (line 977) | void
function tcache_ncached_max_compute (line 990) | static unsigned
function tcache_boot (line 1048) | bool
function tcache_prefork (line 1084) | void
function tcache_postfork_parent (line 1089) | void
function tcache_postfork_child (line 1094) | void
function tcache_assert_initialized (line 1099) | void tcache_assert_initialized(tcache_t *tcache) {
FILE: deps/jemalloc/src/thread_event.c
function tcache_gc_fetch_elapsed (line 36) | static uint64_t
function tcache_gc_dalloc_fetch_elapsed (line 41) | static uint64_t
function prof_sample_fetch_elapsed (line 46) | static uint64_t
function stats_interval_fetch_elapsed (line 54) | static uint64_t
function peak_alloc_fetch_elapsed (line 62) | static uint64_t
function peak_dalloc_fetch_elapsed (line 67) | static uint64_t
function te_ctx_has_active_events (line 74) | static bool
function te_next_event_compute (line 86) | static uint64_t
function te_assert_invariants_impl (line 105) | static void
function te_assert_invariants_debug (line 136) | void
function te_ctx_next_event_fast_update (line 193) | static void
function te_recompute_fast_threshold (line 201) | void
function te_adjust_thresholds_helper (line 221) | static void
function te_clip_event_wait (line 236) | static uint64_t
function te_event_trigger (line 250) | void
function te_init (line 305) | static void
function tsd_te_init (line 336) | void
FILE: deps/jemalloc/src/tsd.c
type tsd_init_head_s (line 35) | struct tsd_init_head_s {
function tsd_in_nominal_list (line 65) | static bool
function tsd_add_nominal (line 84) | static void
function tsd_remove_nominal (line 94) | static void
function tsd_force_recompute (line 103) | static void
function tsd_global_slow_inc (line 124) | void
function tsd_global_slow_dec (line 138) | void tsd_global_slow_dec(tsdn_t *tsdn) {
function tsd_local_slow (line 144) | static bool
function tsd_global_slow (line 150) | bool
function tsd_state_compute (line 157) | static uint8_t
function tsd_slow_update (line 170) | void
function tsd_state_set (line 182) | void
function tsd_prng_state_init (line 221) | static void
function tsd_data_init (line 234) | static bool
function assert_tsd_data_cleanup_done (line 247) | static void
function tsd_data_init_nocleanup (line 257) | static bool
function tsd_t (line 277) | tsd_t *
function malloc_tsd_dalloc (line 331) | void
function _malloc_thread_cleanup (line 343) | void
function _malloc_tsd_cleanup_register (line 368) | void
function tsd_do_data_cleanup (line 377) | static void
function tsd_cleanup (line 387) | void
function tsd_t (line 432) | tsd_t *
function malloc_tsd_boot1 (line 450) | void
function BOOL (line 459) | static BOOL WINAPI
function tsd_init_finish (line 523) | void
function tsd_prefork (line 531) | void
function tsd_postfork_parent (line 536) | void
function tsd_postfork_child (line 541) | void
FILE: deps/jemalloc/src/witness.c
function witness_init (line 7) | void
function witness_print_witness (line 16) | static void
function witness_pri
Copy disabled (too large)
Download .json
Condensed preview — 1750 files, each showing path, character count, and a content snippet. Download the .json file for the full structured content (20,633K chars).
[
{
"path": ".codespell/.codespellrc",
"chars": 139,
"preview": "[codespell]\nquiet-level = 2\ncount =\nskip = ./deps,./src/crc16_slottable.h,tmp*,./.git,./lcov-html\nignore-words = ./.code"
},
{
"path": ".codespell/requirements.txt",
"chars": 17,
"preview": "codespell==2.2.5\n"
},
{
"path": ".codespell/wordlist.txt",
"chars": 111,
"preview": "ake\nbale\nfle\nfo\ngameboy\nmutli\nnd\nnees\noll\noptin\not\nsmove\nte\ntre\ncancelability\nist\nstatics\nfiletest\nro\nexat\nclen"
},
{
"path": ".gitattributes",
"chars": 405,
"preview": "# We set commands.c's merge driver to `binary` so when it conflicts during a\n# merge git will leave the local version un"
},
{
"path": ".github/ISSUE_TEMPLATE/bug_report.md",
"chars": 409,
"preview": "---\nname: Bug report\nabout: Help us improve Redis by reporting a bug\ntitle: '[BUG]'\nlabels: ''\nassignees: ''\n\n---\n\n**Des"
},
{
"path": ".github/ISSUE_TEMPLATE/crash_report.md",
"chars": 580,
"preview": "---\nname: Crash report\nabout: Submit a crash report\ntitle: '[CRASH] <short description>'\nlabels: ''\nassignees: ''\n\n---\n\n"
},
{
"path": ".github/ISSUE_TEMPLATE/feature_request.md",
"chars": 623,
"preview": "---\nname: Feature request\nabout: Suggest a feature for Redis\ntitle: '[NEW]'\nlabels: ''\nassignees: ''\n\n---\n\n**The problem"
},
{
"path": ".github/ISSUE_TEMPLATE/other_stuff.md",
"chars": 110,
"preview": "---\nname: Other\nabout: Can't find the right issue type? Use this one!\ntitle: ''\nlabels: ''\nassignees: ''\n\n---\n"
},
{
"path": ".github/ISSUE_TEMPLATE/question.md",
"chars": 941,
"preview": "---\nname: Question\nabout: Ask the Redis developers\ntitle: '[QUESTION]'\nlabels: ''\nassignees: ''\n\n---\n\nPlease keep in min"
},
{
"path": ".github/dependabot.yml",
"chars": 526,
"preview": "# To get started with Dependabot version updates, you'll need to specify which\n# package ecosystems to update and where "
},
{
"path": ".github/workflows/ci.yml",
"chars": 3174,
"preview": "name: CI\n\non: [push, pull_request]\n\njobs:\n\n test-ubuntu-latest:\n runs-on: ubuntu-latest\n steps:\n - uses: actio"
},
{
"path": ".github/workflows/codecov.yml",
"chars": 801,
"preview": "name: \"Codecov\"\n\n# Enabling on each push is to display the coverage changes in every PR, \n# where each PR needs to be co"
},
{
"path": ".github/workflows/codeql-analysis.yml",
"chars": 706,
"preview": "name: \"CodeQL\"\n\non:\n pull_request:\n schedule:\n # run weekly new vulnerability was added to the database\n - cron:"
},
{
"path": ".github/workflows/coverity.yml",
"chars": 1504,
"preview": "# Creates and uploads a Coverity build on a schedule\nname: Coverity Scan\non:\n schedule:\n # Run once daily, since below"
},
{
"path": ".github/workflows/daily.yml",
"chars": 65972,
"preview": "name: Daily\n\non:\n pull_request:\n branches:\n # any PR to a release branch.\n - '[0-9].[0-9]'\n schedule:\n "
},
{
"path": ".github/workflows/external.yml",
"chars": 2731,
"preview": "name: External Server Tests\n\non:\n pull_request:\n push:\n schedule:\n - cron: '0 0 * * *'\n\njobs:\n test-exter"
},
{
"path": ".github/workflows/post-release-automation.yml",
"chars": 6117,
"preview": "name: Post-Release Automation\n\non:\n release:\n types: [published]\n\njobs:\n extract-release-info:\n if: github.repos"
},
{
"path": ".github/workflows/redis_docs_sync.yaml",
"chars": 1099,
"preview": "name: redis_docs_sync\n\non:\n release:\n types: [published]\n\njobs:\n redis_docs_sync:\n if: github.repository == 'red"
},
{
"path": ".github/workflows/reply-schemas-linter.yml",
"chars": 435,
"preview": "name: Reply-schemas linter\n\non:\n push:\n paths:\n - 'src/commands/*.json'\n pull_request:\n paths:\n - 'src"
},
{
"path": ".github/workflows/spell-check.yml",
"chars": 857,
"preview": "# A CI action that using codespell to check spell.\n# .github/.codespellrc is a config file.\n# .github/wordlist.txt is a "
},
{
"path": ".gitignore",
"chars": 559,
"preview": ".*.swp\n*.o\n*.xo\n*.so\n*.d\n*.log\ndump.rdb\nredis-benchmark\nredis-check-aof\nredis-check-rdb\nredis-check-dump\nredis-cli\nredis"
},
{
"path": "00-RELEASENOTES",
"chars": 627,
"preview": "Hello! This file is just a placeholder, since this is the \"unstable\" branch\nof Redis, the place where all the developmen"
},
{
"path": "BUGS",
"chars": 51,
"preview": "Please check https://github.com/redis/redis/issues\n"
},
{
"path": "CODE_OF_CONDUCT.md",
"chars": 5023,
"preview": "Contributor Covenant Code of Conduct\nOur Pledge\nWe as members, contributors, and leaders pledge to make participation in"
},
{
"path": "CONTRIBUTING.md",
"chars": 7218,
"preview": "By contributing code to the Redis project in any form you agree to the Redis Software Grant and\nContributor License Agre"
},
{
"path": "INSTALL",
"chars": 11,
"preview": "See README\n"
},
{
"path": "LICENSE.txt",
"chars": 72266,
"preview": "Starting with Redis 8, Redis Open Source is moving to a tri-licensing model with all new Redis code\ncontributions govern"
},
{
"path": "MANIFESTO",
"chars": 6888,
"preview": "[Note: this is the Redis manifesto, for general information about\n installing and running Redis read the README fi"
},
{
"path": "Makefile",
"chars": 426,
"preview": "# Top level makefile, the real stuff is at ./src/Makefile and in ./modules/Makefile\n\nSUBDIRS = src\nifeq ($(BUILD_WITH_MO"
},
{
"path": "README.md",
"chars": 39163,
"preview": "[](https://codecov.io/github/redis/red"
},
{
"path": "REDISCONTRIBUTIONS.txt",
"chars": 1853,
"preview": "Copyright (c) 2006-Present, Redis Ltd. and Contributors\nAll rights reserved.\n\nNote: Continued Applicability of the BSD-3"
},
{
"path": "SECURITY.md",
"chars": 3690,
"preview": "# Security Policy\n\n## Supported Versions\n\nRedis is generally backward compatible with very few exceptions, so we\nrecomme"
},
{
"path": "TLS.md",
"chars": 3628,
"preview": "TLS Support\n===========\n\nGetting Started\n---------------\n\n### Building\n\nTo build with TLS support you'll need OpenSSL de"
},
{
"path": "codecov.yml",
"chars": 339,
"preview": "coverage:\n status:\n patch:\n default:\n informational: true\n project:\n default:\n informatio"
},
{
"path": "deps/Makefile",
"chars": 4766,
"preview": "# Redis dependency Makefile\n\nuname_S:= $(shell sh -c 'uname -s 2>/dev/null || echo not')\n\nLUA_DEBUG?=no\nLUA_COVERAGE?=no"
},
{
"path": "deps/README.md",
"chars": 5582,
"preview": "This directory contains all Redis dependencies, except for the libc that\nshould be provided by the operating system.\n\n* "
},
{
"path": "deps/fpconv/LICENSE.txt",
"chars": 1338,
"preview": "Boost Software License - Version 1.0 - August 17th, 2003\n\nPermission is hereby granted, free of charge, to any person or"
},
{
"path": "deps/fpconv/Makefile",
"chars": 331,
"preview": "STD=\nWARN= -Wall\nOPT= -Os\n\nR_CFLAGS= $(STD) $(WARN) $(OPT) $(DEBUG) $(CFLAGS)\nR_LDFLAGS= $(LDFLAGS)\nDEBUG= -g\n\nR_CC=$(CC"
},
{
"path": "deps/fpconv/README.md",
"chars": 453,
"preview": "libfpconv\n\n----------------------------------------------\n\nFast and accurate double to string conversion based on Floria"
},
{
"path": "deps/fpconv/fpconv_dtoa.c",
"chars": 9632,
"preview": "/* fpconv_dtoa.c -- floating point conversion utilities.\n *\n * Fast and accurate double to string conversion based on Fl"
},
{
"path": "deps/fpconv/fpconv_dtoa.h",
"chars": 2066,
"preview": "/* fpconv_dtoa.h -- floating point conversion utilities.\n *\n * Fast and accurate double to string conversion based on Fl"
},
{
"path": "deps/fpconv/fpconv_powers.h",
"chars": 6010,
"preview": "/* fpconv_powers.h -- floating point conversion utilities.\n *\n * Fast and accurate double to string conversion based on "
},
{
"path": "deps/hdr_histogram/COPYING.txt",
"chars": 7048,
"preview": "Creative Commons Legal Code\n\nCC0 1.0 Universal\n\n CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE\n"
},
{
"path": "deps/hdr_histogram/LICENSE.txt",
"chars": 2161,
"preview": "The code in this repository code was Written by Gil Tene, Michael Barker,\nand Matt Warren, and released to the public do"
},
{
"path": "deps/hdr_histogram/Makefile",
"chars": 398,
"preview": "STD= -std=c99\nWARN= -Wall\nOPT= -Os\n\nR_CFLAGS= $(STD) $(WARN) $(OPT) $(DEBUG) $(CFLAGS) -DHDR_MALLOC_INCLUDE=\\\"hdr_redis_"
},
{
"path": "deps/hdr_histogram/README.md",
"chars": 2125,
"preview": "HdrHistogram_c: 'C' port of High Dynamic Range (HDR) Histogram\n\nHdrHistogram\n-------------------------------------------"
},
{
"path": "deps/hdr_histogram/hdr_atomic.h",
"chars": 3842,
"preview": "/**\n * hdr_atomic.h\n * Written by Philip Orwig and released to the public domain,\n * as explained at http://creativecomm"
},
{
"path": "deps/hdr_histogram/hdr_histogram.c",
"chars": 37416,
"preview": "/**\n * hdr_histogram.c\n * Written by Michael Barker and released to the public domain,\n * as explained at http://creativ"
},
{
"path": "deps/hdr_histogram/hdr_histogram.h",
"chars": 17830,
"preview": "/**\n * hdr_histogram.h\n * Written by Michael Barker and released to the public domain,\n * as explained at http://creativ"
},
{
"path": "deps/hdr_histogram/hdr_redis_malloc.h",
"chars": 300,
"preview": "#ifndef HDR_MALLOC_H__\n#define HDR_MALLOC_H__\n\nvoid *zmalloc(size_t size);\nvoid *zcalloc_num(size_t num, size_t size);\nv"
},
{
"path": "deps/hdr_histogram/hdr_tests.h",
"chars": 631,
"preview": "#ifndef HDR_TESTS_H\n#define HDR_TESTS_H\n\n/* These are functions used in tests and are not intended for normal usage. */\n"
},
{
"path": "deps/hiredis/.github/release-drafter-config.yml",
"chars": 932,
"preview": "name-template: '$NEXT_MAJOR_VERSION'\ntag-template: 'v$NEXT_MAJOR_VERSION'\nautolabeler:\n - label: 'maintenance'\n file"
},
{
"path": "deps/hiredis/.github/workflows/build.yml",
"chars": 5131,
"preview": "name: Build and test\non: [push, pull_request]\n\njobs:\n ubuntu:\n name: Ubuntu\n runs-on: ubuntu-latest\n steps:\n "
},
{
"path": "deps/hiredis/.github/workflows/release-drafter.yml",
"chars": 562,
"preview": "name: Release Drafter\n\non:\n push:\n # branches to consider in the event; optional, defaults to all\n branches:\n "
},
{
"path": "deps/hiredis/.github/workflows/test.yml",
"chars": 3033,
"preview": "name: C/C++ CI\n\non:\n push:\n branches: [ master ]\n pull_request:\n branches: [ master ]\n\njobs:\n full-build:\n n"
},
{
"path": "deps/hiredis/.gitignore",
"chars": 84,
"preview": "/hiredis-test\n/examples/hiredis-example*\n/*.o\n/*.so\n/*.dylib\n/*.a\n/*.pc\n*.dSYM\ntags\n"
},
{
"path": "deps/hiredis/.travis.yml",
"chars": 3242,
"preview": "language: c\ncompiler:\n - gcc\n - clang\n\nos:\n - linux\n - osx\n\ndist: bionic\n\nbranches:\n only:\n - staging\n - tryi"
},
{
"path": "deps/hiredis/CHANGELOG.md",
"chars": 44747,
"preview": "## [1.2.0](https://github.com/redis/hiredis/tree/v1.2.0) - (2023-06-04)\n\nAnnouncing Hiredis v1.2.0 with with new adapter"
},
{
"path": "deps/hiredis/CMakeLists.txt",
"chars": 8129,
"preview": "CMAKE_MINIMUM_REQUIRED(VERSION 3.0.0)\n\nOPTION(BUILD_SHARED_LIBS \"Build shared libraries\" ON)\nOPTION(ENABLE_SSL \"Build hi"
},
{
"path": "deps/hiredis/COPYING",
"chars": 1588,
"preview": "Copyright (c) 2009-2011, Salvatore Sanfilippo <antirez at gmail dot com>\nCopyright (c) 2010-2011, Pieter Noordhuis <pcno"
},
{
"path": "deps/hiredis/Makefile",
"chars": 13596,
"preview": "# Hiredis Makefile\n# Copyright (C) 2010-2011 Salvatore Sanfilippo <antirez at gmail dot com>\n# Copyright (C) 2010-2011 P"
},
{
"path": "deps/hiredis/README.md",
"chars": 35844,
"preview": "\n[](https://github.com/redis/hire"
},
{
"path": "deps/hiredis/adapters/ae.h",
"chars": 4271,
"preview": "/*\n * Copyright (c) 2010-2011, Pieter Noordhuis <pcnoordhuis at gmail dot com>\n *\n * All rights reserved.\n *\n * Redistri"
},
{
"path": "deps/hiredis/adapters/glib.h",
"chars": 3854,
"preview": "#ifndef __HIREDIS_GLIB_H__\n#define __HIREDIS_GLIB_H__\n\n#include <glib.h>\n\n#include \"../hiredis.h\"\n#include \"../async.h\"\n"
},
{
"path": "deps/hiredis/adapters/ivykis.h",
"chars": 2327,
"preview": "#ifndef __HIREDIS_IVYKIS_H__\n#define __HIREDIS_IVYKIS_H__\n#include <iv.h>\n#include \"../hiredis.h\"\n#include \"../async.h\"\n"
},
{
"path": "deps/hiredis/adapters/libev.h",
"chars": 5597,
"preview": "/*\n * Copyright (c) 2010-2011, Pieter Noordhuis <pcnoordhuis at gmail dot com>\n *\n * All rights reserved.\n *\n * Redistri"
},
{
"path": "deps/hiredis/adapters/libevent.h",
"chars": 5613,
"preview": "/*\n * Copyright (c) 2010-2011, Pieter Noordhuis <pcnoordhuis at gmail dot com>\n *\n * All rights reserved.\n *\n * Redistri"
},
{
"path": "deps/hiredis/adapters/libhv.h",
"chars": 3398,
"preview": "#ifndef __HIREDIS_LIBHV_H__\n#define __HIREDIS_LIBHV_H__\n\n#include <hv/hloop.h>\n#include \"../hiredis.h\"\n#include \"../asyn"
},
{
"path": "deps/hiredis/adapters/libsdevent.h",
"chars": 4953,
"preview": "#ifndef HIREDIS_LIBSDEVENT_H\n#define HIREDIS_LIBSDEVENT_H\n#include <systemd/sd-event.h>\n#include \"../hiredis.h\"\n#include"
},
{
"path": "deps/hiredis/adapters/libuv.h",
"chars": 4506,
"preview": "#ifndef __HIREDIS_LIBUV_H__\n#define __HIREDIS_LIBUV_H__\n#include <stdlib.h>\n#include <uv.h>\n#include \"../hiredis.h\"\n#inc"
},
{
"path": "deps/hiredis/adapters/macosx.h",
"chars": 3870,
"preview": "//\n// Created by Дмитрий Бахвалов on 13.07.15.\n// Copyright (c) 2015 Dmitry Bakhvalov. All rights reserved.\n//\n\n#ifnde"
},
{
"path": "deps/hiredis/adapters/poll.h",
"chars": 5260,
"preview": "\n#ifndef HIREDIS_POLL_H\n#define HIREDIS_POLL_H\n\n#include \"../async.h\"\n#include \"../sockcompat.h\"\n#include <string.h> // "
},
{
"path": "deps/hiredis/adapters/qt.h",
"chars": 4233,
"preview": "/*-\n * Copyright (C) 2014 Pietro Cerutti <gahr@gahr.ch>\n *\n * Redistribution and use in source and binary forms, with or"
},
{
"path": "deps/hiredis/adapters/redismoduleapi.h",
"chars": 4122,
"preview": "#ifndef __HIREDIS_REDISMODULEAPI_H__\n#define __HIREDIS_REDISMODULEAPI_H__\n\n#include \"redismodule.h\"\n\n#include \"../async."
},
{
"path": "deps/hiredis/alloc.c",
"chars": 2928,
"preview": "/*\n * Copyright (c) 2020, Michael Grunder <michael dot grunder at gmail dot com>\n *\n * All rights reserved.\n *\n * Redist"
},
{
"path": "deps/hiredis/alloc.h",
"chars": 3130,
"preview": "/*\n * Copyright (c) 2020, Michael Grunder <michael dot grunder at gmail dot com>\n *\n * All rights reserved.\n *\n * Redist"
},
{
"path": "deps/hiredis/appveyor.yml",
"chars": 743,
"preview": "# Appveyor configuration file for CI build of hiredis on Windows (under Cygwin)\nenvironment:\n matrix:\n - CYG_B"
},
{
"path": "deps/hiredis/async.c",
"chars": 33976,
"preview": "/*\n * Copyright (c) 2009-2011, Salvatore Sanfilippo <antirez at gmail dot com>\n * Copyright (c) 2010-2011, Pieter Noordh"
},
{
"path": "deps/hiredis/async.h",
"chars": 6288,
"preview": "/*\n * Copyright (c) 2009-2011, Salvatore Sanfilippo <antirez at gmail dot com>\n * Copyright (c) 2010-2011, Pieter Noordh"
},
{
"path": "deps/hiredis/async_private.h",
"chars": 3367,
"preview": "/*\n * Copyright (c) 2009-2011, Salvatore Sanfilippo <antirez at gmail dot com>\n * Copyright (c) 2010-2011, Pieter Noordh"
},
{
"path": "deps/hiredis/dict.c",
"chars": 10650,
"preview": "/* Hash table implementation.\n *\n * This file implements in memory hash tables with insert/del/replace/find/\n * get-rand"
},
{
"path": "deps/hiredis/dict.h",
"chars": 4650,
"preview": "/* Hash table implementation.\n *\n * This file implements in memory hash tables with insert/del/replace/find/\n * get-rand"
},
{
"path": "deps/hiredis/examples/CMakeLists.txt",
"chars": 1664,
"preview": "INCLUDE(FindPkgConfig)\n# Check for GLib\n\nPKG_CHECK_MODULES(GLIB2 glib-2.0)\nif (GLIB2_FOUND)\n INCLUDE_DIRECTORIES(${GL"
},
{
"path": "deps/hiredis/examples/example-ae.c",
"chars": 1583,
"preview": "#include <stdio.h>\n#include <stdlib.h>\n#include <string.h>\n#include <signal.h>\n\n#include <hiredis.h>\n#include <async.h>\n"
},
{
"path": "deps/hiredis/examples/example-glib.c",
"chars": 1632,
"preview": "#include <stdlib.h>\n\n#include <hiredis.h>\n#include <async.h>\n#include <adapters/glib.h>\n\nstatic GMainLoop *mainloop;\n\nst"
},
{
"path": "deps/hiredis/examples/example-ivykis.c",
"chars": 1440,
"preview": "#include <stdio.h>\n#include <stdlib.h>\n#include <string.h>\n#include <signal.h>\n\n#include <hiredis.h>\n#include <async.h>\n"
},
{
"path": "deps/hiredis/examples/example-libev.c",
"chars": 1427,
"preview": "#include <stdio.h>\n#include <stdlib.h>\n#include <string.h>\n#include <signal.h>\n\n#include <hiredis.h>\n#include <async.h>\n"
},
{
"path": "deps/hiredis/examples/example-libevent-ssl.c",
"chars": 2343,
"preview": "#include <stdio.h>\n#include <stdlib.h>\n#include <string.h>\n#include <signal.h>\n\n#include <hiredis.h>\n#include <hiredis_s"
},
{
"path": "deps/hiredis/examples/example-libevent.c",
"chars": 1750,
"preview": "#include <stdio.h>\n#include <stdlib.h>\n#include <string.h>\n#include <signal.h>\n\n#include <hiredis.h>\n#include <async.h>\n"
},
{
"path": "deps/hiredis/examples/example-libhv.c",
"chars": 1936,
"preview": "#include <stdio.h>\n#include <stdlib.h>\n#include <string.h>\n#include <signal.h>\n\n#include <hiredis.h>\n#include <async.h>\n"
},
{
"path": "deps/hiredis/examples/example-libsdevent.c",
"chars": 2834,
"preview": "#include <stdio.h>\n#include <stdlib.h>\n#include <string.h>\n#include <signal.h>\n\n#include <hiredis.h>\n#include <async.h>\n"
},
{
"path": "deps/hiredis/examples/example-libuv.c",
"chars": 2572,
"preview": "#include <stdio.h>\n#include <stdlib.h>\n#include <string.h>\n#include <signal.h>\n\n#include <hiredis.h>\n#include <async.h>\n"
},
{
"path": "deps/hiredis/examples/example-macosx.c",
"chars": 1639,
"preview": "//\n// Created by Дмитрий Бахвалов on 13.07.15.\n// Copyright (c) 2015 Dmitry Bakhvalov. All rights reserved.\n//\n\n#inclu"
},
{
"path": "deps/hiredis/examples/example-poll.c",
"chars": 1569,
"preview": "#include <stdio.h>\n#include <stdlib.h>\n#include <string.h>\n#include <signal.h>\n#include <unistd.h>\n\n#include <async.h>\n#"
},
{
"path": "deps/hiredis/examples/example-push.c",
"chars": 6009,
"preview": "/*\n * Copyright (c) 2020, Michael Grunder <michael dot grunder at gmail dot com>\n *\n * All rights reserved.\n *\n * Redist"
},
{
"path": "deps/hiredis/examples/example-qt.cpp",
"chars": 1047,
"preview": "#include <iostream>\nusing namespace std;\n\n#include <QCoreApplication>\n#include <QTimer>\n\n#include \"example-qt.h\"\n\nvoid g"
},
{
"path": "deps/hiredis/examples/example-qt.h",
"chars": 620,
"preview": "#ifndef __HIREDIS_EXAMPLE_QT_H\n#define __HIREDIS_EXAMPLE_QT_H\n\n#include <adapters/qt.h>\n\nclass ExampleQt : public QObjec"
},
{
"path": "deps/hiredis/examples/example-redismoduleapi.c",
"chars": 3304,
"preview": "#include <stdio.h>\n#include <stdlib.h>\n#include <string.h>\n#include <signal.h>\n\n#include <hiredis.h>\n#include <async.h>\n"
},
{
"path": "deps/hiredis/examples/example-ssl.c",
"chars": 3196,
"preview": "#include <stdio.h>\n#include <stdlib.h>\n#include <string.h>\n\n#include <hiredis.h>\n#include <hiredis_ssl.h>\n\n#ifdef _MSC_V"
},
{
"path": "deps/hiredis/examples/example.c",
"chars": 4141,
"preview": "#include <stdio.h>\n#include <stdlib.h>\n#include <string.h>\n#include <hiredis.h>\n\n#ifdef _MSC_VER\n#include <winsock2.h> /"
},
{
"path": "deps/hiredis/fmacros.h",
"chars": 245,
"preview": "#ifndef __HIREDIS_FMACRO_H\n#define __HIREDIS_FMACRO_H\n\n#ifndef _AIX\n#define _XOPEN_SOURCE 600\n#define _POSIX_C_SOURCE 20"
},
{
"path": "deps/hiredis/fuzzing/format_command_fuzzer.c",
"chars": 2242,
"preview": "/*\n * Copyright (c) 2020, Salvatore Sanfilippo <antirez at gmail dot com>\n * Copyright (c) 2020, Pieter Noordhuis <pcnoo"
},
{
"path": "deps/hiredis/hiredis-config.cmake.in",
"chars": 336,
"preview": "@PACKAGE_INIT@\n\nset_and_check(hiredis_INCLUDEDIR \"@PACKAGE_INCLUDE_INSTALL_DIR@\")\n\nIF (NOT TARGET hiredis::@hiredis_expo"
},
{
"path": "deps/hiredis/hiredis.c",
"chars": 37158,
"preview": "/*\n * Copyright (c) 2009-2011, Salvatore Sanfilippo <antirez at gmail dot com>\n * Copyright (c) 2010-2014, Pieter Noordh"
},
{
"path": "deps/hiredis/hiredis.h",
"chars": 14325,
"preview": "/*\n * Copyright (c) 2009-2011, Salvatore Sanfilippo <antirez at gmail dot com>\n * Copyright (c) 2010-2014, Pieter Noordh"
},
{
"path": "deps/hiredis/hiredis.pc.in",
"chars": 385,
"preview": "prefix=@CMAKE_INSTALL_PREFIX@\ninstall_libdir=@CMAKE_INSTALL_LIBDIR@\nexec_prefix=${prefix}\nlibdir=${exec_prefix}/${instal"
},
{
"path": "deps/hiredis/hiredis.targets",
"chars": 522,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuil"
},
{
"path": "deps/hiredis/hiredis_ssl-config.cmake.in",
"chars": 400,
"preview": "@PACKAGE_INIT@\n\nset_and_check(hiredis_ssl_INCLUDEDIR \"@PACKAGE_INCLUDE_INSTALL_DIR@\")\n\ninclude(CMakeFindDependencyMacro)"
},
{
"path": "deps/hiredis/hiredis_ssl.h",
"chars": 6080,
"preview": "\n/*\n * Copyright (c) 2019, Redis Labs\n *\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms"
},
{
"path": "deps/hiredis/hiredis_ssl.pc.in",
"chars": 358,
"preview": "prefix=@CMAKE_INSTALL_PREFIX@\ninstall_libdir=@CMAKE_INSTALL_LIBDIR@\nexec_prefix=${prefix}\nlibdir=${exec_prefix}/${instal"
},
{
"path": "deps/hiredis/net.c",
"chars": 20886,
"preview": "/* Extracted from anet.c to work properly with Hiredis error reporting.\n *\n * Copyright (c) 2009-2011, Salvatore Sanfili"
},
{
"path": "deps/hiredis/net.h",
"chars": 2836,
"preview": "/* Extracted from anet.c to work properly with Hiredis error reporting.\n *\n * Copyright (c) 2009-2011, Salvatore Sanfili"
},
{
"path": "deps/hiredis/read.c",
"chars": 23497,
"preview": "/*\n * Copyright (c) 2009-2011, Salvatore Sanfilippo <antirez at gmail dot com>\n * Copyright (c) 2010-2011, Pieter Noordh"
},
{
"path": "deps/hiredis/read.h",
"chars": 4918,
"preview": "/*\n * Copyright (c) 2009-2011, Salvatore Sanfilippo <antirez at gmail dot com>\n * Copyright (c) 2010-2011, Pieter Noordh"
},
{
"path": "deps/hiredis/sds.c",
"chars": 41884,
"preview": "/* SDSLib 2.0 -- A C dynamic strings library\n *\n * Copyright (c) 2006-2015, Salvatore Sanfilippo <antirez at gmail dot c"
},
{
"path": "deps/hiredis/sds.h",
"chars": 9798,
"preview": "/* SDSLib 2.0 -- A C dynamic strings library\n *\n * Copyright (c) 2006-2015, Salvatore Sanfilippo <antirez at gmail dot c"
},
{
"path": "deps/hiredis/sdsalloc.h",
"chars": 2130,
"preview": "/* SDSLib 2.0 -- A C dynamic strings library\n *\n * Copyright (c) 2006-2015, Salvatore Sanfilippo <antirez at gmail dot c"
},
{
"path": "deps/hiredis/sdscompat.h",
"chars": 3556,
"preview": "/*\n * Copyright (c) 2020, Michael Grunder <michael dot grunder at gmail dot com>\n *\n * All rights reserved.\n *\n * Redist"
},
{
"path": "deps/hiredis/sockcompat.c",
"chars": 9889,
"preview": "/*\n * Copyright (c) 2019, Marcus Geelnard <m at bitsnbites dot eu>\n *\n * All rights reserved.\n *\n * Redistribution and u"
},
{
"path": "deps/hiredis/sockcompat.h",
"chars": 4409,
"preview": "/*\n * Copyright (c) 2019, Marcus Geelnard <m at bitsnbites dot eu>\n *\n * All rights reserved.\n *\n * Redistribution and u"
},
{
"path": "deps/hiredis/ssl.c",
"chars": 17463,
"preview": "/*\n * Copyright (c) 2009-2011, Salvatore Sanfilippo <antirez at gmail dot com>\n * Copyright (c) 2010-2011, Pieter Noordh"
},
{
"path": "deps/hiredis/test.c",
"chars": 85254,
"preview": "#include \"fmacros.h\"\n#include \"sockcompat.h\"\n#include <stdio.h>\n#include <stdlib.h>\n#include <string.h>\n#ifndef _WIN32\n#"
},
{
"path": "deps/hiredis/test.sh",
"chars": 2985,
"preview": "#!/bin/sh -ue\n\nREDIS_SERVER=${REDIS_SERVER:-redis-server}\nREDIS_PORT=${REDIS_PORT:-56379}\nREDIS_SSL_PORT=${REDIS_SSL_POR"
},
{
"path": "deps/hiredis/win32.h",
"chars": 1042,
"preview": "#ifndef _WIN32_HELPER_INCLUDE\n#define _WIN32_HELPER_INCLUDE\n#ifdef _MSC_VER\n\n#include <winsock2.h> /* for struct timeval"
},
{
"path": "deps/jemalloc/.appveyor.yml",
"chars": 936,
"preview": "version: '{build}'\n\nenvironment:\n matrix:\n - MSYSTEM: MINGW64\n CPU: x86_64\n MSVC: amd64\n CONFIG_FLAGS: --enab"
},
{
"path": "deps/jemalloc/.autom4te.cfg",
"chars": 107,
"preview": "begin-language: \"Autoconf-without-aclocal-m4\"\nargs: --no-cache\nend-language: \"Autoconf-without-aclocal-m4\"\n"
},
{
"path": "deps/jemalloc/.cirrus.yml",
"chars": 1213,
"preview": "env:\n CIRRUS_CLONE_DEPTH: 1\n ARCH: amd64\n\ntask:\n matrix:\n env:\n DEBUG_CONFIG: --enable-debug\n env:\n "
},
{
"path": "deps/jemalloc/.clang-format",
"chars": 3592,
"preview": "# jemalloc targets clang-format version 8. We include every option it supports\n# here, but comment out the ones that ar"
},
{
"path": "deps/jemalloc/.gitattributes",
"chars": 19,
"preview": "* text=auto eol=lf\n"
},
{
"path": "deps/jemalloc/.gitignore",
"chars": 2027,
"preview": "/bin/jemalloc-config\n/bin/jemalloc.sh\n/bin/jeprof\n\n/config.stamp\n/config.log\n/config.status\n/configure\n\n/doc/html.xsl\n/d"
},
{
"path": "deps/jemalloc/.travis.yml",
"chars": 21404,
"preview": "# This config file is generated by ./scripts/gen_travis.py.\n# Do not edit by hand.\n\n# We use 'minimal', because 'generic"
},
{
"path": "deps/jemalloc/COPYING",
"chars": 1709,
"preview": "Unless otherwise specified, files in the jemalloc source distribution are\nsubject to the following license:\n------------"
},
{
"path": "deps/jemalloc/ChangeLog",
"chars": 79459,
"preview": "Following are change highlights associated with official releases. Important\nbug fixes are all mentioned, but some inte"
},
{
"path": "deps/jemalloc/INSTALL.md",
"chars": 14797,
"preview": "Building and installing a packaged release of jemalloc can be as simple as\ntyping the following while in the root direct"
},
{
"path": "deps/jemalloc/Makefile.in",
"chars": 27342,
"preview": "# Clear out all vpaths, then set just one (default vpath) for the main build\n# directory.\nvpath\nvpath % .\n\n# Clear the d"
},
{
"path": "deps/jemalloc/README",
"chars": 1047,
"preview": "jemalloc is a general purpose malloc(3) implementation that emphasizes\nfragmentation avoidance and scalable concurrency "
},
{
"path": "deps/jemalloc/TUNING.md",
"chars": 5935,
"preview": "This document summarizes the common approaches for performance fine tuning with\njemalloc (as of 5.3.0). The default con"
},
{
"path": "deps/jemalloc/VERSION",
"chars": 11,
"preview": "5.3.0-0-g0\n"
},
{
"path": "deps/jemalloc/autogen.sh",
"chars": 266,
"preview": "#!/bin/sh\n\nfor i in autoconf; do\n echo \"$i\"\n $i\n if [ $? -ne 0 ]; then\n\techo \"Error $? in $i\"\n\texit 1\n fi\ndo"
},
{
"path": "deps/jemalloc/bin/jemalloc-config.in",
"chars": 1598,
"preview": "#!/bin/sh\n\nusage() {\n\tcat <<EOF\nUsage:\n @BINDIR@/jemalloc-config <option>\nOptions:\n --help | -h : Print usage.\n --ve"
},
{
"path": "deps/jemalloc/bin/jemalloc.sh.in",
"chars": 151,
"preview": "#!/bin/sh\n\nprefix=@prefix@\nexec_prefix=@exec_prefix@\nlibdir=@libdir@\n\n@LD_PRELOAD_VAR@=${libdir}/libjemalloc.@SOREV@\nexp"
},
{
"path": "deps/jemalloc/bin/jeprof.in",
"chars": 182667,
"preview": "#! /usr/bin/env perl\n\n# Copyright (c) 1998-2007, Google Inc.\n# All rights reserved.\n#\n# Redistribution and use in source"
},
{
"path": "deps/jemalloc/build-aux/config.guess",
"chars": 49448,
"preview": "#! /bin/sh\n# Attempt to guess a canonical system name.\n# Copyright 1992-2021 Free Software Foundation, Inc.\n\ntimestamp"
},
{
"path": "deps/jemalloc/build-aux/config.sub",
"chars": 34267,
"preview": "#! /bin/sh\n# Configuration validation subroutine script.\n# Copyright 1992-2021 Free Software Foundation, Inc.\n\ntimesta"
},
{
"path": "deps/jemalloc/build-aux/install-sh",
"chars": 5585,
"preview": "#! /bin/sh\n#\n# install - install a program, script, or datafile\n# This comes from X11R5 (mit/util/scripts/install.sh).\n#"
},
{
"path": "deps/jemalloc/config.stamp.in",
"chars": 0,
"preview": ""
},
{
"path": "deps/jemalloc/configure",
"chars": 440426,
"preview": "#! /bin/sh\n# Guess values for system-dependent variables and create Makefiles.\n# Generated by GNU Autoconf 2.71.\n#\n#\n# C"
},
{
"path": "deps/jemalloc/configure.ac",
"chars": 83743,
"preview": "dnl Process this file with autoconf to produce a configure script.\nAC_PREREQ(2.68)\nAC_INIT([Makefile.in])\n\nAC_CONFIG_AUX"
},
{
"path": "deps/jemalloc/doc/html.xsl.in",
"chars": 249,
"preview": "<xsl:stylesheet xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\" version=\"1.0\">\n <xsl:import href=\"@XSLROOT@/html/docbo"
},
{
"path": "deps/jemalloc/doc/jemalloc.xml.in",
"chars": 172776,
"preview": "<?xml version='1.0' encoding='UTF-8'?>\n<?xml-stylesheet type=\"text/xsl\"\n href=\"http://docbook.sourceforge.net/rel"
},
{
"path": "deps/jemalloc/doc/manpages.xsl.in",
"chars": 207,
"preview": "<xsl:stylesheet xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\" version=\"1.0\">\n <xsl:import href=\"@XSLROOT@/manpages/d"
},
{
"path": "deps/jemalloc/doc/stylesheet.xsl",
"chars": 415,
"preview": "<xsl:stylesheet xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\" version=\"1.0\">\n <xsl:param name=\"funcsynopsis.style\">a"
},
{
"path": "deps/jemalloc/doc_internal/PROFILING_INTERNALS.md",
"chars": 12740,
"preview": "# jemalloc profiling\nThis describes the mathematical basis behind jemalloc's profiling implementation, as well as the im"
},
{
"path": "deps/jemalloc/include/jemalloc/internal/activity_callback.h",
"chars": 815,
"preview": "#ifndef JEMALLOC_INTERNAL_ACTIVITY_CALLBACK_H\n#define JEMALLOC_INTERNAL_ACTIVITY_CALLBACK_H\n\n/*\n * The callback to be ex"
},
{
"path": "deps/jemalloc/include/jemalloc/internal/arena_externs.h",
"chars": 5491,
"preview": "#ifndef JEMALLOC_INTERNAL_ARENA_EXTERNS_H\n#define JEMALLOC_INTERNAL_ARENA_EXTERNS_H\n\n#include \"jemalloc/internal/bin.h\"\n"
},
{
"path": "deps/jemalloc/include/jemalloc/internal/arena_inlines_a.h",
"chars": 627,
"preview": "#ifndef JEMALLOC_INTERNAL_ARENA_INLINES_A_H\n#define JEMALLOC_INTERNAL_ARENA_INLINES_A_H\n\nstatic inline unsigned\narena_in"
},
{
"path": "deps/jemalloc/include/jemalloc/internal/arena_inlines_b.h",
"chars": 16344,
"preview": "#ifndef JEMALLOC_INTERNAL_ARENA_INLINES_B_H\n#define JEMALLOC_INTERNAL_ARENA_INLINES_B_H\n\n#include \"jemalloc/internal/div"
},
{
"path": "deps/jemalloc/include/jemalloc/internal/arena_stats.h",
"chars": 3570,
"preview": "#ifndef JEMALLOC_INTERNAL_ARENA_STATS_H\n#define JEMALLOC_INTERNAL_ARENA_STATS_H\n\n#include \"jemalloc/internal/atomic.h\"\n#"
},
{
"path": "deps/jemalloc/include/jemalloc/internal/arena_structs.h",
"chars": 2987,
"preview": "#ifndef JEMALLOC_INTERNAL_ARENA_STRUCTS_H\n#define JEMALLOC_INTERNAL_ARENA_STRUCTS_H\n\n#include \"jemalloc/internal/arena_s"
},
{
"path": "deps/jemalloc/include/jemalloc/internal/arena_types.h",
"chars": 1738,
"preview": "#ifndef JEMALLOC_INTERNAL_ARENA_TYPES_H\n#define JEMALLOC_INTERNAL_ARENA_TYPES_H\n\n#include \"jemalloc/internal/sc.h\"\n\n/* D"
},
{
"path": "deps/jemalloc/include/jemalloc/internal/assert.h",
"chars": 1330,
"preview": "#include \"jemalloc/internal/malloc_io.h\"\n#include \"jemalloc/internal/util.h\"\n\n/*\n * Define a custom assert() in order to"
},
{
"path": "deps/jemalloc/include/jemalloc/internal/atomic.h",
"chars": 3584,
"preview": "#ifndef JEMALLOC_INTERNAL_ATOMIC_H\n#define JEMALLOC_INTERNAL_ATOMIC_H\n\n#define ATOMIC_INLINE JEMALLOC_ALWAYS_INLINE\n\n#de"
},
{
"path": "deps/jemalloc/include/jemalloc/internal/atomic_c11.h",
"chars": 3546,
"preview": "#ifndef JEMALLOC_INTERNAL_ATOMIC_C11_H\n#define JEMALLOC_INTERNAL_ATOMIC_C11_H\n\n#include <stdatomic.h>\n\n#define ATOMIC_IN"
},
{
"path": "deps/jemalloc/include/jemalloc/internal/atomic_gcc_atomic.h",
"chars": 4153,
"preview": "#ifndef JEMALLOC_INTERNAL_ATOMIC_GCC_ATOMIC_H\n#define JEMALLOC_INTERNAL_ATOMIC_GCC_ATOMIC_H\n\n#include \"jemalloc/internal"
},
{
"path": "deps/jemalloc/include/jemalloc/internal/atomic_gcc_sync.h",
"chars": 6363,
"preview": "#ifndef JEMALLOC_INTERNAL_ATOMIC_GCC_SYNC_H\n#define JEMALLOC_INTERNAL_ATOMIC_GCC_SYNC_H\n\n#define ATOMIC_INIT(...) {__VA_"
},
{
"path": "deps/jemalloc/include/jemalloc/internal/atomic_msvc.h",
"chars": 5540,
"preview": "#ifndef JEMALLOC_INTERNAL_ATOMIC_MSVC_H\n#define JEMALLOC_INTERNAL_ATOMIC_MSVC_H\n\n#define ATOMIC_INIT(...) {__VA_ARGS__}\n"
},
{
"path": "deps/jemalloc/include/jemalloc/internal/background_thread_externs.h",
"chars": 1393,
"preview": "#ifndef JEMALLOC_INTERNAL_BACKGROUND_THREAD_EXTERNS_H\n#define JEMALLOC_INTERNAL_BACKGROUND_THREAD_EXTERNS_H\n\nextern bool"
},
{
"path": "deps/jemalloc/include/jemalloc/internal/background_thread_inlines.h",
"chars": 1716,
"preview": "#ifndef JEMALLOC_INTERNAL_BACKGROUND_THREAD_INLINES_H\n#define JEMALLOC_INTERNAL_BACKGROUND_THREAD_INLINES_H\n\nJEMALLOC_AL"
},
{
"path": "deps/jemalloc/include/jemalloc/internal/background_thread_structs.h",
"chars": 2239,
"preview": "#ifndef JEMALLOC_INTERNAL_BACKGROUND_THREAD_STRUCTS_H\n#define JEMALLOC_INTERNAL_BACKGROUND_THREAD_STRUCTS_H\n\n/* This fil"
},
{
"path": "deps/jemalloc/include/jemalloc/internal/base.h",
"chars": 3305,
"preview": "#ifndef JEMALLOC_INTERNAL_BASE_H\n#define JEMALLOC_INTERNAL_BASE_H\n\n#include \"jemalloc/internal/edata.h\"\n#include \"jemall"
},
{
"path": "deps/jemalloc/include/jemalloc/internal/bin.h",
"chars": 2535,
"preview": "#ifndef JEMALLOC_INTERNAL_BIN_H\n#define JEMALLOC_INTERNAL_BIN_H\n\n#include \"jemalloc/internal/bin_stats.h\"\n#include \"jema"
},
{
"path": "deps/jemalloc/include/jemalloc/internal/bin_info.h",
"chars": 1370,
"preview": "#ifndef JEMALLOC_INTERNAL_BIN_INFO_H\n#define JEMALLOC_INTERNAL_BIN_INFO_H\n\n#include \"jemalloc/internal/bitmap.h\"\n\n/*\n * "
},
{
"path": "deps/jemalloc/include/jemalloc/internal/bin_stats.h",
"chars": 1486,
"preview": "#ifndef JEMALLOC_INTERNAL_BIN_STATS_H\n#define JEMALLOC_INTERNAL_BIN_STATS_H\n\n#include \"jemalloc/internal/mutex_prof.h\"\n\n"
},
{
"path": "deps/jemalloc/include/jemalloc/internal/bin_types.h",
"chars": 473,
"preview": "#ifndef JEMALLOC_INTERNAL_BIN_TYPES_H\n#define JEMALLOC_INTERNAL_BIN_TYPES_H\n\n#include \"jemalloc/internal/sc.h\"\n\n#define "
},
{
"path": "deps/jemalloc/include/jemalloc/internal/bit_util.h",
"chars": 10314,
"preview": "#ifndef JEMALLOC_INTERNAL_BIT_UTIL_H\n#define JEMALLOC_INTERNAL_BIT_UTIL_H\n\n#include \"jemalloc/internal/assert.h\"\n\n/* San"
},
{
"path": "deps/jemalloc/include/jemalloc/internal/bitmap.h",
"chars": 11154,
"preview": "#ifndef JEMALLOC_INTERNAL_BITMAP_H\n#define JEMALLOC_INTERNAL_BITMAP_H\n\n#include \"jemalloc/internal/bit_util.h\"\n#include "
},
{
"path": "deps/jemalloc/include/jemalloc/internal/buf_writer.h",
"chars": 1169,
"preview": "#ifndef JEMALLOC_INTERNAL_BUF_WRITER_H\n#define JEMALLOC_INTERNAL_BUF_WRITER_H\n\n/*\n * Note: when using the buffered write"
},
{
"path": "deps/jemalloc/include/jemalloc/internal/cache_bin.h",
"chars": 22427,
"preview": "#ifndef JEMALLOC_INTERNAL_CACHE_BIN_H\n#define JEMALLOC_INTERNAL_CACHE_BIN_H\n\n#include \"jemalloc/internal/ql.h\"\n#include "
},
{
"path": "deps/jemalloc/include/jemalloc/internal/ckh.h",
"chars": 3265,
"preview": "#ifndef JEMALLOC_INTERNAL_CKH_H\n#define JEMALLOC_INTERNAL_CKH_H\n\n#include \"jemalloc/internal/tsd.h\"\n\n/* Cuckoo hashing i"
},
{
"path": "deps/jemalloc/include/jemalloc/internal/counter.h",
"chars": 1164,
"preview": "#ifndef JEMALLOC_INTERNAL_COUNTER_H\n#define JEMALLOC_INTERNAL_COUNTER_H\n\n#include \"jemalloc/internal/mutex.h\"\n\ntypedef s"
},
{
"path": "deps/jemalloc/include/jemalloc/internal/ctl.h",
"chars": 4649,
"preview": "#ifndef JEMALLOC_INTERNAL_CTL_H\n#define JEMALLOC_INTERNAL_CTL_H\n\n#include \"jemalloc/internal/jemalloc_internal_types.h\"\n"
},
{
"path": "deps/jemalloc/include/jemalloc/internal/decay.h",
"chars": 6255,
"preview": "#ifndef JEMALLOC_INTERNAL_DECAY_H\n#define JEMALLOC_INTERNAL_DECAY_H\n\n#include \"jemalloc/internal/smoothstep.h\"\n\n#define "
},
{
"path": "deps/jemalloc/include/jemalloc/internal/div.h",
"chars": 1172,
"preview": "#ifndef JEMALLOC_INTERNAL_DIV_H\n#define JEMALLOC_INTERNAL_DIV_H\n\n#include \"jemalloc/internal/assert.h\"\n\n/*\n * This modul"
},
{
"path": "deps/jemalloc/include/jemalloc/internal/ecache.h",
"chars": 1610,
"preview": "#ifndef JEMALLOC_INTERNAL_ECACHE_H\n#define JEMALLOC_INTERNAL_ECACHE_H\n\n#include \"jemalloc/internal/eset.h\"\n#include \"jem"
},
{
"path": "deps/jemalloc/include/jemalloc/internal/edata.h",
"chars": 20927,
"preview": "#ifndef JEMALLOC_INTERNAL_EDATA_H\n#define JEMALLOC_INTERNAL_EDATA_H\n\n#include \"jemalloc/internal/atomic.h\"\n#include \"jem"
},
{
"path": "deps/jemalloc/include/jemalloc/internal/edata_cache.h",
"chars": 1610,
"preview": "#ifndef JEMALLOC_INTERNAL_EDATA_CACHE_H\n#define JEMALLOC_INTERNAL_EDATA_CACHE_H\n\n#include \"jemalloc/internal/base.h\"\n\n/*"
},
{
"path": "deps/jemalloc/include/jemalloc/internal/ehooks.h",
"chars": 13874,
"preview": "#ifndef JEMALLOC_INTERNAL_EHOOKS_H\n#define JEMALLOC_INTERNAL_EHOOKS_H\n\n#include \"jemalloc/internal/atomic.h\"\n#include \"j"
},
{
"path": "deps/jemalloc/include/jemalloc/internal/emap.h",
"chars": 13313,
"preview": "#ifndef JEMALLOC_INTERNAL_EMAP_H\n#define JEMALLOC_INTERNAL_EMAP_H\n\n#include \"jemalloc/internal/base.h\"\n#include \"jemallo"
},
{
"path": "deps/jemalloc/include/jemalloc/internal/emitter.h",
"chars": 13967,
"preview": "#ifndef JEMALLOC_INTERNAL_EMITTER_H\n#define JEMALLOC_INTERNAL_EMITTER_H\n\n#include \"jemalloc/internal/ql.h\"\n\ntypedef enum"
},
{
"path": "deps/jemalloc/include/jemalloc/internal/eset.h",
"chars": 2353,
"preview": "#ifndef JEMALLOC_INTERNAL_ESET_H\n#define JEMALLOC_INTERNAL_ESET_H\n\n#include \"jemalloc/internal/atomic.h\"\n#include \"jemal"
},
{
"path": "deps/jemalloc/include/jemalloc/internal/exp_grow.h",
"chars": 1421,
"preview": "#ifndef JEMALLOC_INTERNAL_EXP_GROW_H\n#define JEMALLOC_INTERNAL_EXP_GROW_H\n\ntypedef struct exp_grow_s exp_grow_t;\nstruct "
},
{
"path": "deps/jemalloc/include/jemalloc/internal/extent.h",
"chars": 4770,
"preview": "#ifndef JEMALLOC_INTERNAL_EXTENT_H\n#define JEMALLOC_INTERNAL_EXTENT_H\n\n#include \"jemalloc/internal/ecache.h\"\n#include \"j"
},
{
"path": "deps/jemalloc/include/jemalloc/internal/extent_dss.h",
"chars": 728,
"preview": "#ifndef JEMALLOC_INTERNAL_EXTENT_DSS_H\n#define JEMALLOC_INTERNAL_EXTENT_DSS_H\n\ntypedef enum {\n\tdss_prec_disabled = 0,\n\t"
},
{
"path": "deps/jemalloc/include/jemalloc/internal/extent_mmap.h",
"chars": 328,
"preview": "#ifndef JEMALLOC_INTERNAL_EXTENT_MMAP_EXTERNS_H\n#define JEMALLOC_INTERNAL_EXTENT_MMAP_EXTERNS_H\n\nextern bool opt_retain;"
},
{
"path": "deps/jemalloc/include/jemalloc/internal/fb.h",
"chars": 11286,
"preview": "#ifndef JEMALLOC_INTERNAL_FB_H\n#define JEMALLOC_INTERNAL_FB_H\n\n/*\n * The flat bitmap module. This has a larger API rela"
},
{
"path": "deps/jemalloc/include/jemalloc/internal/fxp.h",
"chars": 4013,
"preview": "#ifndef JEMALLOC_INTERNAL_FXP_H\n#define JEMALLOC_INTERNAL_FXP_H\n\n/*\n * A simple fixed-point math implementation, support"
},
{
"path": "deps/jemalloc/include/jemalloc/internal/hash.h",
"chars": 8123,
"preview": "#ifndef JEMALLOC_INTERNAL_HASH_H\n#define JEMALLOC_INTERNAL_HASH_H\n\n#include \"jemalloc/internal/assert.h\"\n\n/*\n * The foll"
},
{
"path": "deps/jemalloc/include/jemalloc/internal/hook.h",
"chars": 5543,
"preview": "#ifndef JEMALLOC_INTERNAL_HOOK_H\n#define JEMALLOC_INTERNAL_HOOK_H\n\n#include \"jemalloc/internal/tsd.h\"\n\n/*\n * This API is"
},
{
"path": "deps/jemalloc/include/jemalloc/internal/hpa.h",
"chars": 5018,
"preview": "#ifndef JEMALLOC_INTERNAL_HPA_H\n#define JEMALLOC_INTERNAL_HPA_H\n\n#include \"jemalloc/internal/exp_grow.h\"\n#include \"jemal"
},
{
"path": "deps/jemalloc/include/jemalloc/internal/hpa_hooks.h",
"chars": 513,
"preview": "#ifndef JEMALLOC_INTERNAL_HPA_HOOKS_H\n#define JEMALLOC_INTERNAL_HPA_HOOKS_H\n\ntypedef struct hpa_hooks_s hpa_hooks_t;\nstr"
}
]
// ... and 1550 more files (download for full content)
About this extraction
This page contains the full source code of the redis-io/redis GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 1750 files (18.7 MB), approximately 5.0M tokens, and a symbol index with 12077 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.