Fix misspellings found with codespell across headers, sources, examples,
tests and the documentation, including "propably" in the nodeset
compiler docs. Identifiers, companion spec names and generated code are
left untouched.
Use pointer-sized atomic run flags in threaded fixtures, including dynamically
allocated discovery and browse flags. Pointer sizing supports the MSVC atomic
implementation as well as C11 and GCC atomics.
Serialize the client error-injection test with the server network callbacks
before accessing the internal session and shared send buffer.
Preserve master XML and node-management behavior, adapt regression tests to the driver and built-in NodeSet loader APIs, and extend compatibility with older Check releases.
External event-loop callbacks may need the server mutex to finish stopping components or event sources. Release the mutex around both shutdown iterations, matching the existing unlocked preliminary iteration.
Add bounded, cross-thread regression tests for both waiting loops. Each callback calls a public server API that acquires the server mutex. The tests fail on unpatched 1.5 and pass with the fix, without an Asio dependency.
Add global and type-specific lifecycle callbacks that run after defining references are installed but before mandatory children are instantiated. This lets applications precreate or customize children consistently for direct, namespace-zero and recursively instantiated nodes.
The server_deleteObject() function needs to handle concurrent scenarios where
client threads try to delete nodes while worker threads are creating them.
The original code used an infinite loop waiting for UA_STATUSCODE_GOOD, which
hung when nodes returned BADNODEIDUNKNOWN (deleted during construction or not yet created).
Changed to retry up to 100 times with 10ms sleep between attempts when getting
BADNODEIDUNKNOWN. This provides proper synchronization (max 1 second wait) for racing
add operations to complete, especially important under valgrind where operations are slower.
The loop exits immediately on UA_STATUSCODE_GOOD (successful delete). After retries,
accepts both GOOD and BADNODEIDUNKNOWN (node deleted during construction or add failed)
as valid outcomes.