thread-safe at all. This document describes requirements and pitfalls
on the way to use the multi-threaded version of librrd in your own
programs. It also gives hints for future RRD development to keep the
thread-safe at all. This document describes requirements and pitfalls
on the way to use the multi-threaded version of librrd in your own
programs. It also gives hints for future RRD development to keep the
Do not use any at-style time specifications. Parsing of such time
specifications is terribly non-thread-safe.
Do not use any at-style time specifications. Parsing of such time
specifications is terribly non-thread-safe.
Every thread SHOULD call C<rrd_get_context()> before its first call to
any C<librrd_th> function in order to set up thread specific data. This
Every thread SHOULD call C<rrd_get_context()> before its first call to
any C<librrd_th> function in order to set up thread specific data. This
Only use thread-safe functions in library code. Many often used libc
functions aren't thread-safe. Take care in the following
Only use thread-safe functions in library code. Many often used libc
functions aren't thread-safe. Take care in the following
C<getopt> uses global variables and behaves badly in a multi-threaded
application when called concurrently. Instead provide a *_r function
C<getopt> uses global variables and behaves badly in a multi-threaded
application when called concurrently. Instead provide a *_r function
-It uses lots of global vars. You may use it in functions not designed
-to be thread-safe like functions wrapping the C<_r> version of some
+It uses lots of global variables. You may use it in functions not designed
+to be thread-safe, like in functions wrapping the C<_r> version of some
operation (e.g., C<rrd_create>, but not in C<rrd_create_r>)
=back
=head2 CURRENTLY IMPLEMENTED THREAD SAFE FUNCTIONS
operation (e.g., C<rrd_create>, but not in C<rrd_create_r>)
=back
=head2 CURRENTLY IMPLEMENTED THREAD SAFE FUNCTIONS