X-Git-Url: https://git.liburcu.org/?a=blobdiff_plain;f=README.md;h=b1a29906e002bf4fea5e8b702af69d9b343b7cd9;hb=f97344e0254e1157bfcc8969b67332c1d5bfec57;hp=7a33cd7ea044c138618d886f50325661ff757105;hpb=f328865f6a3f75fc14388be0e9fc5507015af3a8;p=urcu.git diff --git a/README.md b/README.md index 7a33cd7..b1a2990 100644 --- a/README.md +++ b/README.md @@ -86,6 +86,8 @@ supported, with the following exceptions: - Alpha, ia64 and ARM architectures depend on GCC 4.x with atomic builtins support. For ARM this was introduced with GCC 4.4: http://gcc.gnu.org/gcc-4.4/changes.html. + - Linux aarch64 depends on GCC 5.1 or better because prior versions + perform unsafe access to deallocated stack. Clang version 3.0 (based on LLVM 3.0) is supported. @@ -224,10 +226,11 @@ be overridden with `-DSIGRCU` by modifying `Makefile.build.inc`. The BP library flavor stands for "bulletproof". It is specifically designed to help tracing library to hook on applications without -requiring to modify these applications. `urcu_bp_init()`, -`urcu_bp_register_thread()` and `urcu_bp_unregister_thread()` all become -nops. The state is dealt with by the library internally at the expense -of read-side and write-side performance. +requiring to modify these applications. `urcu_bp_init()`, and +`urcu_bp_unregister_thread()` all become nops, whereas calling +`urcu_bp_register_thread()` becomes optional. The state is dealt with by +the library internally at the expense of read-side and write-side +performance. ### Initialization @@ -387,7 +390,7 @@ For always-on debugging self-checks: ./configure --enable-rcu-debug For fine grained enabling of debugging self-checks, build -urserspace-rcu with DEBUG_RCU defined and compile dependent +userspace-rcu with DEBUG_RCU defined and compile dependent applications with DEBUG_RCU defined when necessary. Warning: Enabling this feature result in a performance penalty. @@ -410,6 +413,20 @@ systems can be disabled with: theoretically yielding slightly better performance. +### Usage of `--enable-cds-lfht-iter-debug` + +By default the library is configured with extra debugging checks for +lock-free hash table iterator traversal disabled. + +Building liburcu with --enable-cds-lfht-iter-debug and rebuilding +application to match the ABI change allows finding cases where the hash +table iterator is re-purposed to be used on a different hash table while +still being used to iterate on a hash table. + +This option alters the rculfhash ABI. Make sure to compile both library +and application with matching configuration. + + Make targets ------------ @@ -424,6 +441,33 @@ In addition to the usual `make check` target, Userspace RCU features - `make bench`: long (many hours) benchmarks. +Known issues +------------ + +There is an application vs library compatibility issue between +applications built using Userspace RCU 0.10 headers linked against +Userspace RCU 0.11 or 0.12 shared objects. The problem occurs as +follows: + + - An application executable is built with _LGPL_SOURCE defined, includes + any of the Userspace RCU 0.10 urcu flavor headers, and is built + without the -fpic compiler option. + + - The Userspace RCU 0.10 library shared objects are updated to 0.11 + or 0.12 without rebuilding the application. + + - The application will hang, typically when RCU grace period + (synchronize_rcu) is invoked. + +Some possible work-arounds for this are: + + - Rebuild the application against Userspace RCU 0.11+. + + - Rebuild the application with -fpic. + + - Upgrade Userspace RCU to 0.13+ without installing 0.11 nor 0.12. + + Contacts --------