amps-python-client 5.3.4.2__zip → 5.3.4.3__zip
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/LICENSE +50 -39
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/PKG-INFO +1 -1
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/html/.buildinfo +1 -1
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/html/code.html +717 -482
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/html/genindex.html +4 -4
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/html/index.html +4 -4
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/html/py-modindex.html +4 -4
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/html/search.html +4 -4
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/html/searchindex.js +1 -1
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/include/ampspyver.h +1 -1
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/index.html +1 -1
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/setup.py +4 -4
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/setup_amps.py +3 -3
- amps-python-client-5.3.4.3/src/client_docs.h +1210 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/src/command_docs.h +10 -5
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/src/cpp/include/amps/BlockPublishStore.hpp +0 -3
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/src/cpp/include/amps/BlockStore.hpp +0 -3
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/src/cpp/include/amps/Field.hpp +6 -2
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/src/cpp/include/amps/MMapStoreBuffer.hpp +21 -14
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/src/cpp/include/amps/MemoryStoreBuffer.hpp +4 -1
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/src/cpp/include/amps/Message.hpp +8 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/src/cpp/include/amps/ServerChooser.hpp +15 -4
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/src/cpp/include/amps/amps.h +12 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/src/cpp/include/amps/amps_impl.h +12 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/src/cpp/include/amps/ampscrc.hpp +2 -4
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/src/cpp/include/amps/ampsplusplus.hpp +13 -17
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/src/cpp/include/amps/ampsver.h +2 -2
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/src/cpp/include/amps/util.hpp +4 -4
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/src/cpp/src/amps_ssl.c +87 -11
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/src/cpp/src/atfork.c +33 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/src/cpp/src/tcp.c +210 -44
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/src/cpp/src/tcps.c +168 -48
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/src/cpp/src/unix.c +88 -27
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/src/exponentialdelaystrategy.cpp +23 -29
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/src/fixeddelaystrategy.cpp +13 -12
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/src/haclient_docs.h +34 -20
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/src/nvfixbuilder.cpp +3 -3
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/src/nvfixbuilder_docs.h +3 -3
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/src/nvfixshredder_docs.h +3 -3
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/src/serverchooser_docs.h +4 -4
- amps-python-client-5.3.4.2/src/client_docs.h +0 -956
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/HISTORY +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/README.md +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/command-reference/doctrees/chapters/ack-messages.doctree +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/command-reference/doctrees/chapters/content-messages.doctree +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/command-reference/doctrees/chapters/intro.doctree +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/command-reference/doctrees/chapters/logon.doctree +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/command-reference/doctrees/chapters/protocol-reference.doctree +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/command-reference/doctrees/chapters/publishing.doctree +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/command-reference/doctrees/chapters/query-delimiters.doctree +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/command-reference/doctrees/chapters/query-subscribe.doctree +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/command-reference/doctrees/chapters/removing.doctree +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/command-reference/doctrees/chapters/utilities.doctree +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/command-reference/doctrees/environment.pickle +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/command-reference/doctrees/index.doctree +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/command-reference/html/.buildinfo +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/command-reference/html/_sources/chapters/ack-messages.rst.txt +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/command-reference/html/_sources/chapters/content-messages.rst.txt +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/command-reference/html/_sources/chapters/intro.rst.txt +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/command-reference/html/_sources/chapters/logon.rst.txt +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/command-reference/html/_sources/chapters/protocol-reference.rst.txt +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/command-reference/html/_sources/chapters/publishing.rst.txt +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/command-reference/html/_sources/chapters/query-delimiters.rst.txt +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/command-reference/html/_sources/chapters/query-subscribe.rst.txt +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/command-reference/html/_sources/chapters/removing.rst.txt +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/command-reference/html/_sources/chapters/utilities.rst.txt +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/command-reference/html/_sources/index.rst.txt +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/command-reference/html/_static/ajax-loader.gif +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/command-reference/html/_static/alabaster.css +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/command-reference/html/_static/basic.css +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/command-reference/html/_static/comment-bright.png +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/command-reference/html/_static/comment-close.png +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/command-reference/html/_static/comment.png +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/command-reference/html/_static/custom.css +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/command-reference/html/_static/doctools.js +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/command-reference/html/_static/down-pressed.png +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/command-reference/html/_static/down.png +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/command-reference/html/_static/file.png +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/command-reference/html/_static/flag_logo.png +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/command-reference/html/_static/flag_logo.svg +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/command-reference/html/_static/jquery-3.1.0.js +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/command-reference/html/_static/jquery.js +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/command-reference/html/_static/minus.png +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/command-reference/html/_static/plus.png +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/command-reference/html/_static/pygments.css +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/command-reference/html/_static/searchtools.js +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/command-reference/html/_static/underscore-1.3.1.js +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/command-reference/html/_static/underscore.js +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/command-reference/html/_static/up-pressed.png +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/command-reference/html/_static/up.png +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/command-reference/html/_static/websupport.js +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/command-reference/html/chapters/ack-messages.html +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/command-reference/html/chapters/content-messages.html +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/command-reference/html/chapters/intro.html +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/command-reference/html/chapters/logon.html +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/command-reference/html/chapters/protocol-reference.html +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/command-reference/html/chapters/publishing.html +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/command-reference/html/chapters/query-delimiters.html +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/command-reference/html/chapters/query-subscribe.html +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/command-reference/html/chapters/removing.html +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/command-reference/html/chapters/utilities.html +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/command-reference/html/genindex.html +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/command-reference/html/index.html +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/command-reference/html/objects.inv +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/command-reference/html/search.html +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/command-reference/html/searchindex.js +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/html/_sources/code.rst.txt +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/html/_sources/index.rst.txt +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/html/_static/ajax-loader.gif +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/html/_static/basic.css +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/html/_static/classic.css +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/html/_static/comment-bright.png +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/html/_static/comment-close.png +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/html/_static/comment.png +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/html/_static/default.css +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/html/_static/doctools.js +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/html/_static/down-pressed.png +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/html/_static/down.png +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/html/_static/file.png +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/html/_static/jquery-3.1.0.js +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/html/_static/jquery.js +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/html/_static/minus.png +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/html/_static/plus.png +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/html/_static/pygments.css +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/html/_static/searchtools.js +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/html/_static/sidebar.js +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/html/_static/underscore-1.3.1.js +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/html/_static/underscore.js +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/html/_static/up-pressed.png +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/html/_static/up.png +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/html/_static/websupport.js +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/html/objects.inv +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/python/doctrees/chapters/advanced-topics.doctree +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/python/doctrees/chapters/cpp-compiler-list.doctree +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/python/doctrees/chapters/cpp-feature-table.doctree +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/python/doctrees/chapters/creating-commands.doctree +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/python/doctrees/chapters/deltas.doctree +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/python/doctrees/chapters/error-handling.doctree +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/python/doctrees/chapters/exceptions.doctree +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/python/doctrees/chapters/first-program.doctree +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/python/doctrees/chapters/high-availability.doctree +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/python/doctrees/chapters/installing.doctree +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/python/doctrees/chapters/introduction.doctree +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/python/doctrees/chapters/moving-from-python-lite.doctree +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/python/doctrees/chapters/performance-tips.doctree +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/python/doctrees/chapters/queues.doctree +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/python/doctrees/chapters/sow.doctree +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/python/doctrees/chapters/subscriptions.doctree +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/python/doctrees/chapters/utilities.doctree +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/python/doctrees/environment.pickle +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/python/doctrees/index.doctree +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/python/html/.buildinfo +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/python/html/_images/caution.png +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/python/html/_images/caution.svg +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/python/html/_images/connection_string.svg +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/python/html/_images/important.png +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/python/html/_images/important.svg +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/python/html/_images/tip.png +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/python/html/_images/tip.svg +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/python/html/_images/warning.png +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/python/html/_sources/chapters/advanced-topics.rst.txt +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/python/html/_sources/chapters/cpp-compiler-list.rst.txt +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/python/html/_sources/chapters/cpp-feature-table.rst.txt +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/python/html/_sources/chapters/creating-commands.rst.txt +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/python/html/_sources/chapters/deltas.rst.txt +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/python/html/_sources/chapters/error-handling.rst.txt +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/python/html/_sources/chapters/exceptions.rst.txt +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/python/html/_sources/chapters/first-program.rst.txt +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/python/html/_sources/chapters/high-availability.rst.txt +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/python/html/_sources/chapters/installing.rst.txt +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/python/html/_sources/chapters/introduction.rst.txt +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/python/html/_sources/chapters/moving-from-python-lite.rst.txt +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/python/html/_sources/chapters/performance-tips.rst.txt +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/python/html/_sources/chapters/queues.rst.txt +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/python/html/_sources/chapters/sow.rst.txt +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/python/html/_sources/chapters/subscriptions.rst.txt +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/python/html/_sources/chapters/utilities.rst.txt +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/python/html/_sources/index.rst.txt +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/python/html/_static/ajax-loader.gif +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/python/html/_static/alabaster.css +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/python/html/_static/basic.css +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/python/html/_static/comment-bright.png +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/python/html/_static/comment-close.png +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/python/html/_static/comment.png +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/python/html/_static/custom.css +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/python/html/_static/doctools.js +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/python/html/_static/down-pressed.png +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/python/html/_static/down.png +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/python/html/_static/file.png +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/python/html/_static/flag_logo.png +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/python/html/_static/flag_logo.svg +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/python/html/_static/jquery-3.1.0.js +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/python/html/_static/jquery.js +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/python/html/_static/minus.png +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/python/html/_static/plus.png +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/python/html/_static/pygments.css +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/python/html/_static/searchtools.js +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/python/html/_static/underscore-1.3.1.js +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/python/html/_static/underscore.js +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/python/html/_static/up-pressed.png +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/python/html/_static/up.png +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/python/html/_static/websupport.js +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/python/html/chapters/advanced-topics.html +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/python/html/chapters/cpp-compiler-list.html +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/python/html/chapters/cpp-feature-table.html +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/python/html/chapters/creating-commands.html +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/python/html/chapters/deltas.html +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/python/html/chapters/error-handling.html +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/python/html/chapters/exceptions.html +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/python/html/chapters/first-program.html +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/python/html/chapters/high-availability.html +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/python/html/chapters/installing.html +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/python/html/chapters/introduction.html +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/python/html/chapters/moving-from-python-lite.html +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/python/html/chapters/performance-tips.html +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/python/html/chapters/queues.html +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/python/html/chapters/sow.html +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/python/html/chapters/subscriptions.html +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/python/html/chapters/utilities.html +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/python/html/genindex.html +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/python/html/index.html +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/python/html/objects.inv +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/python/html/search.html +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/python/html/searchindex.js +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/python-quickstart/doctrees/chapters/crankitup.doctree +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/python-quickstart/doctrees/chapters/equipment.doctree +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/python-quickstart/doctrees/environment.pickle +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/python-quickstart/doctrees/index.doctree +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/python-quickstart/html/.buildinfo +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/python-quickstart/html/_sources/chapters/crankitup.rst.txt +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/python-quickstart/html/_sources/chapters/equipment.rst.txt +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/python-quickstart/html/_sources/index.rst.txt +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/python-quickstart/html/_static/ajax-loader.gif +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/python-quickstart/html/_static/alabaster.css +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/python-quickstart/html/_static/basic.css +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/python-quickstart/html/_static/comment-bright.png +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/python-quickstart/html/_static/comment-close.png +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/python-quickstart/html/_static/comment.png +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/python-quickstart/html/_static/custom.css +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/python-quickstart/html/_static/doctools.js +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/python-quickstart/html/_static/down-pressed.png +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/python-quickstart/html/_static/down.png +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/python-quickstart/html/_static/file.png +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/python-quickstart/html/_static/flag_logo.png +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/python-quickstart/html/_static/flag_logo.svg +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/python-quickstart/html/_static/jquery-3.1.0.js +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/python-quickstart/html/_static/jquery.js +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/python-quickstart/html/_static/minus.png +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/python-quickstart/html/_static/plus.png +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/python-quickstart/html/_static/pygments.css +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/python-quickstart/html/_static/searchtools.js +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/python-quickstart/html/_static/underscore-1.3.1.js +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/python-quickstart/html/_static/underscore.js +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/python-quickstart/html/_static/up-pressed.png +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/python-quickstart/html/_static/up.png +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/python-quickstart/html/_static/websupport.js +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/python-quickstart/html/chapters/crankitup.html +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/python-quickstart/html/chapters/equipment.html +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/python-quickstart/html/genindex.html +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/python-quickstart/html/index.html +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/python-quickstart/html/objects.inv +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/python-quickstart/html/search.html +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/python-quickstart/html/searchindex.js +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/resources/custom.css +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/resources/flag_logo.svg +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/user-guide/doctrees/chapters/acks.doctree +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/user-guide/doctrees/chapters/actions.doctree +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/user-guide/doctrees/chapters/amps-statistics.doctree +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/user-guide/doctrees/chapters/amps_expressions.doctree +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/user-guide/doctrees/chapters/amps_functions.doctree +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/user-guide/doctrees/chapters/auxiliary_modules.doctree +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/user-guide/doctrees/chapters/config-file-shortcuts.doctree +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/user-guide/doctrees/chapters/conflated_topics.doctree +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/user-guide/doctrees/chapters/constructing-fields.doctree +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/user-guide/doctrees/chapters/daemon.doctree +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/user-guide/doctrees/chapters/delta.doctree +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/user-guide/doctrees/chapters/distribution.doctree +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/user-guide/doctrees/chapters/enrichment.doctree +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/user-guide/doctrees/chapters/events.doctree +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/user-guide/doctrees/chapters/file_format_versions.doctree +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/user-guide/doctrees/chapters/glossary.doctree +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/user-guide/doctrees/chapters/ha.doctree +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/user-guide/doctrees/chapters/installing_and_starting.doctree +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/user-guide/doctrees/chapters/intro.doctree +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/user-guide/doctrees/chapters/logging.doctree +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/user-guide/doctrees/chapters/messageTypes.doctree +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/user-guide/doctrees/chapters/monitoring.doctree +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/user-guide/doctrees/chapters/oof.doctree +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/user-guide/doctrees/chapters/operation.doctree +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/user-guide/doctrees/chapters/pub_sub.doctree +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/user-guide/doctrees/chapters/queues.doctree +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/user-guide/doctrees/chapters/replication.doctree +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/user-guide/doctrees/chapters/securing.doctree +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/user-guide/doctrees/chapters/sow.doctree +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/user-guide/doctrees/chapters/sow_queries.doctree +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/user-guide/doctrees/chapters/spark.doctree +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/user-guide/doctrees/chapters/transports.doctree +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/user-guide/doctrees/chapters/troubleshooting.doctree +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/user-guide/doctrees/chapters/txlog.doctree +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/user-guide/doctrees/chapters/usecases.doctree +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/user-guide/doctrees/chapters/utilities.doctree +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/user-guide/doctrees/chapters/views.doctree +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/user-guide/doctrees/environment.pickle +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/user-guide/doctrees/index.doctree +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/user-guide/html/.buildinfo +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/user-guide/html/_sources/chapters/acks.rst.txt +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/user-guide/html/_sources/chapters/actions.rst.txt +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/user-guide/html/_sources/chapters/amps-statistics.rst.txt +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/user-guide/html/_sources/chapters/amps_expressions.rst.txt +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/user-guide/html/_sources/chapters/amps_functions.rst.txt +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/user-guide/html/_sources/chapters/auxiliary_modules.rst.txt +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/user-guide/html/_sources/chapters/config-file-shortcuts.rst.txt +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/user-guide/html/_sources/chapters/conflated_topics.rst.txt +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/user-guide/html/_sources/chapters/constructing-fields.rst.txt +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/user-guide/html/_sources/chapters/daemon.rst.txt +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/user-guide/html/_sources/chapters/delta.rst.txt +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/user-guide/html/_sources/chapters/distribution.rst.txt +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/user-guide/html/_sources/chapters/enrichment.rst.txt +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/user-guide/html/_sources/chapters/events.rst.txt +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/user-guide/html/_sources/chapters/file_format_versions.rst.txt +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/user-guide/html/_sources/chapters/glossary.rst.txt +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/user-guide/html/_sources/chapters/ha.rst.txt +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/user-guide/html/_sources/chapters/installing_and_starting.rst.txt +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/user-guide/html/_sources/chapters/intro.rst.txt +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/user-guide/html/_sources/chapters/logging.rst.txt +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/user-guide/html/_sources/chapters/messageTypes.rst.txt +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/user-guide/html/_sources/chapters/monitoring.rst.txt +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/user-guide/html/_sources/chapters/oof.rst.txt +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/user-guide/html/_sources/chapters/operation.rst.txt +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/user-guide/html/_sources/chapters/pub_sub.rst.txt +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/user-guide/html/_sources/chapters/queues.rst.txt +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/user-guide/html/_sources/chapters/replication.rst.txt +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/user-guide/html/_sources/chapters/securing.rst.txt +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/user-guide/html/_sources/chapters/sow.rst.txt +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/user-guide/html/_sources/chapters/sow_queries.rst.txt +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/user-guide/html/_sources/chapters/spark.rst.txt +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/user-guide/html/_sources/chapters/transports.rst.txt +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/user-guide/html/_sources/chapters/troubleshooting.rst.txt +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/user-guide/html/_sources/chapters/txlog.rst.txt +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/user-guide/html/_sources/chapters/usecases.rst.txt +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/user-guide/html/_sources/chapters/utilities.rst.txt +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/user-guide/html/_sources/chapters/views.rst.txt +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/user-guide/html/_sources/index.rst.txt +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/user-guide/html/_static/ajax-loader.gif +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/user-guide/html/_static/alabaster.css +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/user-guide/html/_static/basic.css +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/user-guide/html/_static/comment-bright.png +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/user-guide/html/_static/comment-close.png +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/user-guide/html/_static/comment.png +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/user-guide/html/_static/custom.css +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/user-guide/html/_static/doctools.js +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/user-guide/html/_static/down-pressed.png +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/user-guide/html/_static/down.png +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/user-guide/html/_static/file.png +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/user-guide/html/_static/flag_logo.png +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/user-guide/html/_static/flag_logo.svg +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/user-guide/html/_static/jquery-3.1.0.js +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/user-guide/html/_static/jquery.js +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/user-guide/html/_static/minus.png +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/user-guide/html/_static/plus.png +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/user-guide/html/_static/pygments.css +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/user-guide/html/_static/searchtools.js +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/user-guide/html/_static/underscore-1.3.1.js +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/user-guide/html/_static/underscore.js +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/user-guide/html/_static/up-pressed.png +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/user-guide/html/_static/up.png +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/user-guide/html/_static/websupport.js +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/user-guide/html/chapters/acks.html +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/user-guide/html/chapters/actions.html +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/user-guide/html/chapters/amps-statistics.html +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/user-guide/html/chapters/amps_expressions.html +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/user-guide/html/chapters/amps_functions.html +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/user-guide/html/chapters/auxiliary_modules.html +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/user-guide/html/chapters/config-file-shortcuts.html +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/user-guide/html/chapters/conflated_topics.html +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/user-guide/html/chapters/constructing-fields.html +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/user-guide/html/chapters/daemon.html +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/user-guide/html/chapters/delta.html +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/user-guide/html/chapters/distribution.html +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/user-guide/html/chapters/enrichment.html +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/user-guide/html/chapters/events.html +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/user-guide/html/chapters/file_format_versions.html +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/user-guide/html/chapters/glossary.html +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/user-guide/html/chapters/ha.html +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/user-guide/html/chapters/installing_and_starting.html +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/user-guide/html/chapters/intro.html +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/user-guide/html/chapters/logging.html +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/user-guide/html/chapters/messageTypes.html +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/user-guide/html/chapters/monitoring.html +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/user-guide/html/chapters/oof.html +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/user-guide/html/chapters/operation.html +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/user-guide/html/chapters/pub_sub.html +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/user-guide/html/chapters/queues.html +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/user-guide/html/chapters/replication.html +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/user-guide/html/chapters/securing.html +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/user-guide/html/chapters/sow.html +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/user-guide/html/chapters/sow_queries.html +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/user-guide/html/chapters/spark.html +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/user-guide/html/chapters/transports.html +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/user-guide/html/chapters/troubleshooting.html +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/user-guide/html/chapters/txlog.html +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/user-guide/html/chapters/usecases.html +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/user-guide/html/chapters/utilities.html +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/user-guide/html/chapters/views.html +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/user-guide/html/genindex.html +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/user-guide/html/index.html +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/user-guide/html/objects.inv +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/user-guide/html/search.html +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/docs/user-guide/html/searchindex.js +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/include/ampspy_bookmarkstore.hpp +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/include/ampspy_compat.h +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/include/ampspy_defs.hpp +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/include/ampspy_recoverypointadapter.hpp +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/include/ampspy_shims.hpp +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/include/ampspy_type_object.hpp +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/include/ampspy_types.hpp +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/samples/AMPSConsolePublisher.py +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/samples/AMPSConsoleSubscriber.py +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/samples/AMPSFIXBuilderPublisher.py +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/samples/AMPSFIXShredderSubscriber.py +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/samples/AMPSNVFIXBuilderPublisher.py +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/samples/AMPSNVFIXShredderSubscriber.py +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/samples/AMPSPublishForReplay.py +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/samples/AMPSQueueConsumer.py +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/samples/AMPSQueuePublisher.py +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/samples/AMPSSOWConsolePublisher.py +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/samples/AMPSSOWConsoleSubscriber.py +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/samples/AMPSSOWandSubscribeConsoleSubscriber.py +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/samples/AMPSSOWandSubscribeWithOOF.py +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/samples/AMPSSubscribeForReplay.py +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/samples/AMPSUpdateForOOF.py +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/samples/CompositeMessagePublisher.py +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/samples/CompositeMessageSubscriber.py +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/samples/RandomServerChooser.py +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/samples/sample.xml +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/src/ampspy_shims.cpp +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/src/ampspy_type_object.cpp +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/src/authenticator.cpp +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/src/bookmarkstore.cpp +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/src/client.cpp +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/src/cmessagehandler.cpp +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/src/command.cpp +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/src/compositemessagebuilder.cpp +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/src/compositemessageparser.cpp +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/src/conflatingrecoverypointadapter.cpp +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/src/cpp/include/amps/BookmarkStore.hpp +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/src/cpp/include/amps/Buffer.hpp +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/src/cpp/include/amps/CompositeMessageBuilder.hpp +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/src/cpp/include/amps/CompositeMessageParser.hpp +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/src/cpp/include/amps/DefaultServerChooser.hpp +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/src/cpp/include/amps/HAClient.hpp +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/src/cpp/include/amps/HAClientImpl.hpp +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/src/cpp/include/amps/HybridPublishStore.hpp +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/src/cpp/include/amps/LoggedBookmarkStore.hpp +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/src/cpp/include/amps/MMapBookmarkStore.hpp +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/src/cpp/include/amps/MemoryBookmarkStore.hpp +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/src/cpp/include/amps/MemoryPublishStore.hpp +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/src/cpp/include/amps/MemorySubscriptionManager.hpp +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/src/cpp/include/amps/MessageRouter.hpp +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/src/cpp/include/amps/PublishStore.hpp +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/src/cpp/include/amps/ReconnectDelayStrategy.hpp +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/src/cpp/include/amps/ReconnectDelayStrategyImpl.hpp +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/src/cpp/include/amps/RecoveryPoint.hpp +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/src/cpp/include/amps/RecoveryPointAdapter.hpp +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/src/cpp/include/amps/RingBookmarkStore.hpp +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/src/cpp/include/amps/SOWRecoveryPointAdapter.hpp +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/src/cpp/include/amps/ServerChooserImpl.hpp +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/src/cpp/include/amps/amps_generated.h +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/src/cpp/include/amps/amps_ssl.h +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/src/cpp/include/amps/ampsuri.h +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/src/cpp/include/amps/ampsver.h.in +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/src/cpp/include/amps/constants.hpp +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/src/cpp/src/amps_protocol.c +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/src/cpp/src/amps_protocol_generated.h +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/src/cpp/src/client.c +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/src/cpp/src/makefile +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/src/cpp/src/message.c +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/src/cpp/src/message_generated.h +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/src/cpp/src/transports.c +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/src/cpp/src/uri.c +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/src/failedwritehandler.cpp +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/src/fixbuilder.cpp +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/src/fixshredder.cpp +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/src/fixshredder_docs.h +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/src/haclient.cpp +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/src/hybridpublishstore.cpp +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/src/hybridpublishstore_docs.h +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/src/memorybookmarkstore.cpp +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/src/memorybookmarkstore_docs.h +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/src/memorypublishstore.cpp +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/src/memorypublishstore_docs.h +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/src/message.cpp +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/src/message_docs.h +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/src/messagestream.cpp +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/src/messagestream_docs.h +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/src/mmapbookmarkstore.cpp +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/src/nvfixshredder.cpp +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/src/publishstore.cpp +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/src/raw_wrapper.cpp +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/src/reason.cpp +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/src/recoverypoint.cpp +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/src/recoverypointadapter.cpp +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/src/ringbookmarkstore.cpp +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/src/serverchooser.cpp +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/src/sowrecoverypointadapter.cpp +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/src/store.cpp +0 -0
- {amps-python-client-5.3.4.2 → amps-python-client-5.3.4.3}/src/versioninfo.cpp +0 -0
|
@@ -80,7 +80,62 @@ int amps_win_spin_lock(LPCRITICAL_SECTION x);
|
|
|
80
80
|
#define AMPS_SPIN_LOCK_UNLIMITED(x) EnterCriticalSection(x)
|
|
81
81
|
#define AMPS_UNLOCK(x) LeaveCriticalSection(x)
|
|
82
82
|
#define AMPS_KILLLOCK(x) DeleteCriticalSection(x)
|
|
83
|
+
#else
|
|
84
|
+
#define GET_ERRNO (errno)
|
|
85
|
+
#define SOCK_ERRORCODE(x) x
|
|
86
|
+
#include <pthread.h>
|
|
87
|
+
|
|
88
|
+
static pthread_mutexattr_t _mutexattr_recursive;
|
|
89
|
+
#define AMPS_INITLOCK(x) { \
|
|
90
|
+
pthread_mutexattr_init(&_mutexattr_recursive); \
|
|
91
|
+
pthread_mutexattr_settype(&_mutexattr_recursive, PTHREAD_MUTEX_RECURSIVE);\
|
|
92
|
+
pthread_mutex_init(x, &_mutexattr_recursive); }
|
|
93
|
+
#define AMPS_LOCK(x) pthread_mutex_lock(x)
|
|
94
|
+
#define AMPS_SPIN_LOCK(x) amps_spin_lock_counted(x)
|
|
95
|
+
#define AMPS_SPIN_LOCK_UNLIMITED(x) amps_spin_lock_unlimited(x)
|
|
96
|
+
#define AMPS_UNLOCK(x) pthread_mutex_unlock(x)
|
|
97
|
+
#define AMPS_KILLLOCK(x) pthread_mutex_destroy(x)
|
|
98
|
+
#endif
|
|
99
|
+
|
|
100
|
+
#ifdef AMPS_CPP_COUNT_THREADS
|
|
101
|
+
#define AMPS_INC_THREAD_COUNT(x) AMPS_FETCH_ADD(x, 1)
|
|
102
|
+
#else
|
|
103
|
+
#define AMPS_INC_THREAD_COUNT(x)
|
|
104
|
+
#endif
|
|
105
|
+
|
|
106
|
+
#ifdef _WIN32
|
|
107
|
+
INIT_ONCE ampsTcpsThreadKeyOnce = INIT_ONCE_STATIC_INIT;
|
|
108
|
+
DWORD ampsTcpsThreadKey = TLS_OUT_OF_INDEXES;
|
|
109
|
+
|
|
110
|
+
void amps_tcps_delete_key(void)
|
|
111
|
+
{
|
|
112
|
+
TlsFree(ampsTcpsThreadKey);
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
BOOL CALLBACK amps_tcps_init_key(PINIT_ONCE pKeyOnce, PVOID unused, PVOID* unused2)
|
|
116
|
+
{
|
|
117
|
+
if ((ampsTcpsThreadKey = TlsAlloc()) == TLS_OUT_OF_INDEXES)
|
|
118
|
+
{
|
|
119
|
+
return FALSE;
|
|
120
|
+
}
|
|
121
|
+
atexit(amps_tcps_delete_key);
|
|
122
|
+
return TRUE;
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
DWORD amps_tcps_get_thread_key(void)
|
|
126
|
+
{
|
|
127
|
+
InitOnceExecuteOnce(&sTcpsThreadKeyOnce, amps_tcps_init_key, NULL, NULL);
|
|
128
|
+
return ampsTcpsThreadKey;
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
void amps_tcps_set_thread_key(void* pVal)
|
|
132
|
+
{
|
|
133
|
+
InitOnceExecuteOnce(&sTcpsThreadKeyOnce, amps_tcps_init_key, NULL, NULL);
|
|
134
|
+
TlsSetValue(ampsTcpsThreadKey, pVal);
|
|
135
|
+
}
|
|
136
|
+
|
|
83
137
|
int tcpsThreadTimeoutMillis = 10000;
|
|
138
|
+
|
|
84
139
|
#define AMPS_JOIN_DECLARE() \
|
|
85
140
|
DWORD tid = (DWORD)0; \
|
|
86
141
|
HANDLE tidH = (HANDLE)0
|
|
@@ -92,51 +147,90 @@ int tcpsThreadTimeoutMillis = 10000;
|
|
|
92
147
|
{ \
|
|
93
148
|
if (tid != GetCurrentThreadId()) \
|
|
94
149
|
{ \
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
150
|
+
AMPS_INC_THREAD_COUNT(&s_thread_join_count); \
|
|
151
|
+
WaitForSingleObject(tidH, tcpsThreadTimeoutMillis); \
|
|
152
|
+
CloseHandle(tidH); \
|
|
153
|
+
} \
|
|
154
|
+
else \
|
|
155
|
+
{ \
|
|
156
|
+
amps_tcps_set_thread_key((void*)tidH); \
|
|
99
157
|
} \
|
|
100
|
-
CloseHandle(tidH); \
|
|
101
158
|
}
|
|
102
159
|
#define AMPS_SLEEP(x) \
|
|
103
160
|
Sleep(x)
|
|
104
161
|
#define SHUT_RDWR SD_BOTH
|
|
105
162
|
#else
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
#include <pthread.h>
|
|
163
|
+
pthread_once_t ampsTcpsThreadKeyOnce = PTHREAD_ONCE_INIT;
|
|
164
|
+
pthread_key_t ampsTcpsThreadKey;
|
|
109
165
|
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
166
|
+
void amps_tcps_detach_thread(void* vpSelf)
|
|
167
|
+
{
|
|
168
|
+
pthread_detach((pthread_t)vpSelf);
|
|
169
|
+
AMPS_INC_THREAD_COUNT(&s_thread_detach_count);
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
void amps_tcps_delete_thread_key(void)
|
|
173
|
+
{
|
|
174
|
+
pthread_key_delete(ampsTcpsThreadKey);
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
void amps_tcps_init_thread_key()
|
|
178
|
+
{
|
|
179
|
+
pthread_key_create(&sTcpsThreadKey, amps_tcps_detach_thread);
|
|
180
|
+
atexit(amps_tcps_delete_thread_key);
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
void amps_tcps_set_thread_key(void* pVal)
|
|
184
|
+
{
|
|
185
|
+
(void) pthread_once(&sTcpsThreadKeyOnce, amps_tcps_init_thread_key);
|
|
186
|
+
pthread_setspecific(ampsTcpsThreadKey, pVal);
|
|
187
|
+
}
|
|
118
188
|
|
|
119
|
-
#define AMPS_UNLOCK(x) pthread_mutex_unlock(x)
|
|
120
|
-
#define AMPS_KILLLOCK(x) pthread_mutex_destroy(x)
|
|
121
189
|
#define AMPS_JOIN_DECLARE() \
|
|
122
190
|
pthread_t tid = (pthread_t)0;
|
|
123
191
|
|
|
124
192
|
#if __STDC_VERSION__ >= 201100
|
|
125
193
|
#define AMPS_JOIN(x) \
|
|
126
194
|
tid = atomic_exchange((&x), (pthread_t)0); \
|
|
127
|
-
if(tid!=(pthread_t)0
|
|
195
|
+
if(tid != (pthread_t)0) \
|
|
128
196
|
{ \
|
|
129
|
-
|
|
197
|
+
if(tid != pthread_self()) \
|
|
198
|
+
{ \
|
|
199
|
+
AMPS_INC_THREAD_COUNT(&s_thread_join_count); \
|
|
200
|
+
pthread_join(tid, NULL); \
|
|
201
|
+
} \
|
|
202
|
+
else \
|
|
203
|
+
{ \
|
|
204
|
+
amps_tcps_set_thread_key((void*)tid); \
|
|
205
|
+
} \
|
|
206
|
+
} \
|
|
207
|
+
else \
|
|
208
|
+
{ \
|
|
209
|
+
/* Give recv thread a chance to exit in case it hasn't yet */ \
|
|
210
|
+
usleep(10); \
|
|
130
211
|
}
|
|
131
212
|
#else
|
|
132
213
|
#define AMPS_JOIN(x) \
|
|
133
214
|
tid = AMPS_FETCH_ADD(&x, (pthread_t)0); \
|
|
134
|
-
if(tid!=(pthread_t)0
|
|
215
|
+
if(tid != (pthread_t)0) \
|
|
135
216
|
{ \
|
|
136
|
-
if(__sync_bool_compare_and_swap(&x, tid,
|
|
217
|
+
if(__sync_bool_compare_and_swap(&x, tid, 0)) \
|
|
137
218
|
{ \
|
|
138
|
-
|
|
219
|
+
if(tid != pthread_self()) \
|
|
220
|
+
{ \
|
|
221
|
+
AMPS_INC_THREAD_COUNT(&s_thread_join_count); \
|
|
222
|
+
pthread_join(tid, NULL); \
|
|
223
|
+
} \
|
|
224
|
+
else \
|
|
225
|
+
{ \
|
|
226
|
+
amps_tcps_set_thread_key((void*)tid); \
|
|
227
|
+
} \
|
|
139
228
|
} \
|
|
229
|
+
} \
|
|
230
|
+
else \
|
|
231
|
+
{ \
|
|
232
|
+
/* Give recv thread a chance to exit in case it hasn't yet */ \
|
|
233
|
+
usleep(10); \
|
|
140
234
|
}
|
|
141
235
|
#endif
|
|
142
236
|
|
|
@@ -904,6 +998,7 @@ amps_result amps_tcps_connect(amps_handle transport, const amps_char* address)
|
|
|
904
998
|
* important to do it in two steps, since we use me->thread as a poor-man's cancellation mechanism */
|
|
905
999
|
if (me->threadH)
|
|
906
1000
|
{
|
|
1001
|
+
AMPS_INC_THREAD_COUNT(&s_thread_create_count);
|
|
907
1002
|
ResumeThread(me->threadH);
|
|
908
1003
|
}
|
|
909
1004
|
else
|
|
@@ -926,6 +1021,7 @@ amps_result amps_tcps_connect(amps_handle transport, const amps_char* address)
|
|
|
926
1021
|
result = AMPS_E_MEMORY;
|
|
927
1022
|
goto error;
|
|
928
1023
|
}
|
|
1024
|
+
AMPS_INC_THREAD_COUNT(&s_thread_create_count);
|
|
929
1025
|
#endif
|
|
930
1026
|
for (i = 0; i < AMPS_THREAD_START_TIMEOUT && me->threadCreatedCallbackResult == -1; ++i)
|
|
931
1027
|
{
|
|
@@ -941,6 +1037,7 @@ amps_result amps_tcps_connect(amps_handle transport, const amps_char* address)
|
|
|
941
1037
|
{
|
|
942
1038
|
fd = AMPS_IEX_GET(&me->fd, AMPS_INVALID_SOCKET);
|
|
943
1039
|
ssl = (_amps_SSL*)AMPS_IEX_GET(&me->ssl, 0);
|
|
1040
|
+
AMPS_JOIN(me->thread);
|
|
944
1041
|
amps_tcps_set_error(me, "Thread creation callback failed");
|
|
945
1042
|
}
|
|
946
1043
|
|
|
@@ -1249,23 +1346,27 @@ amps_result amps_tcps_handle_disconnect(
|
|
|
1249
1346
|
goto error;
|
|
1250
1347
|
}
|
|
1251
1348
|
|
|
1252
|
-
#
|
|
1349
|
+
#ifdef _WIN32
|
|
1350
|
+
HANDLE tidH = (AMPS_CURRENT_THREAD() == me->thread) ? me->threadH : NULL;
|
|
1351
|
+
#else
|
|
1253
1352
|
pthread_setcancelstate(PTHREAD_CANCEL_DISABLE, &cancelState);
|
|
1353
|
+
void* vpTid = (void*)(pthread_self());
|
|
1254
1354
|
#endif
|
|
1255
1355
|
/* Call the disconect handler. */
|
|
1256
1356
|
result = me->disconnectHandler(me, me->disconnectHandlerUserData);
|
|
1257
|
-
#ifndef _WIN32
|
|
1258
|
-
pthread_setcancelstate(cancelState, &unusedCancelState);
|
|
1259
|
-
#endif
|
|
1260
1357
|
if (result == AMPS_E_OK)
|
|
1261
1358
|
{
|
|
1262
|
-
|
|
1359
|
+
#ifdef _WIN32
|
|
1360
|
+
if (tidH)
|
|
1361
|
+
{
|
|
1362
|
+
amps_tcps_set_thread_key(tidH);
|
|
1363
|
+
}
|
|
1364
|
+
#else
|
|
1365
|
+
amps_tcps_set_thread_key(vpTid);
|
|
1366
|
+
#endif
|
|
1263
1367
|
}
|
|
1264
1368
|
|
|
1265
1369
|
error:
|
|
1266
|
-
#ifndef _WIN32
|
|
1267
|
-
pthread_setcancelstate(PTHREAD_CANCEL_DISABLE, &cancelState);
|
|
1268
|
-
#endif
|
|
1269
1370
|
AMPS_UNLOCK(&me->lock);
|
|
1270
1371
|
#ifndef _WIN32
|
|
1271
1372
|
pthread_cleanup_pop(0);
|
|
@@ -1503,12 +1604,12 @@ int amps_tcps_locked_read(amps_tcps_t* me_,
|
|
|
1503
1604
|
#ifdef _WIN32
|
|
1504
1605
|
DWORD amps_tcps_threaded_reader(void* userData)
|
|
1505
1606
|
{
|
|
1506
|
-
|
|
1507
|
-
HANDLE
|
|
1607
|
+
AMPS_THREAD_ID tid = AMPS_CURRENT_THREAD();
|
|
1608
|
+
HANDLE tidH = GetCurrentThread();
|
|
1508
1609
|
amps_tcps_t* me = (amps_tcps_t*)userData;
|
|
1509
1610
|
if (me->threadCreatedCallback)
|
|
1510
1611
|
{
|
|
1511
|
-
amps_result result = me->threadCreatedCallback(
|
|
1612
|
+
amps_result result = me->threadCreatedCallback(tidH,
|
|
1512
1613
|
me->threadCreatedCallbackUserData);
|
|
1513
1614
|
AMPS_IEX(&me->threadCreatedCallbackResult, (long)result);
|
|
1514
1615
|
if (result != AMPS_E_OK)
|
|
@@ -1525,8 +1626,9 @@ void* amps_tcps_threaded_reader(void* userData)
|
|
|
1525
1626
|
{
|
|
1526
1627
|
int unusedCancelState = 0;
|
|
1527
1628
|
amps_tcps_t* me = (amps_tcps_t*)userData;
|
|
1629
|
+
AMPS_THREAD_ID tid = AMPS_CURRENT_THREAD();
|
|
1528
1630
|
/* Wait for pthread_create to set me->thread */
|
|
1529
|
-
while (me->thread !=
|
|
1631
|
+
while (me->thread != tid
|
|
1530
1632
|
&& !me->disconnecting
|
|
1531
1633
|
&& !me->destroying)
|
|
1532
1634
|
{
|
|
@@ -1547,17 +1649,18 @@ void* amps_tcps_threaded_reader(void* userData)
|
|
|
1547
1649
|
AMPS_IEX(&me->threadCreatedCallbackResult, (long)AMPS_E_OK);
|
|
1548
1650
|
}
|
|
1549
1651
|
#endif
|
|
1550
|
-
unsigned char* buffer, *newBuffer, *end, *readPoint
|
|
1652
|
+
unsigned char* buffer = 0, *newBuffer = 0, *end = 0, *readPoint = 0;
|
|
1653
|
+
unsigned char* parsePoint = 0;
|
|
1551
1654
|
|
|
1552
|
-
unsigned int msglenN;
|
|
1553
|
-
unsigned long msglen, currentPosition, bytesRead = 0;
|
|
1554
|
-
int received;
|
|
1655
|
+
unsigned int msglenN = 0;
|
|
1656
|
+
unsigned long msglen = 0, currentPosition = 0, bytesRead = 0;
|
|
1657
|
+
int received = 0;
|
|
1555
1658
|
int cancelState = 0;
|
|
1556
1659
|
const size_t BUFFER_SIZE = 16 * 1024;
|
|
1557
1660
|
const unsigned MAX_MESSAGE_SIZE = 1024 * 1024 * 1024;
|
|
1558
1661
|
amps_uint64_t lastReadTime = 0;
|
|
1559
1662
|
amps_uint64_t lastIdleTime = 0;
|
|
1560
|
-
amps_handle message;
|
|
1663
|
+
amps_handle message = 0;
|
|
1561
1664
|
|
|
1562
1665
|
/* capture the connection version we are using now. */
|
|
1563
1666
|
unsigned connectionVersion = me->connectionVersion;
|
|
@@ -1757,33 +1860,44 @@ cleanup:
|
|
|
1757
1860
|
#endif
|
|
1758
1861
|
amps_message_destroy(message);
|
|
1759
1862
|
free(buffer);
|
|
1760
|
-
if (me->destroying)
|
|
1761
|
-
{
|
|
1762
|
-
return 0;
|
|
1763
|
-
}
|
|
1764
1863
|
// If exiting as the reader thread, clear me->thread
|
|
1765
1864
|
// Unless me-thread is 0, we're not getting joined, so detach
|
|
1766
|
-
AMPS_THREAD_ID tid = AMPS_CURRENT_THREAD();
|
|
1767
1865
|
if (me->threadExitCallback)
|
|
1768
1866
|
{
|
|
1769
1867
|
me->threadExitCallback(tid, me->threadExitCallbackUserData);
|
|
1770
1868
|
}
|
|
1771
1869
|
#if __STDC_VERSION__ >= 201100
|
|
1772
|
-
|
|
1870
|
+
AMPS_THREAD_ID mytid = tid;
|
|
1871
|
+
bool swapped = atomic_compare_exchange_strong(&(me->thread), &tid, 0);
|
|
1872
|
+
if (swapped || me->thread != 0)
|
|
1773
1873
|
#elif defined(_WIN32)
|
|
1874
|
+
// This returns the initial value of me->thread
|
|
1774
1875
|
if (InterlockedCompareExchange((volatile unsigned int*)(&(me->thread)),
|
|
1775
|
-
(unsigned int)tid, (unsigned int)0))
|
|
1876
|
+
(unsigned int)tid, (unsigned int)0) != 0)
|
|
1776
1877
|
#else
|
|
1878
|
+
AMPS_THREAD_ID mytid = tid;
|
|
1777
1879
|
int swapped = (int)__sync_bool_compare_and_swap(&(me->thread), tid, 0);
|
|
1778
1880
|
if (swapped || me->thread != 0)
|
|
1779
1881
|
#endif
|
|
1780
1882
|
{
|
|
1883
|
+
AMPS_INC_THREAD_COUNT(&s_thread_detach_count);
|
|
1781
1884
|
#ifdef _WIN32
|
|
1782
1885
|
CloseHandle((HANDLE)(AMPS_IEX(&(me->threadH), 0)));
|
|
1783
1886
|
#else
|
|
1784
|
-
pthread_detach(
|
|
1887
|
+
pthread_detach(mytid);
|
|
1785
1888
|
#endif
|
|
1889
|
+
amps_tcps_set_thread_key(NULL);
|
|
1786
1890
|
}
|
|
1891
|
+
#ifdef _WIN32
|
|
1892
|
+
else
|
|
1893
|
+
{
|
|
1894
|
+
tidH = TlsGetValue(amps_tcps_get_thread_key());
|
|
1895
|
+
if (tidH != NULL)
|
|
1896
|
+
{
|
|
1897
|
+
CloseHandle(tidH);
|
|
1898
|
+
}
|
|
1899
|
+
}
|
|
1900
|
+
#endif
|
|
1787
1901
|
|
|
1788
1902
|
return 0;
|
|
1789
1903
|
}
|
|
@@ -1798,6 +1912,12 @@ amps_tcps_attempt_reconnect(amps_handle transport, unsigned version)
|
|
|
1798
1912
|
version = me->connectionVersion;
|
|
1799
1913
|
}
|
|
1800
1914
|
res = amps_tcps_handle_disconnect(me, version);
|
|
1915
|
+
if (res == AMPS_E_OK)
|
|
1916
|
+
{
|
|
1917
|
+
// We don't want non-receive threads detaching
|
|
1918
|
+
amps_tcps_set_thread_key(NULL);
|
|
1919
|
+
res = AMPS_E_RETRY;
|
|
1920
|
+
}
|
|
1801
1921
|
return res;
|
|
1802
1922
|
}
|
|
1803
1923
|
|
|
@@ -42,8 +42,42 @@ static pthread_mutexattr_t _mutexattr_recursive;
|
|
|
42
42
|
|
|
43
43
|
#define AMPS_UNLOCK(x) pthread_mutex_unlock(x)
|
|
44
44
|
#define AMPS_KILLLOCK(x) pthread_mutex_destroy(x)
|
|
45
|
+
|
|
46
|
+
#ifdef AMPS_CPP_COUNT_THREADS
|
|
47
|
+
#define AMPS_INC_THREAD_COUNT(x) AMPS_FETCH_ADD(x, 1)
|
|
48
|
+
#else
|
|
49
|
+
#define AMPS_INC_THREAD_COUNT(x)
|
|
50
|
+
#endif
|
|
51
|
+
|
|
52
|
+
pthread_once_t ampsUnixThreadKeyOnce = PTHREAD_ONCE_INIT;
|
|
53
|
+
pthread_key_t ampsUnixThreadKey;
|
|
54
|
+
|
|
55
|
+
void amps_unix_detach_thread(void* vpSelf)
|
|
56
|
+
{
|
|
57
|
+
pthread_detach((pthread_t)vpSelf);
|
|
58
|
+
AMPS_INC_THREAD_COUNT(&s_thread_detach_count);
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
void amps_unix_delete_thread_key(void)
|
|
62
|
+
{
|
|
63
|
+
pthread_key_delete(ampsUnixThreadKey);
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
void amps_unix_init_thread_key()
|
|
67
|
+
{
|
|
68
|
+
pthread_key_create(&sUnixThreadKey, amps_unix_detach_thread);
|
|
69
|
+
atexit(amps_unix_delete_thread_key);
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
void amps_unix_set_thread_key(void* pVal)
|
|
73
|
+
{
|
|
74
|
+
(void) pthread_once(&sUnixThreadKeyOnce, amps_unix_init_thread_key);
|
|
75
|
+
pthread_setspecific(ampsUnixThreadKey, pVal);
|
|
76
|
+
}
|
|
77
|
+
|
|
45
78
|
#if __STDC_VERSION__ >= 201100
|
|
46
79
|
#include <stdatomic.h>
|
|
80
|
+
#include <stdbool.h>
|
|
47
81
|
#define AMPS_IEX(ptr, value) atomic_exchange_explicit((ptr), (value), memory_order_acq_rel)
|
|
48
82
|
#define AMPS_IEX_GET(ptr, value) atomic_exchange_explicit((ptr), (value), memory_order_acq_rel)
|
|
49
83
|
#define AMPS_IEX_LONG(ptr, value) atomic_exchange_explicit((ptr), (value), memory_order_acq_rel)
|
|
@@ -51,9 +85,22 @@ static pthread_mutexattr_t _mutexattr_recursive;
|
|
|
51
85
|
#define AMPS_FETCH_SUB(ptr, value) atomic_fetch_sub_explicit((ptr), (value), memory_order_acq_rel)
|
|
52
86
|
#define AMPS_JOIN(x) \
|
|
53
87
|
tid = atomic_exchange((&x), (pthread_t)0); \
|
|
54
|
-
if(tid!=(pthread_t)0
|
|
88
|
+
if(tid != (pthread_t)0) \
|
|
89
|
+
{ \
|
|
90
|
+
if(tid != pthread_self()) \
|
|
91
|
+
{ \
|
|
92
|
+
AMPS_INC_THREAD_COUNT(&s_thread_join_count); \
|
|
93
|
+
pthread_join(tid, NULL); \
|
|
94
|
+
} \
|
|
95
|
+
else \
|
|
96
|
+
{ \
|
|
97
|
+
amps_unix_set_thread_key((void*)tid); \
|
|
98
|
+
} \
|
|
99
|
+
} \
|
|
100
|
+
else \
|
|
55
101
|
{ \
|
|
56
|
-
|
|
102
|
+
/* Give recv thread a chance to exit in case it hasn't yet */ \
|
|
103
|
+
usleep(10); \
|
|
57
104
|
}
|
|
58
105
|
#else
|
|
59
106
|
#define AMPS_IEX(ptr, value) (void)__sync_lock_test_and_set((ptr), (value))
|
|
@@ -64,12 +111,25 @@ static pthread_mutexattr_t _mutexattr_recursive;
|
|
|
64
111
|
|
|
65
112
|
#define AMPS_JOIN(x) \
|
|
66
113
|
tid = AMPS_FETCH_ADD(&x, (pthread_t)0); \
|
|
67
|
-
if(tid!=(pthread_t)0
|
|
114
|
+
if(tid != (pthread_t)0) \
|
|
68
115
|
{ \
|
|
69
|
-
if(__sync_bool_compare_and_swap(&x, tid,
|
|
116
|
+
if(__sync_bool_compare_and_swap(&x, tid, 0)) \
|
|
70
117
|
{ \
|
|
71
|
-
|
|
118
|
+
if(tid != pthread_self()) \
|
|
119
|
+
{ \
|
|
120
|
+
AMPS_INC_THREAD_COUNT(&s_thread_join_count); \
|
|
121
|
+
pthread_join(tid, NULL); \
|
|
122
|
+
} \
|
|
123
|
+
else \
|
|
124
|
+
{ \
|
|
125
|
+
amps_unix_set_thread_key((void*)tid); \
|
|
126
|
+
} \
|
|
72
127
|
} \
|
|
128
|
+
} \
|
|
129
|
+
else \
|
|
130
|
+
{ \
|
|
131
|
+
/* Give recv thread a chance to exit in case it hasn't yet */ \
|
|
132
|
+
usleep(10); \
|
|
73
133
|
}
|
|
74
134
|
#endif
|
|
75
135
|
#define AMPS_JOIN_DECLARE() \
|
|
@@ -425,6 +485,7 @@ amps_result amps_unix_connect(amps_handle transport, amps_char* address)
|
|
|
425
485
|
amps_unix_set_error(me, "Failed to create thread for receive");
|
|
426
486
|
result = AMPS_E_MEMORY; goto error;
|
|
427
487
|
}
|
|
488
|
+
AMPS_INC_THREAD_COUNT(&s_thread_create_count);
|
|
428
489
|
for (int i = 0; i < AMPS_THREAD_START_TIMEOUT && me->threadCreatedCallbackResult == -1; ++i)
|
|
429
490
|
{
|
|
430
491
|
AMPS_SLEEP(4);
|
|
@@ -444,7 +505,7 @@ error:
|
|
|
444
505
|
shutdown(fd, SHUT_RDWR);
|
|
445
506
|
closesocket(fd);
|
|
446
507
|
}
|
|
447
|
-
me->thread
|
|
508
|
+
AMPS_JOIN(me->thread);
|
|
448
509
|
}
|
|
449
510
|
AMPS_UNLOCK(&me->lock);
|
|
450
511
|
pthread_cleanup_pop(0);
|
|
@@ -570,12 +631,12 @@ amps_result amps_unix_handle_disconnect(
|
|
|
570
631
|
}
|
|
571
632
|
|
|
572
633
|
pthread_setcancelstate(PTHREAD_CANCEL_DISABLE, &cancelState);
|
|
573
|
-
/* Call the
|
|
634
|
+
/* Call the disconnect handler. */
|
|
574
635
|
result = me->disconnectHandler(me, me->disconnectHandlerUserData);
|
|
575
636
|
pthread_setcancelstate(cancelState, &unusedCancelState);
|
|
576
637
|
if (result == AMPS_E_OK)
|
|
577
638
|
{
|
|
578
|
-
|
|
639
|
+
amps_unix_set_thread_key((void*)pthread_self());
|
|
579
640
|
}
|
|
580
641
|
error:
|
|
581
642
|
pthread_setcancelstate(PTHREAD_CANCEL_DISABLE, &cancelState);
|
|
@@ -692,24 +753,25 @@ void* amps_unix_threaded_reader(void* userData)
|
|
|
692
753
|
{
|
|
693
754
|
int unusedCancelState = 0;
|
|
694
755
|
amps_unix_t* me = (amps_unix_t*)userData;
|
|
695
|
-
|
|
696
|
-
unsigned
|
|
697
|
-
unsigned
|
|
698
|
-
|
|
699
|
-
ssize_t
|
|
756
|
+
pthread_t tid = pthread_self();
|
|
757
|
+
unsigned char* buffer = 0, *newBuffer = 0, *end = 0, *readPoint = 0, *parsePoint = 0;
|
|
758
|
+
unsigned int msglenN = 0;
|
|
759
|
+
unsigned long msglen = 0, currentPosition = 0, bytesRead = 0;
|
|
760
|
+
ssize_t received = 0;
|
|
761
|
+
ssize_t recv_result = 0;
|
|
700
762
|
int cancelState = 0;
|
|
701
763
|
const size_t BUFFER_SIZE = 16 * 1024;
|
|
702
764
|
const unsigned MAX_MESSAGE_SIZE = 1024 * 1024 * 1024;
|
|
703
765
|
amps_uint64_t lastReadTime = 0;
|
|
704
766
|
amps_uint64_t lastIdleTime = 0;
|
|
705
|
-
amps_handle message;
|
|
767
|
+
amps_handle message = 0;
|
|
706
768
|
|
|
707
769
|
/* capture the connection version we are using now. */
|
|
708
770
|
unsigned connectionVersion = me->connectionVersion;
|
|
709
771
|
AMPS_SOCKET fd = me->fd;
|
|
710
772
|
|
|
711
773
|
/* Wait for pthread_create to set me->thread */
|
|
712
|
-
while (me->thread !=
|
|
774
|
+
while (me->thread != tid
|
|
713
775
|
&& !me->disconnecting
|
|
714
776
|
&& !me->destroying)
|
|
715
777
|
{
|
|
@@ -894,29 +956,23 @@ cleanup:
|
|
|
894
956
|
pthread_cleanup_pop(0);
|
|
895
957
|
amps_message_destroy(message);
|
|
896
958
|
free(buffer);
|
|
897
|
-
if (me->destroying)
|
|
898
|
-
{
|
|
899
|
-
return 0;
|
|
900
|
-
}
|
|
901
959
|
// If exiting as the reader thread, clear me->thread
|
|
902
960
|
// Unless me-thread is 0, we're not getting joined, so detach
|
|
903
|
-
pthread_t tid = pthread_self();
|
|
904
961
|
if (me->threadExitCallback)
|
|
905
962
|
{
|
|
906
963
|
me->threadExitCallback(tid, me->threadExitCallbackUserData);
|
|
907
964
|
}
|
|
965
|
+
pthread_t mytid = tid;
|
|
908
966
|
#if __STDC_VERSION__ >= 201100
|
|
909
|
-
|
|
967
|
+
bool swapped = atomic_compare_exchange_strong(&(me->thread), &tid, 0);
|
|
910
968
|
#else
|
|
911
969
|
int swapped = (int)__sync_bool_compare_and_swap(&(me->thread), tid, 0);
|
|
912
|
-
if (swapped || me->thread != 0)
|
|
913
970
|
#endif
|
|
971
|
+
if (swapped || me->thread != 0)
|
|
914
972
|
{
|
|
915
|
-
|
|
916
|
-
|
|
917
|
-
|
|
918
|
-
{
|
|
919
|
-
pthread_detach(tid);
|
|
973
|
+
AMPS_INC_THREAD_COUNT(&s_thread_detach_count);
|
|
974
|
+
pthread_detach(mytid);
|
|
975
|
+
amps_unix_set_thread_key(NULL);
|
|
920
976
|
}
|
|
921
977
|
return 0;
|
|
922
978
|
}
|
|
@@ -931,6 +987,11 @@ amps_unix_attempt_reconnect(amps_handle transport, unsigned version)
|
|
|
931
987
|
version = me->connectionVersion;
|
|
932
988
|
}
|
|
933
989
|
res = amps_unix_handle_disconnect(transport, version);
|
|
990
|
+
if (res == AMPS_E_OK)
|
|
991
|
+
{
|
|
992
|
+
amps_unix_set_thread_key(NULL);
|
|
993
|
+
res = AMPS_E_RETRY;
|
|
994
|
+
}
|
|
934
995
|
return res;
|
|
935
996
|
}
|
|
936
997
|
|
|
@@ -84,35 +84,29 @@ namespace ampspy
|
|
|
84
84
|
NONE;
|
|
85
85
|
}
|
|
86
86
|
|
|
87
|
-
static const char* docstring =
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
" up\" and abandoning the connection attempt.\n\n"
|
|
111
|
-
":param jitter: The amount of 'jitter' to apply when\n"
|
|
112
|
-
" calculating a delay time, measured in multiples\n"
|
|
113
|
-
" of the initial delay. Jitter is used to reduce\n"
|
|
114
|
-
" the number of simultaneous reconnects that may\n"
|
|
115
|
-
" be issued from multiple clients.\n\n\n";
|
|
87
|
+
static const char* docstring = R"docstring(ExponentialDelayStrategy(initial_delay=200, maximum_delay=20000, backoff_exponent=2.0, maximum_retry_time=0, jitter=1.0)
|
|
88
|
+
``ExponentialDelayStrategy`` is an implementation that exponentially backs off when reconnecting to
|
|
89
|
+
the same server, with a maximum time to retry before it gives up entirely.
|
|
90
|
+
|
|
91
|
+
By default, an ``ExponentialDelayStrategy`` has an initial delay of 200 ms, a maximum delay of 20 seconds,
|
|
92
|
+
a backoff exponent of 2.0, and has no limit to the amount of time to retry the connection.
|
|
93
|
+
|
|
94
|
+
**Constructor Arguments:**
|
|
95
|
+
|
|
96
|
+
:param initial_delay: The time (in milliseconds) to wait before reconnecting to a server for the first
|
|
97
|
+
time after a failed connection.
|
|
98
|
+
:param maximum_delay: The maximum time to wait for any reconnect attempt (milliseconds).
|
|
99
|
+
Exponential backoff will not exceed this maximum.
|
|
100
|
+
:param backoff_exponent: The exponent to use for calculating the next delay time. For example, if the
|
|
101
|
+
initial time is 200ms and the exponent is 2.0, the next delay will be 400ms,
|
|
102
|
+
then 800ms, etc.
|
|
103
|
+
:param maximum_retry_time: The maximum time (milliseconds) to allow reconnect attempts to continue
|
|
104
|
+
without a successful connection, before 'giving up' and abandoning the
|
|
105
|
+
connection attempt.
|
|
106
|
+
:param jitter: The amount of 'jitter' to apply when calculating a delay time, measured in multiples
|
|
107
|
+
of the initial delay. Jitter is used to reduce the number of simultaneous reconnects
|
|
108
|
+
that may be issued from multiple clients.
|
|
109
|
+
)docstring";
|
|
116
110
|
|
|
117
111
|
void add_types(PyObject* module_)
|
|
118
112
|
{
|
|
@@ -78,18 +78,19 @@ namespace ampspy
|
|
|
78
78
|
NONE;
|
|
79
79
|
}
|
|
80
80
|
|
|
81
|
-
static const char* docstring =
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
81
|
+
static const char* docstring = R"docstring(FixedDelayStrategy(initial_delay, maximum)
|
|
82
|
+
``FixedDelayStrategy`` is a reconnect delay strategy implementation that waits a
|
|
83
|
+
fixed amount of time before retrying a connection.
|
|
84
|
+
|
|
85
|
+
By default, a ``FixedDelayStrategy`` waits for 200ms between connection attempts
|
|
86
|
+
and does not have a maximum timeout.
|
|
87
|
+
|
|
88
|
+
**Constructor Arguments:**
|
|
89
|
+
|
|
90
|
+
:param initial_delay: The time (in milliseconds) to wait before reconnecting to a
|
|
91
|
+
server for the first time after a failed connection.
|
|
92
|
+
:param maximum: The maximum time (in milliseconds) to keep retrying before giving up.
|
|
93
|
+
)docstring";
|
|
93
94
|
|
|
94
95
|
void add_types(PyObject* module_)
|
|
95
96
|
{
|