Commit graph

22 commits

Author SHA1 Message Date
Erik Boasson
9b3a71e1ab lift limits on handle allocation and reuse (#95)
The old entity handle mechanism suffered from a number of problems, the
most terrible one being that it would only ever allocate 1000 handles
(not even have at most 1000 in use at the same time).  Secondarily, it
was protected by a single mutex that actually does show up as a limiting
factor in, say, a polling-based throughput test with small messages.
Thirdly, it tried to provide for various use cases that don't exist in
practice but add complexity and overhead.

This commit totally rewrites the mechanism, by replacing the old array
with a hash table and allowing a near-arbitrary number of handles as
well as reuse of handles.  It also removes the entity "kind" bits in the
most significant bits of the handles, because they only resulted in
incorrect checking of argument validity.  All that is taken out, but
there is still more cleaning up to be done.  It furthermore removes an
indirection in the handle-to-entity lookup by embedding the
"dds_handle_link" structure in the entity.

Handle allocation is randomized to avoid the have a high probability of
quickly finding an available handle (the total number of handles is
limited to a number much smaller than the domain from which they are
allocated).  The likelihood of handle reuse is still dependent on the
number of allocated handles -- the fewer handles there are, the longer
the expected time to reuse.  Non-randomized handles would give a few
guarantees more, though.

It moreover moves the code from the "util" to the "core/ddsc" component,
because it really is only used for entities, and besides the new
implementation relies on the deferred freeing (a.k.a. garbage collection
mechanism) implemented in the core.

The actual handle management has two variants, selectable with a macro:
the preferred embodiment uses a concurrent hash table, the actually used
one performs all operations inside a single mutex and uses a
non-concurrent version of the hash table.  The reason the
less-predeferred embodiment is used is that the concurrent version
requires the freeing of entity objects to be deferred (much like the
GUID-to-entity hash tables in DDSI function, or indeed the key value to
instance handle mapping).  That is a fair bit of work, and the
non-concurrent version is a reasonable intermediate step.

Signed-off-by: Erik Boasson <eb@ilities.com>
2019-04-21 16:05:06 +02:00
Jeroen Koekkoek
cd6742ee12 Rearrange and fixup abstraction layer
- Replace os_result by dds_retcode_t and move DDS return code defines down.
  Eliminates the need to convert between different return code types.

- Move dds_time_t down and remove os_time.
  Eliminates the need to convert between different time representations and
  reduces code duplication.

- Remove use of Microsoft source-code annotation language (SAL).
  SAL annotations are Microsoft specific and not very well documented. This
  makes it very difficult for contributers to write.

- Rearrange the abstraction layer to be feature-based. The previous layout
  falsely assumed that the operating system dictates which implementation is
  best suited. For general purpose operating systems this is mostly true, but
  embedded targets require a slightly different approach and may not even offer
  all features. The new layout makes it possible to mix-and-match feature
  implementations and allows for features to not be implemented at all.

- Replace the os prefix by ddsrt to avoid name collisions.

- Remove various portions of unused and unwanted code.

- Export thread names on all supported platforms.

- Return native thread identifier on POSIX compatible platforms.

- Add timed wait for condition variables that takes an absolute time.

- Remove system abstraction for errno. The os_getErrno and os_setErrno were
  incorrect. Functions that might fail now simply return a DDS return code
  instead.

- Remove thread-specific memory abstraction. os_threadMemGet and accompanying
  functions were a mess and their use has been eliminated by other changes in
  this commit.

- Replace attribute (re)defines by ddsrt_ prefixed equivalents to avoid name
  collisions and problems with faulty __nonnull__ attributes.

Signed-off-by: Jeroen Koekkoek <jeroen@koekkoek.nl>
2019-03-22 15:19:09 +01:00
Jeroen Koekkoek
58a8dfd5c5 Add support for Travis CI Windows builds
Signed-off-by: Jeroen Koekkoek <jeroen@koekkoek.nl>
2019-02-18 14:14:24 +01:00
Jeroen Koekkoek
86d3972ad9 Fix FindMaven.cmake on Windows
Signed-off-by: Jeroen Koekkoek <jeroen@koekkoek.nl>
2019-02-18 13:50:25 +01:00
Erik Boasson
b8329ce206 Require OpenSSL by default and add list it as a dependency for Conan
OpenSSL support remains optional, but instead of including it or not solely depending on whether cmake manages to find it, there is now a DDSC_ENABLE_OPENSSL option that defaults to "ON". Setting to OFF removes the dependency. The Conan configuration has been updated to automatically provide openssl 1.1.1a.

Signed-off-by: Erik Boasson <eb@ilities.com>
2019-02-01 10:39:49 +01:00
Jeroen Koekkoek
334a85e0f1 Make usage of Conan provided OpenSSL transparent
Signed-off-by: Jeroen Koekkoek <jeroen@koekkoek.nl>
2019-01-31 17:09:05 +01:00
Jeroen Koekkoek
e25656a4c5 Remove unnecessary CMake modules and fixup os/CMakeLists.txt
Signed-off-by: Jeroen Koekkoek <jeroen@koekkoek.nl>
2019-01-07 18:15:07 +01:00
Jeroen Koekkoek
74a48c5731 Replace Criterion by CUnit
Signed-off-by: Jeroen Koekkoek <jeroen@koekkoek.nl>
2018-12-06 14:48:30 +01:00
Jeroen Koekkoek
5b4ccf3daa Fix bug in CUnit signature parser
Signed-off-by: Jeroen Koekkoek <jeroen@koekkoek.nl>
2018-11-30 23:42:29 +01:00
Jeroen Koekkoek
f56eccf6a6 Fix exit codes returned by CUnit test runner
Signed-off-by: Jeroen Koekkoek <jeroen@koekkoek.nl>
2018-11-08 11:51:54 +01:00
Jeroen Koekkoek
217def362c Fix location of generated header for CUnit based tests
Signed-off-by: Jeroen Koekkoek <jeroen@koekkoek.nl>
2018-11-08 09:42:14 +01:00
Jeroen Koekkoek
94722a642e Make cast from CU_ErrorCode to int in CUnit test runner main explicit
Signed-off-by: Jeroen Koekkoek <jeroen@koekkoek.nl>
2018-11-08 09:41:57 +01:00
Jeroen Koekkoek
6171d44b62 Add -Wno-missing-field-initializers to COMPILE_FLAGS property on test source files
Signed-off-by: Jeroen Koekkoek <jeroen@koekkoek.nl>
2018-11-08 09:41:42 +01:00
Jeroen Koekkoek
599bf311cf Fix Windows issues with CUnit fixture initialization
Signed-off-by: Jeroen Koekkoek <jeroen@koekkoek.nl>
2018-11-02 14:37:43 +01:00
Jeroen Koekkoek
ecaf72c003 Fix test registration on macOS
Signed-off-by: Jeroen Koekkoek <jeroen@koekkoek.nl>
2018-11-02 13:27:15 +01:00
Jeroen Koekkoek
630178fb12 Cleanup CUnit integration and add support for theories
Signed-off-by: Jeroen Koekkoek <jeroen@koekkoek.nl>
2018-11-01 19:32:24 +01:00
Erik Boasson
b7487b18a6 stricter warning checks and the corresponding fixes
Signed-off-by: Erik Boasson <eb@ilities.com>
2018-08-09 09:23:03 +02:00
Jeroen Koekkoek
13e2e68b33 force Criterion to not run tests in parallel
Signed-off-by: Jeroen Koekkoek <jeroen@koekkoek.nl>
2018-08-06 16:13:05 +02:00
Jeroen Koekkoek
169b4129f0 set maximum timeout for tests to 10s
Signed-off-by: Jeroen Koekkoek <jeroen@koekkoek.nl>
2018-08-06 15:09:14 +02:00
Jeroen Koekkoek
977458c57a set DYLD_LIBRARY_PATH (macOS) and PATH (Windows) in test environment if linked against shared libraries
Signed-off-by: Jeroen Koekkoek <jeroen@koekkoek.nl>
2018-08-06 15:09:06 +02:00
Jeroen Koekkoek
085985dce7 add support for CUnit versions less than 2.1-3
Signed-off-by: Jeroen Koekkoek <jeroen@koekkoek.nl>
2018-08-06 15:08:54 +02:00
Michiel Beemster
11d9ce37aa Initial contribution 2018-04-10 17:03:59 +02:00