Adjust shell scripts to allow Bash in other locations
[userspace-rcu.git] / ChangeLog
... / ...
CommitLineData
12023-02-14 Userspace RCU 0.14.0
2 * Fix: urcu-bp: only teardown call-rcu worker in destructor
3 * Fix: rculfhash: urcu_die() takes positive error value
4 * Fix: call_rcu: teardown default call_rcu worker on application exit
5 * Fix: join worker thread in call_rcu_data_free
6 * Docs: clarify grace period polling API
7 * Document grace period polling in rcu-api.md
8 * Implement poll rcu stress test in rcutorture
9 * urcu-memb,mb,signal: Implement grace period polling
10 * Fix: auto-resize hash table destroy deadlock
11 * Fix building on MSYS2
12 * rculfhash: Include rculfhash-internal.h from local directory
13 * Remove "Darwin" from "should also work on list"
14 * Merge branch 'adah1972-improve-md'
15 * Add semicolons at the end of function prototypes
16 * Wrap a file name in backticks
17 * Wrap command-line options in backticks
18 * Fix a wrong format
19 * Wrap URLs in angle brackets
20 * Fix Markdown issues
21 * Fix: Always check pthread_create for failures
22 * Disable signals in URCU background threads
23 * Fix: futex.h: include headers outside extern C
24 * Fix: add missing unused attribute to _rcu_dereference
25 * Fix: change method used by _rcu_dereference to strip type constness
26 * Fix: remove type constness in URCU_FORCE_CAST's C++ version
27 * Move extern "C" down in include/urcu/urcu-bp.h
28 * fix: ifdef linux specific cpu count compat
29 * Add unit tests for possible_cpus_array_len
30 * fix: sysconf(_SC_NPROCESSORS_CONF) can be less than max cpu id
31 * Fix: revise obsolete command in README.md
32 * Fix: workqueue: remove unused variable "ret"
33 * Fix: urcu-qsbr: futex wait: handle spurious futex wakeups
34 * Fix: urcu: futex wait: handle spurious futex wakeups
35 * Fix: urcu-wait: futex wait: handle spurious futex wakeups
36 * Fix: defer_rcu: futex wait: handle spurious futex wakeups
37 * Fix: call_rcu: futex wait: handle spurious futex wakeups
38 * Fix: workqueue: futex wait: handle spurious futex wakeups
39 * Fix: Use %lu rather than %ld to print count
40 * Update ABI definition files
41 * Bump version current and age
42 * alpha: allocate membarrier system call number
43 * Bump version to 0.14.0-pre
44 * Improved test framework
45 * rculfhash: introduce cds_lfht_node_init_deleted
46 * Fix: changelog: v0.13.0 was released in 2021
47 * cleanup: i386 arch detection
48 * fix: properly detect 'cmpxchg' on x86-32
49 * fix: use urcu-tls compat with c++ compiler
50 * Fix typo
51 * fix: remove autoconf features default value in help message
52 * fix: add missing pkgconfig file for memb flavour lib
53 * Cleanup: Tests: Remove useless pre-C99 compatibility code from tap.h
54 * Document C99 and C++11 requirement in README.md
55 * Always use '__thread' for Thread local storage except on MSVC
56 * Fix: powerpc32: transparent unions alter calling convention
57 * fix: don't use C++ thread_local on MacOs
58 * wfcqueue API: implement overloaded wrappers with templates
59 * wfcqueue: combine C++ API cds_wfcq_head_cast with overloading
60 * wfstack C++ API: implement overloaded wrappers with templates
61 * lfstack C++ API: implement overloaded wrappers with templates
62 * wfstack: combine C++ API cds_wfs_stack_cast with overloading
63 * lfstack: combine C++ API cds_lfs_stack_cast with overloading
64 * fix: test_build tap plan
65 * Test C++ build of list head init
66 * Fix order of initializers in CDS_LIST_HEAD_INIT
67 * unit tests: test wfcqueue, wfstack, lfstack empty check functions in C++
68 * wfcqueue: implement C++ API based on function overloading
69 * wfstack: implement C++ API based on function overloading
70 * lfstack: implement C++ API based on function overloading
71 * Fix tap.h: remove extra semicolon in pass/fail macros
72 * Add C++ build tests
73 * Build and run regression and unit tests as C++ programs
74 * Add --enable-Werror configure switch
75 * Add `urcu_posix_assert()` as `assert()` replacement
76 * Rename `urcu_assert()` to `urcu_assert_debug()`
77 * cleanup: spelling fixes in comments
78 * Make temporary variable in _rcu_dereference non-const
79 * (tls-ie2) Fix: x86 and s390: uatomic __hp() macro C++ support
80 * Fix: x86 and s390: uatomic __hp() macro clang support
81 * Fix: x86 and s390 uatomic: __hp() macro warning with gcc 11
82
832021-06-03 Userspace RCU 0.13.0
84 * Document known ABI issue in README.md
85 * Add serialized ABI definition files
86 * bump SONAME major to 8
87 * Remove all SONAME(6) ABI aliases
88 * .gitignore: list ignored Makefiles
89 * tests: Add a simple compile test for caa_get_cycles
90 * fix: clock_gettime on macOs
91 * Fix: rculist header: use parenthesis around macro parameters
92 * Fix: rcuhlist header: use parenthesis around macro parameters
93 * Fix: hlist header: use parenthesis around macro parameters
94 * Fix: list.h: use parenthesis around macro parameters, caa_container_of()
95 * Fix: hlist iteration relies on undefined behavior
96 * Fix: use __atomic_load() rather than atomic load explicit
97 * Fix: use atomic load memory_order_consume for rcu_dereference on C11/C++11
98 * fix: we used weak symbols not weak aliases
99 * fix: include 'sys/endian.h' on FreeBSD
100 * fix: warnings on non-Linux platforms
101 * fix: HAVE_SCHED_SETAFFINITY is not defined
102 * configure: enable extended compiler warnings
103 * cleanup: explicitly mark unused parameters (-Wunused-parameter)
104 * fix: shadowed local variable (-Wshadow)
105 * cleanup: all functions have declarations (-Wmissing-prototypes)
106 * Import libtap from babeltrace
107 * cleanup: add 'noreturn' attribute to '_uatomic_link_error'
108 * fix: add missing 'S' to AC_CHECK_PROGS
109 * README.md: Document supported Glibc version
110 * README: cleanup stale MacOS information
111 * Bump version to 0.13.0-pre
112 * configure: standardise include path
113 * Remove glibc < 2.4 compat code for sched_setaffinity
114 * configure: regroup automake conditionals
115 * Introduce AE_FEATURE to manage configure features
116 * configure: regroup library checks
117 * configure: regroup and expand C header and program checks
118 * configure: regroup and expand C compiler checks
119 * configure: host specific config
120 * tests: Move tap-driver.sh out of the autotools aux directory
121 * configure: Set autotools baseline
122 * configure: centralize version information
123 * fix: exclude clang from GCC version blacklists
124 * aarch64: blacklist gcc prior to 5.1
125 * Fix: configure: support Autoconf 2.70
126 * Don't force a target and optimization level on ARMv7
127 * Use DMB only on ARMv7
128 * Blacklist GCC 4.4.0, 4.4.1 and 4.4.2 on ARM
129 * Cleanup: Move ARM specific code to urcu/arch/arm.h
130 * fix: bump tests thread limit to 4096
131 * fix: reorder x86 arch detection
132 * fix: typo in futex syscall define check
133 * Compile time futex syscall detection
134 * Static arch and uatomic headers
135 * Add git-review config
136 * cleanup: Improve wording of CONFIG_RCU_DEBUG description
137 * fix: explicitly include urcu/config.h in files using CONFIG_RCU_ defines
138 * Fix typo in README.md
139 * fix: add -lurcu-common to pkg-config libs for each flavor
140 * call_rcu: Fix race between rcu_barrier() and call_rcu_data_free()
141 * Cleanup: tls-compat.h: add parentheses around expression (coding style)
142 * Fix: tls-compat.h exposes compiler-dependent public configuration
143 * Fix: tap array subscript has type char warning
144
1452020-04-09 Userspace RCU 0.12.0
146 * tls-compat.h: introduce DEFINE_URCU_TLS_INIT
147 * Use _umtx_op for futex on FreeBSD
148 * Add FreeBSD, DragonFly to syscall-compat.h
149 * urcu-bp: perform thread registration on urcu_bp_register_thread
150 * Require automake >= 1.12
151 * cds_lfht_is_node_deleted parameter can be marked const
152 * Fix: provide errno as argument to urcu_die()
153 * Fix: rculfhash worker needs to unblock to SIGRCU
154 * Cleanup: test_perthreadlock_timing: handle pthread mutex errors
155 * Fix: SONAME bump to 6.1.0
156 * Cleanup: remove unused variable from configure.ac check
157 * Fix: urcu/futex.h: users of struct timespec should include time.h
158
1592019-05-06 Userspace RCU 0.11.0
160 * Bump library version to 6:0:1
161 * Cleanup: update code layout to fix old gcc warning
162 * Fix: typo CPPLAGS in examples Makefile
163 * Harmonize pprint macro across projects
164 * Check for TLS support after CC detection
165 * Update macros from the autotools archive
166 * tap-driver.sh: flush stdout after each test result
167 * Update dead link in lgpl-relicensing.txt
168 * Add multiflavor compat identifiers
169 * Cleanup: missing sign compare fixes
170 * Cleanup: enable signed/unsigned compare compiler warning
171 * Cleanup: compiler warning on 32-bit architectures
172 * config.h.in: rename CONFIG_RCU_MULTIFLAVOR to CONFIG_RCU_HAVE_MULTIFLAVOR
173 * rculfhash: implement iterator debugging config option
174 * Fix: examples silent rules on Solaris
175 * Add missing fall through annotations
176 * Fix: symbol aliases with TLS compat
177 * Port: no symbols aliases on MacOS
178 * Add -Wextra to CFLAGS
179 * Add silent mode to examples Makefiles
180 * doc: update examples to API changes
181 * test multiflavor single compile unit
182 * Update README following API changes
183 * Use new header locations for includes from urcu code
184 * Update call-rcu.h and defer.h comments and include guards
185 * rculfqueue.h: do not include urcu-call-rcu.h
186 * rculfhash: support use with multiple flavors per compile unit
187 * rculfhash: do not include urcu-call-rcu.h from public API
188 * Refactor liburcu to support many flavors per compile unit
189 * Fix: only wait if work queue is empty in real-time mode
190 * Fix: don't wait after completion of a work queue job batch
191 * Fix: don't wait after completion of job batch if work queue is empty
192 * Fix: workqueue: struct urcu_work vs rcu_head mixup
193 * Cleanup: workqueue: update comments referring to call-rcu
194 * Fix: mixup between URCU_WORKQUEUE_RT and URCU_CALL_RCU_RT
195 * test_rwlock: Add per-thread count to verbose output
196 * Add *.exe to gitignore for Cygwin
197 * Fix: pthread_rwlock initialization on Cygwin
198 * Fix: compat_futex_noasync on Cygwin
199 * wfcqueue: allow defining CDS_WFCQ_WAIT_SLEEP to override `poll'
200 * Update documentation for call_rcu before/after fork
201 * Add support for the RISC-V architecture
202 * Tests: Add tap-driver.sh for automake < 1.12
203 * Tests: Replace prove by autotools tap runner
204 * liburcu-bp: Use membarrier private expedited when available
205 * liburcu: Use membarrier private expedited when available
206 * rculfhash: improve error handling of mmap backend
207 * Fix: don't use overlapping mmap mappings on Cygwin
208 * Tests fix: errors in shell scripts
209 * Revert "Use initial-exec tls model"
210 * Use initial-exec tls model
211 * Fix: don't use membarrier SHARED syscall command in liburcu-bp
212 * Tests fix: add missing Cygwin thread id
213 * Fix: assignment from incompatible pointer type warnings
214 * Tests fix: unused variable warnings
215 * Fix: add missing m68k headers to dist
216 * Bump version to 0.11-pre
217
2182017-06-12 Userspace RCU 0.10.0
219 * Bump library soname due to urcu flavor structure change
220 * Cleanup: use mutex_lock() wrapper in rculfhash
221 * Use workqueue in rculfhash
222 * Implement urcu workqueues internal API
223 * Add support for m68k architecture
224 * Set -Wall globally in AM_CFLAGS
225 * Fix: remove double use of PTHREAD_CFLAGS
226 * Re-add PTHREAD_CFLAGS to global CFLAGS
227 * Fix: Don't override user variables within the build system
228 * Add report at the end of configure
229 * uatomic-api docs: use the third-person singular
230 * Add --enable-rcu-debug to configure
231 * ARM32: use dmb ish (inner shareable domain) for smp barriers
232 * Cleanup: remove cmm_wmb() from rcu_xchg_pointer and rcu_cmpxchg_pointer
233 * Fix: uatomic arm32: add missing release barrier before uatomic_xchg
234 * Tests: Add verbose support to test script
235 * Fix: add missing CONFIG_RCU_FORCE_SYS_MEMBARRIER to urcu/config.h.in
236 * Allow forcing the use of sys membarrier
237 * Fix: rcutorture: work-around signal issue on mac os x
238 * Fix: rcutorture should register thread using call_rcu
239 * Fix: add missing backslash in Makefile.am
240 * Fix: Do not use wildcards in include/Makefile.am
241 * Bump version to 0.10-pre
242 * Fix: check for rand_r() in compat-rand.h
243 * Fix: Move rand-compat to private src dir
244 * Fix: remove AC_FUNC_MALLOC from configure.ac
245 * Cleanup: Re-organise source dir
246 * Cleanup: remove leftover manual pthread detection
247 * Fix: update ax_pthread macro to handle newer clang
248 * Update library current version due to adding destroy API
249 * Fix: Use pthread_self to get threadid on OSX
250 * Fix: examples: use destroy API for queues/stacks
251 * Update library age due to new stack/queue destroy API
252 * Fix: tests: invoke destroy APIs for queues/stacks
253 * Fix: add missing destroy functions to queues/stack APIs
254 * Fix: add missing __cds_wfcq_init for LGPL API
255 * Fix: memory leak on hash table destroy
256 * Fix: Add failover for platforms without nproc
257 * Fix: use clock_get_time for caa_get_cycles fallback on MacOSX
258 * Fix: syscall-compat.h MacOSX support
259 * Fix: Add solaris-build.md to dist
260 * rculfhash: Documentation: clarify need for grace period before "re-using"
261 * Port: build shared libraries in Cygwin
262 * Port: fix compatibility header for Cygwin
263 * Add GNU Hurd support to syscall-compat.h
264 * Add support for aarch64_be
265 * Fix: urcu-bp: re-initialize list head on library exit
266 * bootstrap: Standardize on autoreconf -vi
267 * Harmonize bootstrap script across projects
268 * Fix: examples make distcheck failure
269 * wfcqueue: add C++ compatibility API
270 * Fix: CDS_WFCQ_WOULDBLOCK typing for c++
271 * Fix: configure.ac: check for possibly required libs for clock_gettime
272 * Support for NIOS2 architecture
273 * urcu_ref_get_safe: introduce new API
274 * Fix: handle reference count overflow
275 * Fix: compat_futex should work-around futex signal-restart kernel bug
276 * Support for Xeon-Phi with newer MPSS
277 * sparc64: allocate membarrier system call number
278 * hppa: allocate membarrier system call number
279 * Fix build on non-Linux Debian ports
280 * Fix: urcu-signal: smp_mb_master() needs registry lock
281 * Fix: rculfhash only needs to include urcu-pointers.h
282 * Fix: out-of-tree benchmark/regtest
283 * Fix: add missing regtest and benchmark files to dist tarball
284 * Fix: add missing run.sh to benchmark makefile
285
2862015-10-16 Userspace RCU 0.9.0
287 * Bump soname major to 4
288 * Cleanup: remove trailing tab
289 * Fix: Use proper macro to detect stdbool.h
290 * Configure: Add missing checks
291 * Port: Add Solaris build instructions
292 * Fix: regtest outputs valid TAP protocol
293 * Port: Detect nproc bin name in benchmark scripts
294 * Port: Add Solaris getcpu support
295 * Port: Fixes to build system for portability
296 * Port: Add Solaris support to tests/common/thread-id.h
297 * Port: Add Solaris support to urcu/syscall-compat.h
298 * Port: replace bzero() by memset()
299 * Port: make bootstrap script work on most shell
300 * tests: rcutorture: use parameters rather than random
301 * Fix: only define membarrier system call on Linux
302 * Refactor tests
303 * Fix: cast caa_cycles_t to unsigned long long
304 * caa_get_cycles: caa_ prefix for type, use CLOCK_MONOTONIC
305 * Cleanup: remove trailing whitespaces at EOL
306 * Cleanup: move generic caa_get_cycles to arch/generic.h
307 * tile: allocate membarrier system call number
308 * ia64: allocate membarrier system call number
309 * aarch64: allocate membarrier system call number
310 * powerpc64le: use "ppc" architecture
311 * arm: allocate membarrier system call number
312 * s390: allocate membarrier system call number
313 * ppc: allocate membarrier system call number
314 * lfstack: relax constraints on node re-use
315 * Fix: format string signedness
316 * Cleanup: tests: Branch condition evaluates to a garbage value
317 * Fix: test: unchecked return value
318 * Fix: test: side-effect in assertion
319 * x86: allocate membarrier system call number
320 * urcu-bp: use sys_membarrier when available
321 * Cleanup: urcu: remove unused membarrier "group" parameter
322 * urcu/ref.h: implement urcu_ref_get_unless_zero()
323 * Fix: compat_futex: uninitialized ret variable
324 * Fix: compat_futex_noasync: don't override return value
325 * Fix: dynamic fallback to compat futex on sys_futex ENOSYS
326 * Detect RCU read-side overflows
327 * Detect RCU read-side underflows
328 * Introduce urcu_assert and registration check
329 * Fix: volatile in assert()
330 * Update following changes to sys_membarrier ABI
331 * uatomic: Specify complete types for atomic function calls
332 * Cleanup: remove unused return value warning from tests
333 * Fix: handle sys_futex() FUTEX_WAIT interrupted by signal
334 * Fix: compat_futex.c: *uaddr should be read as volatile
335 * Cleanup: cast poll delay return value to void
336 * tests: Convert unit tests to TAP
337 * Fix: make benchmark test run in oot build
338 * Fix: call_rcu_thread() affinity failure
339 * Cleanup: cast poll delay return value to void
340 * Cleanup: cast poll delay return value to void
341 * Cleanup: cast poll delay return value to void
342 * Cleanup: cast poll delay return value to void
343 * Cleanup: cast poll() return value to void for delays
344 * urcu: fix deprecation warning with new glibc
345 * urcu: add cds_list_for_each_entry_safe_from macro
346 * Fix: deadlock when thread join is issued in read-side C.S.
347 * Fix: rename RCU_DEBUG to DEBUG_RCU in urcu-qsbr.h
348 * Cleanup some c99 pedantic warnings
349 * Mark braced-groups within expressions with __extension__
350 * Fix: compat_futex_noasync race condition
351 * tests: Use stderr redirection for time output
352 * Fix: use space after rpath for OS X ld
353 * Fix: move transparent union attribute after union declaration for clang
354 * Configure: add check for used type
355 * Configure: add missing check of headers
356 * Configure: add missing check for funcs: memset, strerror
357 * Fix: documentation: urcu-pointer.h: s/rcu_dereference_pointer/rcu_dereference/
358 * urcu-bp/urcu-qsbr: remove unneeded DEBUG_YIELD code
359 * Fix: call rcu should call internal RCU API
360 * Fix: silence gcc -Wextra warning
361 * compiler: use __GNUC__ instead of the undefined __GNUC_MAJOR__
362 * Fix: lfstack reversed empty/non-empty return value
363 * lfstack: fix: add missing __cds_lfs_init
364 * wfstack: add missing union parameters
365 * Fix: preserve example files' timestamps when copying
366 * wfstack: implement mutex-free wfstack with transparent union
367 * wfcqueue: Implement mutex-free wfcqueue head with transparent union
368 * lfstack: Implement mutex-free stack head with transparent union (v2)
369 * rculfhash: remove duplicated code
370 * rculfhash: handle pthread_create failures
371 * rculfhash: fall back to single-threaded resize on calloc failure
372 * x86: drop extra semi-colon in caa_cpu_relax
373 * Cleanup: tests: cast console write return value as void
374 * Modernize doc using Markdown
375 * Fix: update automake following README to README.md change
376 * Modernize README using Markdown
377 * Fix: incorrect parenthesis in cds_hlist_for_each_entry_safe_2
378 * Fix: Use after free in rcu_barrier()
379 * Fix: rcu_barrier(): uninitialized futex field
380 * call_rcu threads should clear their PAUSED flag when they unpause
381 * test_urcu_fork: test many fork, with 3 children deep
382 * Update list of supported architectures in README
383 * Add support for hppa/PA-RISC architecture
384 * Use autoconf AM_MAINTAINER_MODE
385 * Use gcc atomics on aarch64/powerpc64le
386 * Fix: move wait loop increment before first conditional block
387 * Fix: high cpu usage in synchronize_rcu with long RCU read-side C.S.
388 * Fix: out of tree build: doc/examples
389 * Fix: out of tree build tests/common
390 * tests/unit: use lib rather than source
391 * automake: Rename INCLUDES to AM_CPPFLAGS (new name)
392 * tests regressions: use lib rather than recompile from source
393 * tests: use common lib rather than recompile compat sources
394 * urcu tests: use lib rather than compile from source
395 * urcu mb tests: use lib rather than recompile from source
396 * urcu signal tests: use library rather than recompile source
397 * tests: move yield debug to common test library
398 * tests urcu bp: use lib rather than recompile source
399 * test_urcu_defer: link on urcu lib rather than recompile source
400 * tests/benchmark: use urcu qsbr lib rather than recompile from source
401 * Pass the CC variable to the example Makefiles
402 * Fix: urcu-bp interaction with threads vs constructors/destructors
403 * x86 barrier for Xeon Phi: use rsp on x86-64
404 * Set RCU_HAVE_FENCE to false on Intel Xeon Phi
405 * Fix undefined NULL pointer arithmetic in hlist
406 * Cleanup: Check for pthread in Libc
407 * Cleanup: Android: Do not redefine gettid
408 * Fix undefined NULL pointer arithmetic
409 * Android: implement rand_r()
410 * Android: do not redefine gettid on Android
411 * Android: add a compat layer for 'syscall.h'
412 * Android: do not link pthread on Android
413 * Android: configure.ac Android check
414 * Blacklist ARM gcc 4.8.0, 4.8.1, 4.8.2
415 * rculfhash: document max_nr_buckets = 0
416 * Library major version number (soname) increment to 3
417 * Fix: tls-compat multi-lib conflict
418 * Use cross compiler for doc examples
419 * Add lttng-dev mailing list to readme
420 * wfcqueue: remove misleading comment
421 * gcc warning fixes: -Wsign-compare and -Wextra
422 * Fix: urcu-qsbr: reversed logic on RCU_DEBUG
423 * Fix: urcu-bp segfault in glibc pthread_kill()
424 * Fix urcu-bp: don't move registry
425 * Fix: compat futex duplicated lock and completion
426 * Fix: i386 compat code duplicated mutex instances
427 * Fix: urcu-bp: Bulletproof RCU arena resize bug
428 * Fix: test_mutex.c uninitialized mutex
429
4302013-09-06 Userspace RCU 0.8.0
431 * Fix: hash table growth (for small tables) should be limited
432 * Fix: doc/examples cross-build
433 * Introduce URCU_INLINE_SMALL_FUNCTIONS
434 * Add missing tests/common/Makefile.am
435 * README: document make check/regtest/bench
436 * tests: split in check, regtest and bench targets
437 * Cleanup: doc/examples makefile
438 * Fix: doc/examples VPATH build
439 * doc/examples: Move the LIBS after the OBJECTS in the Makefile
440 * Document build work-around on MacOS X
441 * Fix tests: use of uninitialized variables
442 * test_urcu_hash*: initialize TLS seeds
443 * doc/examples: cds_lfht_for_each_entry_duplicate
444 * doc/examples: cds_lfht_lookup
445 * doc/examples: cds_lfht_destroy
446 * doc/examples: cds_lfht_add_replace
447 * doc/examples: cds_lfht_add_unique
448 * doc/examples: cds_lfht_add/cds_lfht_del
449 * doc/examples: add rculfqueue example
450 * doc/examples: add synchronize_rcu()
451 * doc/examples: add bp flavor
452 * doc/examples: add dist toplevel makefile
453 * doc/examples: add membarrier flavor
454 * doc/examples: document call_rcu()
455 * doc/examples: update qsbr example
456 * urcu signal: remove assertion on exit
457 * doc/examples: signal flavor
458 * doc/examples: add mb flavor
459 * doc/examples: update qsbr
460 * doc/examples: introduce urcu-flavors examples directory
461 * doc/examples: enhance rcu-flavor-qsbr example
462 * doc/examples: rename qsbr-minimal to rcu-flavor-qsbr
463 * doc/examples: automake stop on error
464 * doc/examples: hlist
465 * hlist/rcuhlist update
466 * doc/examples: fix typo in list example
467 * rcuhlist: make pointer stores atomic
468 * hlist, rcuhlist: cleanup coding style
469 * doc/examples: lfstack
470 * doc/examples: update cds_wfs_pop_all_blocking
471 * doc/examples: cds_wfs_pop_all_blocking
472 * doc/examples: cds_wfs_pop
473 * doc/examples: add missing Makefile
474 * doc/examples: cds_wfs_push
475 * doc/wfcqueue: cds_wfcq_splice
476 * doc/examples: add cds_wfcq_dequeue
477 * doc/examples: wfcq needs to link against urcu-common
478 * doc/examples: update queue comment
479 * doc/examples: fix make clean
480 * gitignore: add qsbr-minimal
481 * doc/examples: cds_wfcq_enqueue
482 * doc/examples: Move LIBS to each makefile
483 * doc/examples: cds_list_for_each_rcu
484 * doc/examples: cds_list_for_each_entry_rcu
485 * doc/examples: cds_list_replace_rcu
486 * doc/examples: cds_list_add_tail_rcu
487 * doc/examples: cds_list_del_rcu
488 * doc/examples: cds_list_add_rcu
489 * rculist: ensure atomic updates of next pointers
490 * rculist: implement cds_list_add_tail_rcu
491 * rculist.h and list.h style cleanup
492 * example makefile: add missing cd ..
493 * Update gitignore
494 * Fix: examples Makefile on FreeBSD
495 * hash table test: don't redefine CACHE_LINE_SIZE
496 * tests: use thread-id.h wrapper
497 * Implement thread-id.h wrapper
498 * tests: add missing unsigned long casts to pthread_self()
499 * Fix: don't build examples in static builds
500 * Add QSBR minimal example
501 * compiler.h: implement CAA_ARRAY_SIZE()
502 * document rcu barrier
503 * rcu barrier: handle OOM die urcu_die
504 * Implement rcu_barrier()
505 * rculfhash: document destroy context limitations
506 * Add MIPS to README
507 * Update README
508 * Update README testing info about FreeBSD
509 * test: fix api.h missing if brackets
510 * tests: fix incorrect counter
511 * Fix: membarrier fallback symbol conflict
512 * Fix: Use a filled signal mask to disable all signals
513 * urcu-bp: introduce struct urcu_gp
514 * Fix: struct urcu_gp broke multiflavor
515 * Cleanup test usage printout
516 * wfstack tests: use pop "last" state info
517 * wfstack: return whether pop is popping the last element
518 * wfcqueue tests: use dequeue empty state
519 * wfcqueue: return whether dequeue is dequeuing last element
520 * urcu: avoid false sharing for rcu_gp_ctr
521 * urcu: make the code of urcu-qsbr as normal urcu
522 * rculfhash: detect if resize/destroy are called within RCU read-side C.S.
523 * Documentation: rculfhash: cds_lfht_resize not within read-side C.S.
524 * fix: rculfhash don't change qsbr online state
525 * Add rcu_read_ongoing() API to each urcu flavor
526 * Add "sparc" host cpu to configure.ac
527 * futex: include syscall.h instead of sys/syscall.h
528 * Add tab to output in order to allow easy nesting of tables.
529 * Remove urcu-api-list.sh from dist tarball
530 * Add urcu-api-list.sh script
531 * list: implement cds_list_for_each_safe()
532 * Fix: tests/api.h use cpuset.h
533 * Fix hurd-i386: move cpuset tests outside of sched_setaffinity conditional
534 * Fix tests: finer-grained use of CPU_SET, CPU_ZERO and cpu_set_t
535 * Test for CPU_SET
536 * Fix build on architectures with HAVE_SCHED_GETCPU but without HAVE_SYSCONF
537 * README: document that Clang 3.0 (based on LLVM 3.0) is supported
538 * clang: silence "unused expression result" warning
539 * rculfhash: add assertions on node alignment
540 * Spelling cleanups within comments and documentation
541 * Fix configure checks for Tile
542 * uatomic: style fix
543 * doc/cds-api.txt: expand documentation
544 * README: document each API file
545 * README: reorganize
546 * Add compilation support for the TileGX architecture
547 * wfstack: add nonblocking to _LGPL_SOURCE API
548 * Discourage use of pthread_atfork() for call_rcu handlers
549 * Fix call_rcu fork handling
550 * test: fork handling
551 * rculfhash: add cds_lfht_replace to the write operations in the comments
552 * urcu: fix comments for cds_list_for_each_prev()
553 * documentation: fix rcu-api.txt duplicates
554 * test wfcq: remove unneeded urcu.h include
555 * test wfs: remove unneeded urcu.h include
556 * urcu: declare test_urcu_multiflavor functions
557 * urcu: remove the wrong comma
558 * wfstack: implement nonblocking pop and next
559 * wfcqueue: document first/next return values
560 * wfstack: update comments about cds_wfs_empty/first being wait-free
561 * wfstack API: rename cds_wfs_first_blocking to cds_wfs_first
562 * wfstack test: test if number of push to empty vs pop_all match
563 * wfstack: document first/next return values
564 * test wfstack: enforce external mutex if needed by default
565 * test wfcqueue: enforce external mutex if needed by default
566 * urcu-mb/signal/membarrier: batch concurrent synchronize_rcu()
567 * urcu-wait: move queue management code into urcu-wait.h
568 * urcu-wait: move wait code into separate file
569 * urcu-qsbr: batch concurrent synchronize_rcu()
570 * tests: use standard malloc/free for synchronize_rcu()
571 * urcu-bp: move quiescent threads to separate list
572 * urcu-mb/signal/membarrier: move quiescent threads to separate list
573 * urcu-qsbr: move offline threads to separate list
574 * urcu-bp: improve 2-phase wait scheme
575 * urcu-mb/signal/membarrier: improve 2-phase wait scheme
576 * urcu-qsbr: improve 2-phase wait scheme
577 * wfcqueue: implement mutex-free splice
578 * wfcqueue: document empty criterion
579 * urcu-call-rcu: use wait-free splice return value
580 * test wfcqueue: add tests for queue state return value
581 * wfcqueue: enqueue and splice return queue state
582 * Fix: wfcqueue nonblocking dequeue
583 * wfcqueue: Fix lock and unlock functions
584 * runtests: Make path of time binary configurable
585 * urcu-qsbr: skip Q.S. reporting if already reported
586 * Fix TLS detection: test with linker, add --disable-compiler-tls
587 * Cleanup: cast pthread_self() return value to unsigned long
588 * Fallback mechanism not working on platform where TLS is unsupported
589 * Revert "Fix: cross-build: configure.ac should use --target, not --host"
590 * Fix: cross-build: configure.ac should use --target, not --host
591 * test_urcu_wfcq: add splice and nosync tests
592 * test_urcu_wfs: cleanup
593 * test_urcu_lfs: cleanup
594 * Fix static linking: add missing static for _defer_rcu
595 * tests: report error value for make check
596 * Add multiflavor test program
597 * Fix static linking: fix symbol name namespaces
598 * Fix static linking: add missing static to thr_defer
599 * Fix static linking: add missing static
600 * deprecation: fix build with gcc < 4.5
601 * wfstack.c: update copyright notice
602 * Update wfstack copyright notice
603 * Comment fix: update associated LGPL header name
604 * Update cds-api.txt following API deprecations
605 * Deprecate wfqueue
606 * Deprecate rculfstack
607 * wfcqueue: introduce nonblocking API
608 * lfstack: test pop_all and pop
609 * lfstack: implement empty, pop_all and iterators, document API
610 * lfstack: implement test
611 * lfstack: implement lock-free stack
612 * wfstack: implement pop_all and iteration tests
613 * wfstack: implement cds_wfs_pop_all and iterators, document API
614 * rculfhash test: fix trivial memleak and return node leak and errors
615 * rculfhash: add missing extern
616 * Cleanup: fix cppcheck errors
617 * wfcqueue: remove ancient comment
618 * test_urcu_lfq: remove rcu_defer_register_thread() from test_urcu_lfq
619 * test_urcu_lfq: test for the proper pointer
620 * test_urcu_lfs: remove rcu_defer_register_thread() from test_urcu_lfs
621 * test_urcu_lfs: test for the proper pointer
622 * wfcqueue: clarify locking usage
623 * Document APIs in README
624 * Test cleanup: replace "l" parameter by "loops"
625 * Add wfcqueue header to cds.h
626 * Fix: urcu-bp, urcu, urcu-qsbr should include wfcqueue
627 * Fix: call_rcu list corruption on teardown (documentation)
628 * call_rcu: remove head field alignement, explain wfcqueue motivation
629 * wfcqueue: update credits in patch documentation
630 * wfcqueue documentation: hint at for_each iterators
631 * Fix urcu-call-rcu-impl.h: false-sharing
632 * call_rcu: use wfcqueue, eliminate false-sharing
633 * wfcqueue test
634 * wfcqueue: implement concurrency-efficient queue
635 * Ensure that read-side functions meet 10-line LGPL criterion
636 * tls-compat.h: document sigaltstack(2) limitation
637 * urcu: add notice to URCU_TLS() for it is not strictly async-signal-safe
638 * Document sigaltstack(2) limitation
639 * Documentation: update LICENSE file
640
6412012-08-27 Userspace RCU 0.7.4
642 * rculfhash API documentation: document destroy RCU read-lock constraint
643 * Fix: rculfhash should be offline while waiting for resize to complete
644 * Add missing entry to gitignore
645 * urcu: move busy-wait code and name it ___cds_wfq_node_sync_next()
646 * urcu: fix compat_futex_noasync()
647 * urcu: add hint to DEFINE_URCU_TLS() for compound types
648 * Fix: CAA_BUILD_BUG_ON should refer to CAA_BUILD_BUG_ON_ZERO
649 * Add MIPS support
650 * Compatibility: remove bash-ismsm from test scripts
651 * Fix inappropriate lib behavior: don't call exit()
652 * Fix: re-enable compatibility with autoconf < 2.64
653 * Fix c99 compatibility: use __asm__ and __volatile__ in public headers
654 * Fix c99 compatibility: use __typeof__ instead of typeof in public headers
655 * warning fix: tests urcutorture for NetBSD 5
656
6572012-06-01 Userspace RCU 0.7.3
658 * Fix tests: make dist lib dependency
659 * Update README for OS supported, tests dependency
660 * Add CodingStyle to tarball
661 * Add coding style document
662 * Test fix: test_perthreadlock uninitialized mutex
663 * tests: support FreeBSD short "time" args
664 * freebsd 8.2 fix: define MAP_ANONYMOUS for compatibility
665
6662012-05-24 Userspace RCU 0.7.2
667 * Fix library compatibility
668
6692012-05-24 Userspace RCU 0.7.1
670 * fix: uatomic_set return value compile fix for non-x86 arch.
671
6722012-05-21 Userspace RCU 0.7.0
673 * Cleanup: header comments coding style
674 * Document uatomic operations
675 * Update return value of "set" operations
676 * Fix mremap wrapper for NetBSD 5
677 * Use urcu/tls-compat.h
678 * Implement urcu/tls-compat.h
679 * Add TLS detection m4 macro
680 * document concurrent data structures
681 * documentation: refer to rcu-api.txt
682 * Move API.txt to doc/rcu-api.txt, install in system doc/
683 * rculfhash: document implied memory barriers
684 * rculfhash: Ensure future-proof memory barrier semantic consistency
685 * API cleanup: use "uatomic_*" in cmm_smp_mb__ API
686 * uatomic: add memory barrier API for and/or/add/sub/inc/sub
687 * rculfhash: add runhash.sh test script
688 * rculfhash tests: add missing check
689 * rculfhash: fix: race between replace and del operations
690 * rculfhash: replace unneeded rcu_dereference by CMM_LOAD_SHARED
691 * rculfhash: use do {} while (0) for dbg_printf()
692 * rculfhash: cleanup typo
693 * rculfhash: update API comments
694 * rculfhash: update comments in implementation
695 * rculfhash tests: add long hash chains tests
696 * rculfhash tests: add uniqueness test
697 * rculfhash test: print test name
698 * rculfhash: stress requirement in documentation
699 * rculfhash: fix typo
700 * rculfhash tests: use array of callbacks to modularize
701 * rculfhash tests: modularize tests
702 * rculfhash: document ordering guarantees
703 * rculfhash: document linearizability guarantees
704 * rculfhash: update removal comment
705 * Add missing files to .gitignore
706 * Fix out-of-tree build
707 * rculfhash: check malloc NULL pointer
708 * Fix uatomic sign cast
709 * Remove unused jhash.h file
710 * Fix: use known license text, fix incorrect FSF address
711 * Fix: add missing sched.h include in rculfhash.c
712 * Allow tests to run on architectures without per-cpu call_rcu support
713 * Hash table test: FreeBSD compatibility fix
714 * tests: define _GNU_SOURCE instead of __USE_GNU
715 * RCU lock-free hash table: implement cds_lfht_is_node_deleted()
716 * Define _GNU_SOURCE to access CPU_ZERO() macro in uClibc
717 * Install ChangeLog and README into system's doc
718 * Fix AC_LANG_SOURCE usage: only takes one parameter
719 * Fix autoconf futex check
720 * configure.ac: Use AC_LANG_SOURCE for if else macros
721 * Refresh autoconf files
722 * Update gitignore
723 * rculfhash: add comment about hash seed randomness within test program
724 * readme: state correct GCC dependency for ARM
725 * rculfhash: remove an invocation of bit_reverse_ulong() when adding
726 * rculfhash: remove unneeded conversion
727 * rculfhash: remove unneeded clear_flag()
728 * cds_lfht_replace: add checks for old/new node hash/value match
729 * rculfhash: use node instead of iter argument for deletion
730 * rculfhash: number of logically removed nodes should not appear in API
731 * Document that flags could be represented on 2 bits
732 * Add missing REMOVAL_OWNER_FLAG comment to cds_lfht_node comment
733 * _cds_lfht_del is not used for buckets anymore, remove parameter
734 * rculfhash: Relax atomicity guarantees required by removal operation
735 * remove unneeded "return;"
736 * simplify the deletion for bucket node
737 * Remove unneeded code
738 * Cleanup DEFINE_RCU_FLAVOR()
739 * Add cds_lfht_ prefix to fls_ulong, get_count_order_ulong, get_count_order_u32
740 * Merge RCU Lock-Free Resizable Hash Table
741
7422011-12-12 Userspace RCU 0.6.7
743 * Add compat file for test urcu wfs
744 * Add missing compat file for wfq test
745 * hlist.h: Add missing stddef.h include for NULL
746 * call_rcu: Add missing call_rcu_before_fork and
747 call_rcu_after_fork_parent declarations
748 * Describe autotools/libtool/automake version dependency
749 * Remove m4_ifdef for AC_PROG_LIBTOOL (deprecated)
750 * Support older autotools
751 * Apply autoupdate to configure.ac
752 * Fix build for amd64 environment (for FreeBSD 8.2)
753 * Add missing rcu_dereference_sym_bp
754 * Install test scripts in the dist tarball
755
7562011-11-03 Userspace RCU 0.6.6
757 * qsbr vs call_rcu : remove exit assertion
758 * Rename likely/unlikely to caa_likely/caa_unlikely
759 * Reinsert missing test_urcu_*.c files (missing in rename)
760 * rename test_qsbr to test_urcu_qsbr
761 * urcu-pointer: fix rcu_set_pointer unset return value
762 * Enhance API.txt documentation, add to Makefile as EXTRA_DIST
763
7642011-09-29 Userspace RCU 0.6.5
765 * call_rcu: Document call_rcu requirements
766 * call_rcu: fix error handling of malloc error
767 * urcu call_rcu: Use RCU read-side protection for per-cpu call_rcu data
768 * urcu,call_rcu: Cleanup call_rcu_data pointers before use in child
769 * urcu,call_rcu: avoid create call_rcu_data for child when unneed
770 * urcu,defer_rcu: Make defer_rcu encoding more compact for marker
771 * urcu_defer: Use cancellation flag instead of pthread_cancel()
772 * urcu,call_rcu: protects call_rcu_data_list when remove node
773 * Create default call rcu data upon per-cpu call-rcu teardown
774 * powerpc: use __NO_LWSYNC__ check to use appropriate lwsync/sync opcode
775 * cmm: provide lightweight smp_rmb/smp_wmb on PPC
776 * atomic: provide seq_cst semantics on powerpc
777 * avoid leaking crdp for failed path
778 * Return -EEXIST when the old cpu call_rcu_data has not been removed
779 * protect writing to per_cpu_call_rcu_data[*]
780 * wake up default call_rcu thread after we move the leftover callbacks
781 * avoid memory leak in call_rcu_data_free()
782 * urcu call_rcu: fix use after free()
783 * use get_cpu_call_rcu_data() for get_call_rcu_data()
784 * init maxcpus before use
785 * call_rcu implementation: add missing static
786 * Document QSBR interaction with mutexes
787 * urcu-pointer: implement URCU_FORCE_CAST for C++ compatibility of urcu-pointer.h
788 * urcu-qsbr: use rcu_thread_offline/rcu_thread_online instead of inlining them
789 * Pair all_cpu call_rcu create with free
790 * QSBR: add missing wakeups in synchronize_rcu code
791 * cmm: do not generate code for smp_rmb/smp_wmb on x86_64
792 * cmm: let per-arch files provide cmm_smp_* barriers
793 * Optimize caa_get_cycles() for PowerPC64
794 * lfq/lfs tests: use call_rcu
795 * list: Add cds_list_first_entry
796 * rculfstack/queue: define _LGPL_SOURCE around static header include
797 * Add __rcu annotation (unimplemented)
798 * Fix incorrect fsf address in header files
799 * wfstack: push returns prior stack emptiness state
800 * Make lf stack push return if the stack was empty
801 * Document caa_container_of
802 * urcu-bp: do not call munmap for NULL registry at exit
803 * urcu libraries can directly use the _LGPL_SOURCE wfqueue
804 * rculfstack: document "push"
805 * Add runall.sh to tarball
806 * Fix build order of liburcu-cds-common
807 * Fix missing check for SYS_membarrier in map header
808 * urcu-qsbr: avoid useless futex wakeups and burning CPU for long grace periods
809 * api: reimplement BUILD_BUG_ON in compiler.h
810 * test api cleanup: remove unused primitives
811 * put thread offline while waiting for the init flag
812 * urcu: move private definitions to .c file
813 * urcu-bp: move private definitions to .c file
814 * urcu-qsbr: move private definitions to .c file
815 * rcutorture: fix rcutorture-qsbr
816 * wfqueue: fix type-incorrect assignment
817 * Fix tests Makefile EXTRA_DIST to use api.h
818 * Fix choice of default flavour in urcu/map/urcu.h
819 * api: remove list/hlist
820 * api: remove arch-specific files
821 * api: make api_gcc.h a superset of the other headers
822 * tests api: remove atomics
823 * put thread offline while waiting for the init flag
824 * urcu: move private definitions to .c file
825 * urcu-bp: move private definitions to .c file
826 * urcu-qsbr: move private definitions to .c file
827 * rcutorture: fix rcutorture-qsbr
828 * wfqueue: fix type-incorrect assignment
829 * Use caa_ prefix for min() and max()
830
8312011-07-21 Userspace RCU 0.6.4
832 * uatomic: Fix ARM build errors in uatomic.
833 * urcu tests: hold mutex across use of custom allocator.
834 * Portability fixes to support FreeBSD 8.2.
835
8362011-06-27 Userspace RCU 0.6.3
837 * uatomic: Fix i386 compatibility build errors in uatomic.
838
8392011-06-13 Userspace RCU 0.6.2
840 * Fix build on powerpc.
841
8422011-06-13 Userspace RCU 0.6.1
843 * Add missing headers into release tarball:
844 urcu-call-rcu-impl.h and urcu-defer-impl.h
845
8462011-06-10 Userspace RCU 0.6.0
847 * Added call_rcu() support, graciously contributed by Paul E. McKenney.
848 * Added urcu/cds.h and merged all "Concurrent Data Containers" (CDS)
849 into a single .so: liburcu-cds.so to have a single header/shared
850 object holding all concurrency-aware data containers. It provides
851 support for RCU lists, queues and stacks at the moment.
852 * liburcu 0.6.0 now allows linking a single application with multiple
853 flavors of RCU. This required a library API change which is
854 incompatible with older 0.5.x liburcu. The .so version number
855 is therefore bumped from 0 to 1 (e.g. liburcu.so.1).
856 * Added "atfork" handling API, documented in README. Only useful for
857 processes using fork() without following exec().
858 * Renaming the following files, keeping the old files (producing a
859 compiler warning):
860 urcu/uatomic_arch.h -> urcu/uatomic.h
861 urcu/urcu-futex.h -> urcu/futex.h
862 urcu/urcu_ref.h -> urcu/ref.h
863
8642011-03-04 Userspace RCU 0.5.4
865 * urcu-bp: Update fork() handling
866
867 Introduce
868
869 extern void rcu_bp_before_fork(void);
870 extern void rcu_bp_after_fork_parent(void);
871 extern void rcu_bp_after_fork_child(void);
872
873 to handle fork gracefully. These disable signals and hold
874 the registry mutex across forks. (this flavor of the liburcu
875 library ("bp" for "bulletproof") is mainly used by UST, the
876 user-space tracer).
877
8782011-03-03 Userspace RCU 0.5.3
879 * Add support for older ARM single-CPU architecturess (pre-ARMv7)
880 (thanks to Jason Wessel from WindRiver).
881 * Fix ARMv7 cmm_rmb/cmm_wmb primitives (use a dmb barrier).
882 * Remove leftover list_t type from urcu/list.h (namespace cleanup).
883 * urcu_defer: handle malloc error value.
884 * Update README file to describe urcu interaction with fork() when not
885 * followed
886 by an exec() system call.
887
8882010-11-18 Userspace RCU 0.5.2
889 * Fix renaming error introduced in 0.5.0.
890
8912010-11-18 Userspace RCU 0.5.1
892 * Fix renaming error introduced in 0.5.0. (incomplete fix)
893
8942010-11-18 Userspace RCU 0.5.0
895 * Version 0.5.0 changes the API presented by memory model,
896 architecture abstraction and data structure primitives in
897 headers. The prefixes are, respectively:
898 - cmm_ : Concurrent Memory Model
899 - caa_ : Concurrent Architecture Abstraction
900 - cds_ : Concurrent Data Structures
901
9022010-03-04 Userspace RCU 0.4.2
903 * Add generic uatomic ops support.
904 * Bugfix in urcu-bp. (rare garbage collection bug occurring in
905 multithreaded environment). Only affects urcu-bp users (UST).
906
9072010-02-12 Userspace RCU 0.4.1
908 * s390: compilation fix.
909
9102010-01-30 Userspace RCU 0.4.0
911 * API change: SIGURCU -> SIGRCU
912 * API changes: standardize on rcu_ prefix.
913 * API change: urcu_init -> rcu_init.
914 * urcu/config.h options renamed to CONFIG_RCU_HAVE_FENCE,
915 CONFIG_RCU_HAVE_FUTEX, CONFIG_RCU_SMP, CONFIG_RCU_COMPAT_ARCH.
916 ((moving from URCU -> RCU).
917 * library names changes: liburcu becomes the "default" version, using
918 sys_membarrier() when available, and using liburcu-mb as a
919 fallback.
920 * The signal-based liburcu is renamed from liburcu to
921 liburcu-signal. People previously using the signal-based
922 "liburcu" will automatically be moved to the "default" liburcu
923 version.
924
9252009-11-16 Userspace RCU 0.3.1
926 * Add support for sparcv9 32-bit build.
927 * Update build system to use --host instead of --target.
928
9292009-11-03 Userspace RCU 0.3.0
930 * API change for the "deferred work" interface.
931
9322009-10-14 Userspace RCU 0.2.3
933 * Move to autotools.
934 * Automated architecture detection, with i386 fallback.
935 * Detect if NR_futex is on the system, fallback on portable
936 alternatives.
937 * Add configure mode for UP-only systems.
938
9392009-10-02 Userspace RCU 0.2.2
940 * Phases out rcu_publish_content() api.
941 * Adds type checking to urcu-pointer.h pointer exchange primitives.
942
9432009-10-02 Userspace RCU 0.2.1
944 * small header dependency fix for rculist.h.
945 * new "liburcu-bp.so" : "Bulletproof RCU", made especially for
946 the UST userspace tracer. It's a library that sacrifices a bit
947 of read-side performance for automatically monitoring thread
948 creation/removal. See README for details.
949
9502009-10-01 Userspace RCU 0.2
951 * Clarify usage of rcu_cmpxchg_pointer, rcu_xchg_pointer,
952 rcu_set_pointer.
953
9542009-09-29 Userspace RCU 0.1
955 * Initial release.
This page took 0.026615 seconds and 4 git commands to generate.