| Commit message (Collapse) | Author | Age | Files | Lines |
... | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | | |
This supports running without pthreads, but with code that is made
thread-safe. A Big Switch -- qpthreads_enabled -- enables or disables
all pthread functions. When disabled, all mutex calls become NOPs.
|
|\ \ \ \ \ \
| | |_|_|/ /
| |/| | | | |
|
| | |_|/ /
| |/| | | |
|
|\| | | | |
|
| | |/ /
| |/| |
| | | |
| | | | |
Improved version.
|
|\| | |
| |/ /
|/| | |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
May not set orphan symbol values to anything meaningful, but must be
allowed to unset an orphan value (which is already unset) so that
when reaming a symbol table ordinary value delete/unset functions can
be called.
So fixed the assert which was disallowing all value changes for
orphans, in symbol_set_value().
|
| |\| |
|
|\ \ \
| | |/
| |/| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
Make one version of check prefix bit, and put it inline
with proper prototype. This gets rid of some macro's and also some
assert() that can never happen on a non-broken compiler.
* bgpd/bgp_table.c
* CHECK_BIT(): sayonara
* check_bit(): sayonara
* SET_LINK(): sayonara
* set_link(): make use of prefix_bit() instead of check_bit()
* bgp_node_match(): idem
* bgp_node_lookup(): idem
* bgp_node_get(): idem
* lib/prefix.h
* prefix_bit(): new inline version of check_bit()
* lib/table.c
* CHECK_BIT(): sayonara
* check_bit(): sayonara
* SET_LINK(): sayonara
* set_link(): make use of prefix_bit() instead of check_bit()
* route_node_match(): idem
* route_node_lookup(): idem
* route_node_get(): idem
* ospf6d/ospf6_lsdb.c
* CHECK_BIT(): sayonara
* ospf6_lsdb_lookup_next(): make use of prefix_bit() instead of
CHECK_BIT()
* ospf6_lsdb_type_router_head(): idem
* ospf6_lsdb_type_head(): idem
* ospf6d/ospf6_route.c
* CHECK_BIT(): sayonara
* ospf6_route_match_head() make use of prefix_bit() instead of
* CHECK_BIT()
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
* md5.c
* md5_calc(): If building on little endian then X
will be 'const uint32_t' which causes compiler
warning in code that never gets used. Just move
the endif to make sure code is not checked.
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
* table.c: general type safety and compiler help:
* maskbit[]: become const
* route_node_match(): take const args
* route_node_match_ipv4(): idem
* route_node_match_ipv6(): idem
* check_bit(): idem, plus adjust local vars typing
|
| | | |
|
| | |
| | |
| | |
| | | |
heasley: I've used this for a while to track usage.
|
| | | |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
Introduced separate types for qtime_mono_t and qtime_real_t, to
distinguish the time base of a given value.
Revised all users of timeouts so that they are all expressed as
qtime_mono_t values, so are all Quagga monotonic time based.
Revised qpt_cond_timedwait() so that all condition variables use the
same timebase (CLOCK_MONOTONIC if available, by default). Now all
timeout times are qtime_mono_t, and are converted to whatever the
condition variable is set to, if necessary.
Added explicit timeout to mqueue.
Fixed qps_pselect() to zeroise result vectors if no fds are
reported pending -- seems the O/S does not do this.
|
| | |
| | |
| | |
| | | |
mnum, not mbits.
|
| | | |
|
| | |
| | |
| | |
| | |
| | |
| | | |
Also, added testing for qps_make_super_set_map() to simulate wide
range of little-/big-endian word sizes and forwards/backwards bit
numbering.
|
| | | |
|
| | | |
|
| | | |
|
| | |
| | |
| | |
| | | |
Tidied up and implemented qps_selection_validate() as a debug aid.
|
| | | |
|
| | |
| | |
| | |
| | | |
Needs debugging.
|
| | |
| | |
| | |
| | | |
Needs to use lldiv in qtime.c on 32bit machine.
|
|\ \ \ |
|
| | | | |
|
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
Improved the arithmetic and changed code to deal with wrap around
only if clock_t is 32-bits (and not to compile if it is less !).
Updated documentation.
|
|/ / /
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
For use when preparing for pselect or other timed wait.
Simplified the handling of pending unsets.
Tidied up in heap.c & .h.
|
| | | |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
This allows mutexes to be initialised as recursive.
Required correctly placed setting of _GNU_SOURCE (for gcc).
It is assumed that "config.h" will enable the required pthreads
features -- which are now documented in lib/qpthread.c.
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
lib/qpselect supports data structure to multiplex between many file
descriptors using pselect().
lib/qtimers supports data structures to run multiple timers.
Also affected:
lib/Makefile.am -- to add the new files
lib/memtypes.c -- to add further memory types for the above
|
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
Added conversion routines for CLOCK_REALTIME/timeofday to/from
monotonic clock -- so can set timers to actual time, if required.
Added confirms and tidied up documentation.
|
| | |
| | |
| | |
| | |
| | |
| | | |
Added qpt_thread_self().
Initialised output sigset_t before setting it in qpt_thread_sigmask().
|
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
Added vector_unset_item() & recast vector_unset().
Added heap_pop_push_item() and made a number of simple operations
Inline functions.
|
| | |
| | |
| | |
| | |
| | | |
Adds message queue structure to manage the passing of messages
between qpthreads.
|
| | |
| | |
| | |
| | | |
Adding qpt_thread_sigmask() and qpt_thread_signal().
|
| | |
| | |
| | |
| | |
| | | |
Changed casts around so that the seconds argument can be a floating
point value. So that, in particular, QTIME(2.33) works.
|
| | | |
|
|\ \ \ |
|
| | | | |
|
| | | | |
|
| | | |
| | | |
| | | |
| | | | |
pthread safe interface for logging. log.h is that interface.
|
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
lib.c: use a mutex to protect all public methods. Replaced
code in command.c etc that modified zlog_default directly with
interlocked getters and setters. Requires that vty_log in vty.c
handles its own pthread safety TBA.
privs.c: use a mutex to protect all public methods. Counts RAISE
and LOWER so that privilege stays RAISED until all pthreads
have lowered. Improved messages in test-privs.c
|
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
New files: lib/qpthreads.c & .h
Encapsulates the Pthreads facilities to be used in Quagga.
Implicitly documents the sub-set of Pthreads being used.
Provides error checking for a number of functions which may return
errors, but are not generally expected to and for whom an error is
treated as fatal.
Could be modified to "null out" the use of Pthreads.
New files: lib/qtime.c & .h
Defines a 64-bit integer time value which is a lot easier to
handle than the usual timespec and timeval structures. (C99
requires a 64-bit integer.)
Provides front ends for gettimeofday() & clock_gettime() which
return 64-bit time value. Also conversions to and from timespec and
timeval.
Provides a monotonic clock for when CLOCK_MONOTONIC is not available.
(This is based on code from Joakim Tjernlund.)
New files: lib/heap.c & .h
Implements a heap data structure closely allied to the vector.
This will be used for timer handling.
Modified: lib/memtypes.c
New memory types for qpthreads structures and for the heap.
Modified: lib/zassert.h
Added explicit "passert" == assert which is not subject to NDEBUG.
Added explicit "nassert" == assert which is subject to NDEBUG.
Added zabort, zabort_errno and zabbort_err for when something has
gone fatally wrong. (Require changes to lib/log.c which are TBD.)
|
|\ \ \ \
| |/ / /
|/| | /
| | |/
| |/| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
Affects: lib/plist.c
Merged otherwise unused prefix_list_free() into prefix_list_delete(),
and removed second call of symbol_unset_value().
|
|/ / |
|
| |
| |
| |
| |
| |
| | |
There appears to be some divergence of opinion over the return values
from these functions. This change makes the return == 1 if OK, and
0 otherwise. This is consistent with all usage.
|