From 63103f4dd5746919a9a79cddd799b40d5a9bdda6 Mon Sep 17 00:00:00 2001 From: Dirk Thomas Date: Mon, 27 Feb 2017 13:49:03 -0800 Subject: [PATCH 01/72] fix open mode on Windows --- tools/rosbag_storage/src/chunked_file.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/tools/rosbag_storage/src/chunked_file.cpp b/tools/rosbag_storage/src/chunked_file.cpp index 0e90b02905..533c37b78a 100644 --- a/tools/rosbag_storage/src/chunked_file.cpp +++ b/tools/rosbag_storage/src/chunked_file.cpp @@ -86,13 +86,14 @@ void ChunkedFile::open(string const& filename, string const& mode) { // Open the file if (mode == "r+b") { - // Read + write requires file to exists. Create a new file if it doesn't exist. + // check if file already exists #if defined(_MSC_VER) && (_MSC_VER >= 1400 ) fopen_s( &file_, filename.c_str(), "r" ); #else file_ = fopen(filename.c_str(), "r"); #endif if (file_ == NULL) + // create an empty file and open it for update #if defined(_MSC_VER) && (_MSC_VER >= 1400 ) fopen_s( &file_, filename.c_str(), "w+b" ); #else @@ -100,8 +101,9 @@ void ChunkedFile::open(string const& filename, string const& mode) { #endif else { fclose(file_); + // open existing file for update #if defined(_MSC_VER) && (_MSC_VER >= 1400 ) - fopen_s( &file_, filename.c_str(), "w+b" ); + fopen_s( &file_, filename.c_str(), "r+b" ); #else file_ = fopen(filename.c_str(), "r+b"); #endif From 3e6767fe544175ec91a1326f2bd421ecca2fe07f Mon Sep 17 00:00:00 2001 From: Vincent Rabaud Date: Fri, 10 Mar 2017 17:51:27 +0100 Subject: [PATCH 02/72] Fix BZip2 inclusion --- tools/rosbag/CMakeLists.txt | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/tools/rosbag/CMakeLists.txt b/tools/rosbag/CMakeLists.txt index c4d780e6c3..286b14f2b4 100644 --- a/tools/rosbag/CMakeLists.txt +++ b/tools/rosbag/CMakeLists.txt @@ -14,7 +14,9 @@ catkin_python_setup() # Support large bags (>2GB) on 32-bit systems add_definitions(-D_FILE_OFFSET_BITS=64) -include_directories(include ${catkin_INCLUDE_DIRS} ${Boost_INCLUDE_DIRS}) +include_directories(include ${catkin_INCLUDE_DIRS} ${Boost_INCLUDE_DIRS} + ${BZIP2_INCLUDE_DIR} +) catkin_package( LIBRARIES rosbag @@ -26,7 +28,9 @@ add_library(rosbag src/recorder.cpp src/time_translator.cpp) -target_link_libraries(rosbag ${catkin_LIBRARIES} ${Boost_LIBRARIES}) +target_link_libraries(rosbag ${catkin_LIBRARIES} ${Boost_LIBRARIES} + ${BZIP2_LIBRARIES} +) add_executable(record src/record.cpp) target_link_libraries(record rosbag) From ac213f98785b93baa2e95ea912f8719e32292ad3 Mon Sep 17 00:00:00 2001 From: Mike Purvis Date: Fri, 10 Mar 2017 14:43:54 -0500 Subject: [PATCH 03/72] Respect if/unless for roslaunch-check. --- tools/roslaunch/resources/example.launch | 11 ++++++++ tools/roslaunch/src/roslaunch/depends.py | 33 ++++++++++-------------- 2 files changed, 24 insertions(+), 20 deletions(-) diff --git a/tools/roslaunch/resources/example.launch b/tools/roslaunch/resources/example.launch index 6b07bc5eff..0c389bf0ca 100644 --- a/tools/roslaunch/resources/example.launch +++ b/tools/roslaunch/resources/example.launch @@ -59,4 +59,15 @@ + + + + + + + + + + + diff --git a/tools/roslaunch/src/roslaunch/depends.py b/tools/roslaunch/src/roslaunch/depends.py index 2cb8a75af2..79eb050d53 100644 --- a/tools/roslaunch/src/roslaunch/depends.py +++ b/tools/roslaunch/src/roslaunch/depends.py @@ -45,6 +45,7 @@ import rospkg +from .loader import convert_value from .substitution_args import resolve_args NAME="roslaunch-deps" @@ -94,20 +95,16 @@ def _get_arg_value(tag, context): else: raise RoslaunchDepsException("No value for arg [%s]"%(name)) -def _parse_arg(tag, context): - name = tag.attributes['name'].value +def _check_ifunless(tag, context): if tag.attributes.has_key('if'): val = resolve_args(tag.attributes['if'].value, context) - if val == '1' or val == 'true': - return (name, _get_arg_value(tag, context)) + if not convert_value(val, 'bool'): + return False elif tag.attributes.has_key('unless'): val = resolve_args(tag.attributes['unless'].value, context) - if val == '0' or val == 'false': - return (name, _get_arg_value(tag, context)) - else: - return (name, _get_arg_value(tag, context)) - # nothing to return (no value, or conditional wasn't satisfied) - return None + if convert_value(val, 'bool'): + return False + return True def _parse_subcontext(tags, context): subcontext = {'arg': {}} @@ -116,12 +113,8 @@ def _parse_subcontext(tags, context): return subcontext for tag in [t for t in tags if t.nodeType == DomNode.ELEMENT_NODE]: - if tag.tagName == 'arg': - # None is returned for args with if/unless that evaluate to false - ret = _parse_arg(tag, context) - if ret is not None: - (name, val) = ret - subcontext['arg'][name] = val + if tag.tagName == 'arg' and _check_ifunless(tag, context): + subcontext['arg'][tag.attributes['name'].value] = _get_arg_value(tag, context) return subcontext def _parse_launch(tags, launch_file, file_deps, verbose, context): @@ -130,6 +123,8 @@ def _parse_launch(tags, launch_file, file_deps, verbose, context): # process group, include, node, and test tags from launch file for tag in [t for t in tags if t.nodeType == DomNode.ELEMENT_NODE]: + if not _check_ifunless(tag, context): + continue if tag.tagName == 'group': @@ -137,10 +132,8 @@ def _parse_launch(tags, launch_file, file_deps, verbose, context): _parse_launch(tag.childNodes, launch_file, file_deps, verbose, context) elif tag.tagName == 'arg': - v = _parse_arg(tag, context) - if v: - (name, val) = v - context['arg'][name] = val + context['arg'][tag.attributes['name'].value] = _get_arg_value(tag, context) + elif tag.tagName == 'include': try: sub_launch_file = resolve_args(tag.attributes['file'].value, context) From a95d25e65374a6a2bac496db802cb97b957ead73 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20BARTH=C3=89L=C3=89MY?= Date: Fri, 17 Mar 2017 23:35:24 +0100 Subject: [PATCH 04/72] fix rosbag::View::iterator copy assignment operator (#1017) * refactor test_rosbag_storage * fix rosbag::View::iterator copy assignment operator the compiler-generated copy assignment operator did lead to segfault and memory leaks. --- .../src/create_and_iterate_bag.cpp | 127 +++++++++++------- tools/rosbag_storage/include/rosbag/view.h | 1 + tools/rosbag_storage/src/view.cpp | 13 ++ 3 files changed, 94 insertions(+), 47 deletions(-) diff --git a/test/test_rosbag_storage/src/create_and_iterate_bag.cpp b/test/test_rosbag_storage/src/create_and_iterate_bag.cpp index 37d08525c2..23c91dcd86 100644 --- a/test/test_rosbag_storage/src/create_and_iterate_bag.cpp +++ b/test/test_rosbag_storage/src/create_and_iterate_bag.cpp @@ -10,71 +10,104 @@ #include "boost/foreach.hpp" #include +void create_test_bag(const std::string &filename) +{ + rosbag::Bag bag; + bag.open(filename, rosbag::bagmode::Write); + + std_msgs::String str; + str.data = std::string("foo"); + + std_msgs::Int32 i; + i.data = 42; + + bag.write("chatter", ros::Time::now(), str); + bag.write("numbers", ros::Time::now(), i); + + bag.close(); +} -TEST(rosbag_storage, create_and_iterate_bag) +const char* bag_filename = "/tmp/rosbag_storage_create_and_iterate_bag.bag"; + +TEST(rosbag_storage, iterator_copy_constructor) { - const char* bag_filename = "/tmp/rosbag_storage_create_and_iterate_bag.bag"; - { - rosbag::Bag bag; - bag.open(bag_filename, rosbag::bagmode::Write); - - std_msgs::String str; - str.data = std::string("foo"); - - std_msgs::Int32 i; - i.data = 42; - - bag.write("chatter", ros::Time::now(), str); - bag.write("numbers", ros::Time::now(), i); - - bag.close(); - } + // copy ctor + rosbag::Bag bag; + bag.open(bag_filename, rosbag::bagmode::Read); + rosbag::View view(bag, rosbag::TopicQuery("numbers")); + rosbag::View::const_iterator it0 = view.begin(); + EXPECT_EQ(42, it0->instantiate()->data); + rosbag::View::const_iterator it1(it0); + EXPECT_EQ(it0, it1); + EXPECT_EQ(42, it1->instantiate()->data); + ++it1; + EXPECT_NE(it0, it1); + EXPECT_EQ(42, it0->instantiate()->data); +} - { - rosbag::Bag bag; - bag.open(bag_filename, rosbag::bagmode::Read); +TEST(rosbag_storage, iterator_copy_assignment) +{ + // copy assignment + rosbag::Bag bag; + bag.open(bag_filename, rosbag::bagmode::Read); + rosbag::View view(bag, rosbag::TopicQuery("numbers")); + rosbag::View::const_iterator it0 = view.begin(); + EXPECT_EQ(42, it0->instantiate()->data); + rosbag::View::const_iterator it1; + it1 = it0; + EXPECT_EQ(it0, it1); + EXPECT_EQ(42, it1->instantiate()->data); + ++it1; + EXPECT_NE(it0, it1); + EXPECT_EQ(42, it0->instantiate()->data); +} + +TEST(rosbag_storage, iterate_bag) +{ + rosbag::Bag bag; + bag.open(bag_filename, rosbag::bagmode::Read); - std::vector topics; - topics.push_back(std::string("chatter")); - topics.push_back(std::string("numbers")); + std::vector topics; + topics.push_back(std::string("chatter")); + topics.push_back(std::string("numbers")); - rosbag::View view(bag, rosbag::TopicQuery(topics)); + rosbag::View view(bag, rosbag::TopicQuery(topics)); - BOOST_FOREACH(rosbag::MessageInstance const m, view) + BOOST_FOREACH(rosbag::MessageInstance const m, view) + { + std_msgs::String::ConstPtr s = m.instantiate(); + if (s != NULL) { - std_msgs::String::ConstPtr s = m.instantiate(); - if (s != NULL) + if(s->data == std::string("foo")) { + printf("Successfully checked string foo\n"); + } + else { - if(s->data == std::string("foo")) { - printf("Successfully checked string foo\n"); - } - else - { - printf("Failed checked string foo\n"); - FAIL(); - } + printf("Failed checked string foo\n"); + FAIL(); } + } - std_msgs::Int32::ConstPtr i = m.instantiate(); - if (i != NULL) + std_msgs::Int32::ConstPtr i = m.instantiate(); + if (i != NULL) + { + if (i->data == 42) { + printf("Successfully checked value 42\n"); + } + else { - if (i->data == 42) { - printf("Successfully checked value 42\n"); - } - else - { - printf("Failed checked value 42.\n"); - FAIL(); - } + printf("Failed checked value 42.\n"); + FAIL(); } } - - bag.close(); } + + bag.close(); } int main(int argc, char **argv) { ros::Time::init(); + create_test_bag(bag_filename); testing::InitGoogleTest(&argc, argv); return RUN_ALL_TESTS(); diff --git a/tools/rosbag_storage/include/rosbag/view.h b/tools/rosbag_storage/include/rosbag/view.h index bce5676fea..ea9048adb9 100644 --- a/tools/rosbag_storage/include/rosbag/view.h +++ b/tools/rosbag_storage/include/rosbag/view.h @@ -63,6 +63,7 @@ class ROSBAG_DECL View { public: iterator(iterator const& i); + iterator &operator=(iterator const& i); iterator(); ~iterator(); diff --git a/tools/rosbag_storage/src/view.cpp b/tools/rosbag_storage/src/view.cpp index 7448c861a3..b388b4c1a4 100644 --- a/tools/rosbag_storage/src/view.cpp +++ b/tools/rosbag_storage/src/view.cpp @@ -59,6 +59,19 @@ View::iterator::iterator(View* view, bool end) : view_(view), view_revision_(0), View::iterator::iterator(const iterator& i) : view_(i.view_), iters_(i.iters_), view_revision_(i.view_revision_), message_instance_(NULL) { } +View::iterator &View::iterator::operator=(iterator const& i) { + if (this != &i) { + view_ = i.view_; + iters_ = i.iters_; + view_revision_ = i.view_revision_; + if (message_instance_ != NULL) { + delete message_instance_; + message_instance_ = NULL; + } + } + return *this; +} + void View::iterator::populate() { assert(view_ != NULL); From 46d5fd902aa305feedf102587d355e23e59cbf1b Mon Sep 17 00:00:00 2001 From: Dirk Thomas Date: Mon, 27 Feb 2017 14:05:35 -0800 Subject: [PATCH 05/72] fix rosmsg show from bag --- tools/rosmsg/package.xml | 1 + tools/rosmsg/src/rosmsg/__init__.py | 10 +++++++++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/tools/rosmsg/package.xml b/tools/rosmsg/package.xml index 3495a6ee70..976ed24c5e 100644 --- a/tools/rosmsg/package.xml +++ b/tools/rosmsg/package.xml @@ -21,6 +21,7 @@ catkin genmsg + genpy python-rospkg rosbag roslib diff --git a/tools/rosmsg/src/rosmsg/__init__.py b/tools/rosmsg/src/rosmsg/__init__.py index 9a1359fb8e..eff4b94a56 100644 --- a/tools/rosmsg/src/rosmsg/__init__.py +++ b/tools/rosmsg/src/rosmsg/__init__.py @@ -48,6 +48,7 @@ import rospkg import genmsg +from genpy.dynamic import generate_dynamic import roslib.message import rosbag @@ -603,7 +604,14 @@ def rosmsg_cmd_show(mode, full, alias='show'): for topic, msg, t in rosbag.Bag(bag_file).read_messages(raw=True): datatype, _, _, _, pytype = msg if datatype == arg: - print(get_msg_text(datatype, options.raw, pytype._full_text)) + if options.raw: + print(pytype._full_text) + else: + context = genmsg.MsgContext.create_default() + msgs = generate_dynamic(datatype, pytype._full_text) + for t, msg in msgs.items(): + context.register(t, msg._spec) + print(spec_to_str(context, msgs[datatype]._spec)) break else: rospack = rospkg.RosPack() From 785e071f26b6662d294830277dadd25dff78fa2b Mon Sep 17 00:00:00 2001 From: deng02 Date: Tue, 28 Mar 2017 16:23:21 -0400 Subject: [PATCH 06/72] Add subscriber to connection log messages. (#1023) --- clients/roscpp/src/libros/connection_manager.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/clients/roscpp/src/libros/connection_manager.cpp b/clients/roscpp/src/libros/connection_manager.cpp index bbba1a6b38..98789b66ae 100644 --- a/clients/roscpp/src/libros/connection_manager.cpp +++ b/clients/roscpp/src/libros/connection_manager.cpp @@ -209,7 +209,7 @@ bool ConnectionManager::onConnectionHeaderReceived(const ConnectionPtr& conn, co std::string val; if (header.getValue("topic", val)) { - ROSCPP_LOG_DEBUG("Connection: Creating TransportSubscriberLink for topic [%s] connected to [%s]", + ROSCPP_CONN_LOG_DEBUG("Connection: Creating TransportSubscriberLink for topic [%s] connected to [%s]", val.c_str(), conn->getRemoteString().c_str()); TransportSubscriberLinkPtr sub_link(boost::make_shared()); From 9f1517be22ec2c53d8e03688a017e13fe4b2f7a2 Mon Sep 17 00:00:00 2001 From: Dirk Thomas Date: Fri, 14 Apr 2017 03:40:38 -0700 Subject: [PATCH 07/72] ensure cwd exists --- tools/roslaunch/src/roslaunch/nodeprocess.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/tools/roslaunch/src/roslaunch/nodeprocess.py b/tools/roslaunch/src/roslaunch/nodeprocess.py index 8df5ce5740..cc86a4ad13 100644 --- a/tools/roslaunch/src/roslaunch/nodeprocess.py +++ b/tools/roslaunch/src/roslaunch/nodeprocess.py @@ -290,6 +290,12 @@ def start(self): cwd = get_ros_root() else: cwd = rospkg.get_ros_home() + if not os.path.exists(cwd): + try: + os.makedirs(cwd) + except OSError: + # exist_ok=True + pass _logger.info("process[%s]: start w/ args [%s]", self.name, self.args) _logger.info("process[%s]: cwd will be [%s]", self.name, cwd) From 0da79aae8120d1156c8a0b7f156bb915f9c6641a Mon Sep 17 00:00:00 2001 From: AlexReimann Date: Thu, 6 Apr 2017 10:36:51 +0900 Subject: [PATCH 08/72] Sleep in rospy wait_for_service even if exceptions raised --- clients/rospy/src/rospy/impl/tcpros_service.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/clients/rospy/src/rospy/impl/tcpros_service.py b/clients/rospy/src/rospy/impl/tcpros_service.py index bb61195afc..034fad3bc0 100644 --- a/clients/rospy/src/rospy/impl/tcpros_service.py +++ b/clients/rospy/src/rospy/impl/tcpros_service.py @@ -128,7 +128,6 @@ def contact_service(resolved_name, timeout=10.0): try: if contact_service(resolved_name, timeout_t-time.time()): return - time.sleep(0.3) except KeyboardInterrupt: # re-raise rospy.core.logdebug("wait_for_service: received keyboard interrupt, assuming signals disabled and re-raising") @@ -137,6 +136,7 @@ def contact_service(resolved_name, timeout=10.0): if first: first = False rospy.core.logerr("wait_for_service(%s): failed to contact [%s], will keep trying"%(resolved_name, uri)) + time.sleep(0.3) if rospy.core.is_shutdown(): raise ROSInterruptException("rospy shutdown") else: @@ -146,7 +146,6 @@ def contact_service(resolved_name, timeout=10.0): try: if contact_service(resolved_name): return - time.sleep(0.3) except KeyboardInterrupt: # re-raise rospy.core.logdebug("wait_for_service: received keyboard interrupt, assuming signals disabled and re-raising") @@ -155,6 +154,7 @@ def contact_service(resolved_name, timeout=10.0): if first: first = False rospy.core.logerr("wait_for_service(%s): failed to contact [%s], will keep trying"%(resolved_name, uri)) + time.sleep(0.3) if rospy.core.is_shutdown(): raise ROSInterruptException("rospy shutdown") From ca444ab3e07c750bf0e33f643fa2fd606117a58a Mon Sep 17 00:00:00 2001 From: Adel Fakih Date: Tue, 25 Apr 2017 11:38:18 -0400 Subject: [PATCH 09/72] Avoid deleting XmlRpcClient's while they are being still in use on another thread (#1013) * Avoid deleting XmlRpcClient's while they are being still in use on another thread * Acquire clients_mutex_ before deleting the clients * Remove the timed wait for the clients to become not in use * Only delete and erase clients that are not in use * Clients that would still be in use would delete themselves on release * Wait for clients that are in use to finish in XmlRpcManager::shutdown --- clients/roscpp/src/libros/xmlrpc_manager.cpp | 41 +++++++++++++++----- 1 file changed, 31 insertions(+), 10 deletions(-) diff --git a/clients/roscpp/src/libros/xmlrpc_manager.cpp b/clients/roscpp/src/libros/xmlrpc_manager.cpp index 272315b3fa..6a3829f76f 100644 --- a/clients/roscpp/src/libros/xmlrpc_manager.cpp +++ b/clients/roscpp/src/libros/xmlrpc_manager.cpp @@ -155,20 +155,31 @@ void XMLRPCManager::shutdown() server_.close(); // kill the last few clients that were started in the shutdown process - for (V_CachedXmlRpcClient::iterator i = clients_.begin(); - i != clients_.end(); ++i) { - for (int wait_count = 0; i->in_use_ && wait_count < 10; wait_count++) + boost::mutex::scoped_lock lock(clients_mutex_); + + for (V_CachedXmlRpcClient::iterator i = clients_.begin(); + i != clients_.end();) { - ROSCPP_LOG_DEBUG("waiting for xmlrpc connection to finish..."); - ros::WallDuration(0.01).sleep(); + if (!i->in_use_) + { + i->client_->close(); + delete i->client_; + i = clients_.erase(i); + } + else + { + ++i; + } } - - i->client_->close(); - delete i->client_; } - clients_.clear(); + // Wait for the clients that are in use to finish and remove themselves from clients_ + for (int wait_count = 0; !clients_.empty() && wait_count < 10; wait_count++) + { + ROSCPP_LOG_DEBUG("waiting for xmlrpc connection to finish..."); + ros::WallDuration(0.01).sleep(); + } boost::mutex::scoped_lock lock(functions_mutex_); functions_.clear(); @@ -369,7 +380,17 @@ void XMLRPCManager::releaseXMLRPCClient(XmlRpcClient *c) { if (c == i->client_) { - i->in_use_ = false; + if (shutting_down_) + { + // if we are shutting down we won't be re-using the client + i->client_->close(); + delete i->client_; + clients_.erase(i); + } + else + { + i->in_use_ = false; + } break; } } From 99364d6a9a1c5fc007f8fd2fc04bebbed3609057 Mon Sep 17 00:00:00 2001 From: Guillaume Autran Date: Tue, 2 May 2017 10:02:44 -0400 Subject: [PATCH 10/72] Abort topic lookup on connection refused In a multimaster environment where a topic has multiple publishers, when a node drops out abruptly (host is shutdown), a single subscriber update on that topic will cause multiple threads to be created (one for each host) in order to resolve the topic location. This cause a thread leak as host which are turned off will not respond and when they come back online, the xmlrpc URI is changed causing a connection refused error at the socket layer. This fix catches the connection refused error and terminate the thread with the understanding that if the connection is refused, the rosnode cannot be reached now or never. This effectively prevents thread leak. Note: if the remote host where the rosnode is thought to be never comes back up, then the thread will still be leaked as the exception received is a host unreachable type. This is intentional to avoid abruptly terminating the thread in case of a temporary DNS failure. --- clients/rospy/src/rospy/impl/masterslave.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/clients/rospy/src/rospy/impl/masterslave.py b/clients/rospy/src/rospy/impl/masterslave.py index d25261c3c0..ad8b214f62 100644 --- a/clients/rospy/src/rospy/impl/masterslave.py +++ b/clients/rospy/src/rospy/impl/masterslave.py @@ -59,6 +59,7 @@ import threading import traceback import time +import errno try: #py3k @@ -441,13 +442,19 @@ def _connect_topic(self, topic, pub_uri): interval = 0.5 # seconds # while the ROS node is not shutdown try to get the topic information # and retry on connections problems after some wait + # Abort the retry if the we get a Connection Refused since at that point + # we know for sure the URI is invalid while not success and not is_shutdown(): try: code, msg, result = \ xmlrpcapi(pub_uri).requestTopic(caller_id, topic, protocols) success = True except Exception as e: - if not is_shutdown(): + if getattr(e, 'errno', None) == errno.ECONNREFUSED: + code = -errno.ECONNREFUSED + msg = str(e) + break + elif not is_shutdown(): _logger.debug("Retrying for %s" % topic) if interval < 30.0: # exponential backoff (maximum 32 seconds) From 088829536ffc46a12826d45a18d899d1e739f189 Mon Sep 17 00:00:00 2001 From: bxwllzz Date: Thu, 18 May 2017 00:23:25 +0800 Subject: [PATCH 11/72] Fix bug in transport_tcp (#1050) * Fix bug in transport_tcp It assumes that the `connect` method of non-blocking scoket should return -1 and `last_socket_error()` should return `ROS_SOCKETS_ASYNCHRONOUS_CONNECT_RETURN`(=`EINPROGRESS`). But a non-blocking `connect` can return 0 when TCP connection to 127.0.0.1 (localhost). [http://stackoverflow.com/questions/14027326/can-connect-return-0-with-non-blocing-socket](http://stackoverflow.com/questions/14027326/can-connect-return-0-with-non-blocing-socket) * Modify code format Modify code format --- clients/roscpp/src/libros/transport/transport_tcp.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/clients/roscpp/src/libros/transport/transport_tcp.cpp b/clients/roscpp/src/libros/transport/transport_tcp.cpp index 6417121317..9605dbbfc9 100644 --- a/clients/roscpp/src/libros/transport/transport_tcp.cpp +++ b/clients/roscpp/src/libros/transport/transport_tcp.cpp @@ -311,9 +311,10 @@ bool TransportTCP::connect(const std::string& host, int port) int ret = ::connect(sock_, (sockaddr*) &sas, sas_len); // windows might need some time to sleep (input from service robotics hack) add this if testing proves it is necessary. - ROS_ASSERT((flags_ & SYNCHRONOUS) || ret != 0); + // ROS_ASSERT((flags_ & SYNCHRONOUS) || ret != 0); if (((flags_ & SYNCHRONOUS) && ret != 0) || // synchronous, connect() should return 0 - (!(flags_ & SYNCHRONOUS) && last_socket_error() != ROS_SOCKETS_ASYNCHRONOUS_CONNECT_RETURN)) // asynchronous, connect() should return -1 and WSAGetLastError()=WSAEWOULDBLOCK/errno=EINPROGRESS + (!(flags_ & SYNCHRONOUS) && ret != 0 && last_socket_error() != ROS_SOCKETS_ASYNCHRONOUS_CONNECT_RETURN)) + // asynchronous, connect() may return 0 or -1. When return -1, WSAGetLastError()=WSAEWOULDBLOCK/errno=EINPROGRESS { ROSCPP_CONN_LOG_DEBUG("Connect to tcpros publisher [%s:%d] failed with error [%d, %s]", host.c_str(), port, ret, last_socket_error_string()); close(); From 007c88c7c7fbc79581d82a544e3f707a0544bbb7 Mon Sep 17 00:00:00 2001 From: Esteve Fernandez Date: Thu, 18 May 2017 18:23:10 +0200 Subject: [PATCH 12/72] Fix race condition that lead to miss first message (lunar) (#1058) * Fix race condition that lead to miss first message Callback queue waits for callback from "callOne" method. When internal queue is not empty this last method succeeded even if id info mapping does not contains related callback's id. In this case, first callback (for one id) is never called since "addCallback" method first push callback into internal queue and *then* set info mapping. So id info mapping has to be set before push callback into internal queue. Otherwise first message could be ignored. * Added test for addCallback race condition --- clients/roscpp/src/libros/callback_queue.cpp | 22 +++--- test/test_roscpp/test/test_callback_queue.cpp | 76 +++++++++++++++++++ 2 files changed, 87 insertions(+), 11 deletions(-) diff --git a/clients/roscpp/src/libros/callback_queue.cpp b/clients/roscpp/src/libros/callback_queue.cpp index cd2f4f8a6c..5827646ae0 100644 --- a/clients/roscpp/src/libros/callback_queue.cpp +++ b/clients/roscpp/src/libros/callback_queue.cpp @@ -101,17 +101,6 @@ void CallbackQueue::addCallback(const CallbackInterfacePtr& callback, uint64_t r info.callback = callback; info.removal_id = removal_id; - { - boost::mutex::scoped_lock lock(mutex_); - - if (!enabled_) - { - return; - } - - callbacks_.push_back(info); - } - { boost::mutex::scoped_lock lock(id_info_mutex_); @@ -124,6 +113,17 @@ void CallbackQueue::addCallback(const CallbackInterfacePtr& callback, uint64_t r } } + { + boost::mutex::scoped_lock lock(mutex_); + + if (!enabled_) + { + return; + } + + callbacks_.push_back(info); + } + condition_.notify_one(); } diff --git a/test/test_roscpp/test/test_callback_queue.cpp b/test/test_roscpp/test/test_callback_queue.cpp index a9cba89d0d..8142e55200 100644 --- a/test/test_roscpp/test/test_callback_queue.cpp +++ b/test/test_roscpp/test/test_callback_queue.cpp @@ -38,6 +38,7 @@ #include #include +#include #include #include #include @@ -398,6 +399,81 @@ TEST(CallbackQueue, recursiveTimer) tg.join_all(); } +class ConditionObject +{ +public: + ConditionObject(CallbackQueue * _queue) + : id(0), queue(_queue) { + condition_sync.store(true); + condition_one.store(false); + condition_stop.store(false); + } + + void add(); + + unsigned long id; + CallbackQueue * queue; + boost::atomic condition_one; + boost::atomic condition_sync; + boost::atomic condition_stop; +}; + +class RaceConditionCallback : public CallbackInterface +{ +public: + RaceConditionCallback(ConditionObject * _condition_object, unsigned long * _id) + : condition_object(_condition_object), id(_id) + {} + + virtual CallResult call() + { + condition_object->condition_one.store(false); + return Success; + } + + ConditionObject * condition_object; + unsigned long * id; +}; + +void ConditionObject::add() +{ + while(!condition_stop.load()) + { + if(condition_sync.load()) + { + condition_sync.store(false); + condition_one.store(true); + id++; + queue->addCallback(boost::make_shared(this, &id), id); + } + boost::this_thread::sleep(boost::posix_time::microseconds(1)); + } +} + +TEST(CallbackQueue, raceConditionCallback) +{ + CallbackQueue queue; + ConditionObject condition_object(&queue); + + boost::thread t(boost::bind(&ConditionObject::add, &condition_object)); + for(unsigned int i = 0; i < 1000000; ++i) + { + if (queue.callOne() == CallbackQueue::Called) + { + if(condition_object.condition_one.load()) + { + condition_object.condition_stop.store(true); + ASSERT_FALSE(condition_object.condition_one.load()); + } + } + + queue.clear(); + condition_object.condition_sync.store(true); + } + condition_object.condition_stop.store(true); + t.join(); +} + int main(int argc, char** argv) { testing::InitGoogleTest(&argc, argv); From 0b9770f571db530d0977d856f91656e4c932b13c Mon Sep 17 00:00:00 2001 From: Yuki Furuta Date: Thu, 18 May 2017 13:10:08 +0900 Subject: [PATCH 13/72] ensure pid file is removed on exit --- tools/roslaunch/src/roslaunch/__init__.py | 30 +++++++++++------------ 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/tools/roslaunch/src/roslaunch/__init__.py b/tools/roslaunch/src/roslaunch/__init__.py index 8d75fbc140..9b8eff3fd0 100644 --- a/tools/roslaunch/src/roslaunch/__init__.py +++ b/tools/roslaunch/src/roslaunch/__init__.py @@ -296,21 +296,15 @@ def main(argv=sys.argv): # This is a roslaunch parent, spin up parent server and launch processes. # args are the roslaunch files to load from . import parent as roslaunch_parent - try: - # force a port binding spec if we are running a core - if options.core: - options.port = options.port or DEFAULT_MASTER_PORT - p = roslaunch_parent.ROSLaunchParent(uuid, args, roslaunch_strs=roslaunch_strs, - is_core=options.core, port=options.port, local_only=options.local_only, - verbose=options.verbose, force_screen=options.force_screen, - num_workers=options.num_workers, timeout=options.timeout) - p.start() - p.spin() - finally: - # remove the pid file - if options.pid_fn: - try: os.unlink(options.pid_fn) - except os.error: pass + # force a port binding spec if we are running a core + if options.core: + options.port = options.port or DEFAULT_MASTER_PORT + p = roslaunch_parent.ROSLaunchParent(uuid, args, roslaunch_strs=roslaunch_strs, + is_core=options.core, port=options.port, local_only=options.local_only, + verbose=options.verbose, force_screen=options.force_screen, + num_workers=options.num_workers, timeout=options.timeout) + p.start() + p.spin() except RLException as e: roslaunch_core.printerrlog(str(e)) @@ -328,6 +322,12 @@ def main(argv=sys.argv): except Exception as e: traceback.print_exc() sys.exit(1) + finally: + # remove the pid file + if options.pid_fn: + try: os.unlink(options.pid_fn) + except os.error: pass + if __name__ == '__main__': main() From 41c20675680632da6e98615cc8116d8c0b7faa4d Mon Sep 17 00:00:00 2001 From: "Hunter L. Allen" Date: Wed, 24 May 2017 10:11:57 -0700 Subject: [PATCH 14/72] Changed the check command output to be a little bit more specific. --- tools/rosbag/src/rosbag/rosbag_main.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/rosbag/src/rosbag/rosbag_main.py b/tools/rosbag/src/rosbag/rosbag_main.py index 32eb45f9e3..c14a002ce0 100644 --- a/tools/rosbag/src/rosbag/rosbag_main.py +++ b/tools/rosbag/src/rosbag/rosbag_main.py @@ -477,7 +477,7 @@ def check_cmd(argv): migrations = checkbag(mm, args[0]) if len(migrations) == 0: - print('Bag file is up to date.') + print('Bag file does not need any migrations.') exit(0) print('The following migrations need to occur:') From 183344a95c7dc7c8d8d80d8886d77b9717576a0b Mon Sep 17 00:00:00 2001 From: Tamaki Nishino Date: Tue, 27 Jun 2017 04:46:21 +0900 Subject: [PATCH 15/72] [roslaunch] Fix pid file removing condition --- tools/roslaunch/src/roslaunch/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/roslaunch/src/roslaunch/__init__.py b/tools/roslaunch/src/roslaunch/__init__.py index 9b8eff3fd0..6f04d304eb 100644 --- a/tools/roslaunch/src/roslaunch/__init__.py +++ b/tools/roslaunch/src/roslaunch/__init__.py @@ -324,7 +324,7 @@ def main(argv=sys.argv): sys.exit(1) finally: # remove the pid file - if options.pid_fn: + if options is not None and options.pid_fn: try: os.unlink(options.pid_fn) except os.error: pass From 699b09a058ede2ea841d4c382b7c06eca824b49a Mon Sep 17 00:00:00 2001 From: Kentaro Wada Date: Fri, 7 Jul 2017 06:18:49 +0900 Subject: [PATCH 16/72] [rospy] Add option to reset timer when time moved backwards (#1083) * Add option to reset timer when time moved backwards * refactor logic --- clients/rospy/src/rospy/timer.py | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/clients/rospy/src/rospy/timer.py b/clients/rospy/src/rospy/timer.py index b587426302..f02a6453dc 100644 --- a/clients/rospy/src/rospy/timer.py +++ b/clients/rospy/src/rospy/timer.py @@ -49,15 +49,18 @@ class Rate(object): Convenience class for sleeping in a loop at a specified rate """ - def __init__(self, hz): + def __init__(self, hz, reset=False): """ Constructor. @param hz: hz rate to determine sleeping @type hz: int + @param reset: if True, timer is reset when rostime moved backward. [default: False] + @type reset: bool """ # #1403 self.last_time = rospy.rostime.get_rostime() self.sleep_dur = rospy.rostime.Duration(0, int(1e9/hz)) + self._reset = reset def _remaining(self, curr_time): """ @@ -96,7 +99,13 @@ def sleep(self): backwards """ curr_time = rospy.rostime.get_rostime() - sleep(self._remaining(curr_time)) + try: + sleep(self._remaining(curr_time)) + except rospy.exceptions.ROSTimeMovedBackwardsException: + if not self._reset: + raise + self.last_time = rospy.rostime.get_rostime() + return self.last_time = self.last_time + self.sleep_dur # detect time jumping forwards, as well as loops that are @@ -181,7 +190,7 @@ class Timer(threading.Thread): Convenience class for calling a callback at a specified rate """ - def __init__(self, period, callback, oneshot=False): + def __init__(self, period, callback, oneshot=False, reset=False): """ Constructor. @param period: desired period between callbacks @@ -190,11 +199,14 @@ def __init__(self, period, callback, oneshot=False): @type callback: function taking rospy.TimerEvent @param oneshot: if True, fire only once, otherwise fire continuously until shutdown is called [default: False] @type oneshot: bool + @param reset: if True, timer is reset when rostime moved backward. [default: False] + @type reset: bool """ super(Timer, self).__init__() self._period = period self._callback = callback self._oneshot = oneshot + self._reset = reset self._shutdown = False self.setDaemon(True) self.start() @@ -206,7 +218,7 @@ def shutdown(self): self._shutdown = True def run(self): - r = Rate(1.0 / self._period.to_sec()) + r = Rate(1.0 / self._period.to_sec(), reset=self._reset) current_expected = rospy.rostime.get_rostime() + self._period last_expected, last_real, last_duration = None, None, None while not rospy.core.is_shutdown() and not self._shutdown: From 725cf7ded3835332b25eaf8d7c342fde855b20e4 Mon Sep 17 00:00:00 2001 From: Dirk Thomas Date: Thu, 6 Jul 2017 16:14:38 -0700 Subject: [PATCH 17/72] add missing mutex lock for publisher links --- clients/roscpp/src/libros/subscription.cpp | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/clients/roscpp/src/libros/subscription.cpp b/clients/roscpp/src/libros/subscription.cpp index e0695cc13c..9a9e71eaec 100644 --- a/clients/roscpp/src/libros/subscription.cpp +++ b/clients/roscpp/src/libros/subscription.cpp @@ -224,10 +224,13 @@ bool Subscription::pubUpdate(const V_string& new_pubs) } ss << " already have these connections: "; - for (V_PublisherLink::iterator spc = publisher_links_.begin(); - spc!= publisher_links_.end(); ++spc) { - ss << (*spc)->getPublisherXMLRPCURI() << ", "; + boost::mutex::scoped_lock lock(publisher_links_mutex_); + for (V_PublisherLink::iterator spc = publisher_links_.begin(); + spc!= publisher_links_.end(); ++spc) + { + ss << (*spc)->getPublisherXMLRPCURI() << ", "; + } } boost::mutex::scoped_lock lock(pending_connections_mutex_); From d5ba92ccc7e7d98edd617a4fa8aa9af40fa45964 Mon Sep 17 00:00:00 2001 From: Tamaki Nishino Date: Fri, 7 Jul 2017 22:22:44 +0900 Subject: [PATCH 18/72] [rospy] Improve rospy.logXXX_throttle performance --- clients/rospy/src/rospy/core.py | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/clients/rospy/src/rospy/core.py b/clients/rospy/src/rospy/core.py index 57c07b8367..354b0e97a1 100644 --- a/clients/rospy/src/rospy/core.py +++ b/clients/rospy/src/rospy/core.py @@ -181,38 +181,37 @@ def __call__(self, caller_id, logging_func, period, msg): _logging_throttle = LoggingThrottle() -def _frame_record_to_caller_id(frame_record): - frame, _, lineno, _, code, _ = frame_record +def _frame_to_caller_id(frame): caller_id = ( inspect.getabsfile(frame), - lineno, + frame.f_lineno, frame.f_lasti, ) return pickle.dumps(caller_id) def logdebug_throttle(period, msg): - caller_id = _frame_record_to_caller_id(inspect.stack()[1]) + caller_id = _frame_to_caller_id(inspect.currentframe().f_back) _logging_throttle(caller_id, logdebug, period, msg) def loginfo_throttle(period, msg): - caller_id = _frame_record_to_caller_id(inspect.stack()[1]) + caller_id = _frame_to_caller_id(inspect.currentframe().f_back) _logging_throttle(caller_id, loginfo, period, msg) def logwarn_throttle(period, msg): - caller_id = _frame_record_to_caller_id(inspect.stack()[1]) + caller_id = _frame_to_caller_id(inspect.currentframe().f_back) _logging_throttle(caller_id, logwarn, period, msg) def logerr_throttle(period, msg): - caller_id = _frame_record_to_caller_id(inspect.stack()[1]) + caller_id = _frame_to_caller_id(inspect.currentframe().f_back) _logging_throttle(caller_id, logerr, period, msg) def logfatal_throttle(period, msg): - caller_id = _frame_record_to_caller_id(inspect.stack()[1]) + caller_id = _frame_to_caller_id(inspect.currentframe().f_back) _logging_throttle(caller_id, logfatal, period, msg) From e3edb22ab5b982e5e3d177bcc815948f50bc41a6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Nordmoen?= Date: Sat, 8 Jul 2017 00:27:14 +0200 Subject: [PATCH 19/72] Added logging output when `roslogging` cannot change permissions (#1068) * Added logging output when `roslogging` cannot change permissions Added better differentiated logging output to `roslogging` so that problems with permission is made clear to the user. Accompanying test have also been added. * Removed testing, updated warning message and fixed formatting Removed testing since test folder should not be stored together with tests. Since testing group permission requires intervention outside the test harness the test it self is also removed. Updated the warning message to include `WARNING` and updated to using `%` formatting. --- tools/rosgraph/src/rosgraph/roslogging.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/tools/rosgraph/src/rosgraph/roslogging.py b/tools/rosgraph/src/rosgraph/roslogging.py index e4cfafef9b..20c4cb789f 100644 --- a/tools/rosgraph/src/rosgraph/roslogging.py +++ b/tools/rosgraph/src/rosgraph/roslogging.py @@ -83,7 +83,13 @@ def configure_logging(logname, level=logging.INFO, filename=None, env=None): makedirs_with_parent_perms(logfile_dir) except OSError: # cannot print to screen because command-line tools with output use this - sys.stderr.write("WARNING: cannot create log directory [%s]. Please set %s to a writable location.\n"%(logfile_dir, ROS_LOG_DIR)) + if os.path.exists(logfile_dir): + # We successfully created the logging folder, but could not change + # permissions of the new folder to the same as the parent folder + sys.stderr.write("WARNING: Could not change permissions for folder [%s], make sure that the parent folder has correct permissions.\n"%logfile_dir) + else: + # Could not create folder + sys.stderr.write("WARNING: cannot create log directory [%s]. Please set %s to a writable location.\n"%(logfile_dir, ROS_LOG_DIR)) return None elif os.path.isfile(logfile_dir): raise LoggingException("Cannot save log files: file [%s] is in the way"%logfile_dir) From 85ba344a17028fd88a8881610902bd497f0020e5 Mon Sep 17 00:00:00 2001 From: Kentaro Wada Date: Tue, 11 Jul 2017 03:47:43 +0900 Subject: [PATCH 20/72] [rostest] Check /clock publication neatly in publishtest (#973) * Check /clock publication neatly in publishtest - Use time.sleep because rospy.sleep(0.1) hangs if /clock is not published - Add timeout for clock publication * Add comment explaining use of time.sleep. * Use logwarn_throttle not to flood the console --- tools/rostest/nodes/publishtest | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/tools/rostest/nodes/publishtest b/tools/rostest/nodes/publishtest index b298491e9f..92bd0e74bf 100755 --- a/tools/rostest/nodes/publishtest +++ b/tools/rostest/nodes/publishtest @@ -54,6 +54,7 @@ Author: Kentaro Wada """ import sys +import time import unittest from nose.tools import assert_true @@ -107,10 +108,15 @@ class PublishTest(unittest.TestCase): def test_publish(self): """Test topics are published and messages come""" use_sim_time = rospy.get_param('/use_sim_time', False) - while use_sim_time and (rospy.Time.now() == rospy.Time(0)): - rospy.logwarn('/use_sim_time is specified and rostime is 0, ' - '/clock is published?') - rospy.sleep(0.1) + t_start = time.time() + while not rospy.is_shutdown() and \ + use_sim_time and (rospy.Time.now() == rospy.Time(0)): + rospy.logwarn_throttle( + 1, '/use_sim_time is specified and rostime is 0, /clock is published?') + if time.time() - t_start > 10: + self.fail('Timed out (10s) of /clock publication.') + # must use time.sleep because /clock isn't yet published, so rospy.sleep hangs. + time.sleep(0.1) # subscribe topics checkers = [] for topic in self.topics: From 004e280a03a3a9936570b0051dcf13449f827d1a Mon Sep 17 00:00:00 2001 From: Yu Ding Date: Mon, 10 Jul 2017 15:47:10 -0700 Subject: [PATCH 21/72] A fix to a critical stack buffer overflow vulnerability which leads to direct control flow hijacking (#1092) * A fix to a critical stack buffer overflow vulnerability which leads to control flow hi-jacking. * Much more simple fix for the stack overflow bug --- tools/rosbag_storage/src/bag.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/rosbag_storage/src/bag.cpp b/tools/rosbag_storage/src/bag.cpp index 62cd953d2a..81df861c0d 100644 --- a/tools/rosbag_storage/src/bag.cpp +++ b/tools/rosbag_storage/src/bag.cpp @@ -230,7 +230,7 @@ void Bag::readVersion() { #if defined(_MSC_VER) if (sscanf_s(version_line.c_str(), "#ROS%s V%d.%d", logtypename, sizeof(logtypename), &version_major, &version_minor) != 3) #else - if (sscanf(version_line.c_str(), "#ROS%s V%d.%d", logtypename, &version_major, &version_minor) != 3) + if (sscanf(version_line.c_str(), "#ROS%99s V%d.%d", logtypename, &version_major, &version_minor) != 3) #endif throw BagIOException("Error reading version line"); From 6682e0fa5e397443e7b0752d386d417f629815d7 Mon Sep 17 00:00:00 2001 From: Dirk Thomas Date: Wed, 12 Jul 2017 10:33:50 -0700 Subject: [PATCH 22/72] only launch core nodes if master was launched by roslaunch --- tools/roslaunch/src/roslaunch/launch.py | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/tools/roslaunch/src/roslaunch/launch.py b/tools/roslaunch/src/roslaunch/launch.py index 758d6febbe..8b5e424a4c 100644 --- a/tools/roslaunch/src/roslaunch/launch.py +++ b/tools/roslaunch/src/roslaunch/launch.py @@ -382,6 +382,9 @@ def _launch_nodes(self): def _launch_master(self): """ Launches master if requested. + @return: True if a master was launched, False if a master was + already running. + @rtype: bool @raise RLException: if master launch fails """ m = self.config.master @@ -426,6 +429,8 @@ def _launch_master(self): self.logger.info("setting /roslaunch/uris/%s__%s' to %s"%(hostname, port, self.server_uri)) param_server.setParam(_ID, '/roslaunch/uris/%s__%s'%(hostname, port),self.server_uri) + return not is_running + def _check_and_set_run_id(self, param_server, run_id): """ Initialize self.run_id to existing value or setup parameter @@ -627,8 +632,9 @@ def _setup(self): self.remote_runner.add_process_listener(self.listeners) # start up the core: master + core nodes defined in core.xml - self._launch_master() - self._launch_core_nodes() + launched = self._launch_master() + if launched: + self._launch_core_nodes() # run exectuables marked as setup period. this will block # until these executables exit. setup executable have to run From 720f610c6256f685767d91c935a0b711ee5525a7 Mon Sep 17 00:00:00 2001 From: Tim Rakowski Date: Mon, 17 Jul 2017 21:03:28 +0200 Subject: [PATCH 23/72] Made copying rosbag::Bag a compiler error to prevent crashes and added a swap function instead (#1000) * Made copying rosbag::Bag a compiler error to prevent crashes * Added Bag::swap(Bag&) and rosbag::swap(Bag&, Bag&) * Fixed bugs in Bag::swap * Added tests for Bag::swap --- test/test_rosbag_storage/CMakeLists.txt | 4 + test/test_rosbag_storage/src/swap_bags.cpp | 101 ++++++++++++++++++ tools/rosbag_storage/include/rosbag/bag.h | 9 ++ tools/rosbag_storage/include/rosbag/buffer.h | 7 ++ .../include/rosbag/chunked_file.h | 8 ++ tools/rosbag_storage/include/rosbag/stream.h | 12 +++ tools/rosbag_storage/src/bag.cpp | 31 ++++++ tools/rosbag_storage/src/buffer.cpp | 8 ++ tools/rosbag_storage/src/chunked_file.cpp | 29 +++++ 9 files changed, 209 insertions(+) create mode 100644 test/test_rosbag_storage/src/swap_bags.cpp diff --git a/test/test_rosbag_storage/CMakeLists.txt b/test/test_rosbag_storage/CMakeLists.txt index 0ced5bf4ea..fa2438d452 100644 --- a/test/test_rosbag_storage/CMakeLists.txt +++ b/test/test_rosbag_storage/CMakeLists.txt @@ -15,4 +15,8 @@ if(CATKIN_ENABLE_TESTING) if(TARGET create_and_iterate_bag) target_link_libraries(create_and_iterate_bag ${catkin_LIBRARIES}) endif() + catkin_add_gtest(swap_bags src/swap_bags.cpp) + if(TARGET swap_bags) + target_link_libraries(swap_bags ${catkin_LIBRARIES}) + endif() endif() diff --git a/test/test_rosbag_storage/src/swap_bags.cpp b/test/test_rosbag_storage/src/swap_bags.cpp new file mode 100644 index 0000000000..3940f18711 --- /dev/null +++ b/test/test_rosbag_storage/src/swap_bags.cpp @@ -0,0 +1,101 @@ +#include "ros/time.h" +#include "rosbag/bag.h" +#include "rosbag/view.h" +#include "std_msgs/Int32.h" + +#include "boost/foreach.hpp" +#include + +void writeBags(rosbag::CompressionType a, rosbag::CompressionType b) { + using std::swap; + rosbag::Bag bag1("/tmp/swap1.bag", rosbag::bagmode::Write); + rosbag::Bag bag2("/tmp/swap2.bag", rosbag::bagmode::Write); + + // In the end "/tmp/swap1.bag" should have CompressionType a and contain two messages of value a. + // "/tmp/swap2.bag" should have CompressionType b and contain two messages of value b. + // We use these pointers to track the bags accordingly. + + rosbag::Bag* a_bag = &bag1; + rosbag::Bag* b_bag = &bag2; + + std_msgs::Int32 a_msg, b_msg; + a_msg.data = a; + b_msg.data = b; + + swap(bag1, bag2); + swap(a_bag, b_bag); + + a_bag->setCompression(a); + b_bag->setCompression(b); + + swap(bag1, bag2); + swap(a_bag, b_bag); + + a_bag->write("/data", ros::Time::now(), a_msg); + b_bag->write("/data", ros::Time::now(), b_msg); + + swap(bag1, bag2); + swap(a_bag, b_bag); + + a_bag->write("/data", ros::Time::now(), a_msg); + b_bag->write("/data", ros::Time::now(), b_msg); + + swap(bag1, bag2); + + bag1.close(); + bag2.close(); + + swap(bag1, bag2); +} + +void readBags(rosbag::CompressionType a, rosbag::CompressionType b) { + using std::swap; + rosbag::Bag bag1("/tmp/swap1.bag", rosbag::bagmode::Read); + rosbag::Bag bag2("/tmp/swap2.bag", rosbag::bagmode::Read); + + rosbag::Bag* a_bag = &bag1; + rosbag::Bag* b_bag = &bag2; + + swap(bag1, bag2); + swap(a_bag, b_bag); + + // only valid when writing + //EXPECT_EQ(a_bag->getCompression(), a); + //EXPECT_EQ(b_bag->getCompression(), b); + + std::vector topics; + topics.push_back("data"); + + rosbag::View a_view(*a_bag, rosbag::TopicQuery(topics)); + rosbag::View b_view(*b_bag, rosbag::TopicQuery(topics)); + + BOOST_FOREACH(rosbag::MessageInstance const m, a_view) + { + std_msgs::Int32::ConstPtr i = m.instantiate(); + ASSERT_TRUE(i); + EXPECT_EQ(i->data, a); + } + BOOST_FOREACH(rosbag::MessageInstance const m, b_view) + { + std_msgs::Int32::ConstPtr i = m.instantiate(); + ASSERT_TRUE(i); + EXPECT_EQ(i->data, b); + } +} + +TEST(rosbag_storage, swap_bags) +{ + for (int i = 0; i < 3; ++i) { + for (int j = 0; j < 3; ++j) { + writeBags(rosbag::CompressionType(i), rosbag::CompressionType(j)); + readBags(rosbag::CompressionType(i), rosbag::CompressionType(j)); + } + } +} + +int main(int argc, char **argv) { + ros::Time::init(); + + testing::InitGoogleTest(&argc, argv); + return RUN_ALL_TESTS(); +} diff --git a/tools/rosbag_storage/include/rosbag/bag.h b/tools/rosbag_storage/include/rosbag/bag.h index e8a346ef8b..14ad8a2c5d 100644 --- a/tools/rosbag_storage/include/rosbag/bag.h +++ b/tools/rosbag_storage/include/rosbag/bag.h @@ -171,7 +171,12 @@ class ROSBAG_DECL Bag void write(std::string const& topic, ros::Time const& time, boost::shared_ptr const& msg, boost::shared_ptr connection_header = boost::shared_ptr()); + void swap(Bag&); + private: + Bag(const Bag&); + Bag& operator=(const Bag&); + // This helper function actually does the write with an arbitrary serializable message template void doWrite(std::string const& topic, ros::Time const& time, T const& msg, boost::shared_ptr const& connection_header); @@ -621,6 +626,10 @@ void Bag::writeMessageDataRecord(uint32_t conn_id, ros::Time const& time, T cons curr_chunk_info_.start_time = time; } +inline void swap(Bag& a, Bag& b) { + a.swap(b); +} + } // namespace rosbag #endif diff --git a/tools/rosbag_storage/include/rosbag/buffer.h b/tools/rosbag_storage/include/rosbag/buffer.h index 5f9cf1a784..aef6c99e4b 100644 --- a/tools/rosbag_storage/include/rosbag/buffer.h +++ b/tools/rosbag_storage/include/rosbag/buffer.h @@ -51,8 +51,11 @@ class ROSBAG_DECL Buffer uint32_t getSize() const; void setSize(uint32_t size); + void swap(Buffer& other); private: + Buffer(const Buffer&); + Buffer& operator=(const Buffer&); void ensureCapacity(uint32_t capacity); private: @@ -61,6 +64,10 @@ class ROSBAG_DECL Buffer uint32_t size_; }; +inline void swap(Buffer& a, Buffer& b) { + a.swap(b); +} + } // namespace rosbag #endif diff --git a/tools/rosbag_storage/include/rosbag/chunked_file.h b/tools/rosbag_storage/include/rosbag/chunked_file.h index c1c8cda4b4..722aeca3ea 100644 --- a/tools/rosbag_storage/include/rosbag/chunked_file.h +++ b/tools/rosbag_storage/include/rosbag/chunked_file.h @@ -79,8 +79,12 @@ class ROSBAG_DECL ChunkedFile bool truncate(uint64_t length); void seek(uint64_t offset, int origin = std::ios_base::beg); //!< seek to given offset from origin void decompress(CompressionType compression, uint8_t* dest, unsigned int dest_len, uint8_t* source, unsigned int source_len); + void swap(ChunkedFile& other); private: + ChunkedFile(const ChunkedFile&); + ChunkedFile& operator=(const ChunkedFile&); + void open(std::string const& filename, std::string const& mode); void clearUnused(); @@ -98,6 +102,10 @@ class ROSBAG_DECL ChunkedFile boost::shared_ptr write_stream_; }; +inline void swap(ChunkedFile& a, ChunkedFile& b) { + a.swap(b); +} + } // namespace rosbag #endif diff --git a/tools/rosbag_storage/include/rosbag/stream.h b/tools/rosbag_storage/include/rosbag/stream.h index 1f563819eb..2ef7fac3ea 100644 --- a/tools/rosbag_storage/include/rosbag/stream.h +++ b/tools/rosbag_storage/include/rosbag/stream.h @@ -63,8 +63,11 @@ typedef compression::CompressionType CompressionType; class ChunkedFile; +class FileAccessor; + class ROSBAG_DECL Stream { + friend class FileAccessor; public: Stream(ChunkedFile* file); virtual ~Stream(); @@ -110,6 +113,13 @@ class ROSBAG_DECL StreamFactory boost::shared_ptr lz4_stream_; }; +class FileAccessor { + friend class ChunkedFile; + static void setFile(Stream& a, ChunkedFile* file) { + a.file_ = file; + } +}; + class ROSBAG_DECL UncompressedStream : public Stream { public: @@ -173,6 +183,8 @@ class ROSBAG_DECL LZ4Stream : public Stream void decompress(uint8_t* dest, unsigned int dest_len, uint8_t* source, unsigned int source_len); private: + LZ4Stream(const LZ4Stream&); + LZ4Stream operator=(const LZ4Stream&); void writeStream(int action); char *buff_; diff --git a/tools/rosbag_storage/src/bag.cpp b/tools/rosbag_storage/src/bag.cpp index 81df861c0d..281f326ce7 100644 --- a/tools/rosbag_storage/src/bag.cpp +++ b/tools/rosbag_storage/src/bag.cpp @@ -1117,4 +1117,35 @@ void Bag::write(char const* s, std::streamsize n) { file_.write((char*) s, n); void Bag::read(char* b, std::streamsize n) const { file_.read(b, n); } void Bag::seek(uint64_t pos, int origin) const { file_.seek(pos, origin); } +void Bag::swap(Bag& other) { + using std::swap; + swap(mode_, other.mode_); + swap(file_, other.file_); + swap(version_, other.version_); + swap(compression_, other.compression_); + swap(chunk_threshold_, other.chunk_threshold_); + swap(bag_revision_, other.bag_revision_); + swap(file_size_, other.file_size_); + swap(file_header_pos_, other.file_header_pos_); + swap(index_data_pos_, other.index_data_pos_); + swap(connection_count_, other.connection_count_); + swap(chunk_count_, other.chunk_count_); + swap(chunk_open_, other.chunk_open_); + swap(curr_chunk_info_, other.curr_chunk_info_); + swap(curr_chunk_data_pos_, other.curr_chunk_data_pos_); + swap(topic_connection_ids_, other.topic_connection_ids_); + swap(header_connection_ids_, other.header_connection_ids_); + swap(connections_, other.connections_); + swap(chunks_, other.chunks_); + swap(connection_indexes_, other.connection_indexes_); + swap(curr_chunk_connection_indexes_, other.curr_chunk_connection_indexes_); + swap(header_buffer_, other.header_buffer_); + swap(record_buffer_, other.record_buffer_); + swap(chunk_buffer_, other.chunk_buffer_); + swap(decompress_buffer_, other.decompress_buffer_); + swap(outgoing_chunk_buffer_, other.outgoing_chunk_buffer_); + swap(current_buffer_, other.current_buffer_); + swap(decompressed_chunk_, other.decompressed_chunk_); +} + } // namespace rosbag diff --git a/tools/rosbag_storage/src/buffer.cpp b/tools/rosbag_storage/src/buffer.cpp index b3d217a8fc..f51e624cad 100644 --- a/tools/rosbag_storage/src/buffer.cpp +++ b/tools/rosbag_storage/src/buffer.cpp @@ -34,6 +34,7 @@ #include #include +#include #include "rosbag/buffer.h" @@ -71,4 +72,11 @@ void Buffer::ensureCapacity(uint32_t capacity) { assert(buffer_); } +void Buffer::swap(Buffer& other) { + using std::swap; + swap(buffer_, other.buffer_); + swap(capacity_, other.capacity_); + swap(size_, other.size_); +} + } // namespace rosbag diff --git a/tools/rosbag_storage/src/chunked_file.cpp b/tools/rosbag_storage/src/chunked_file.cpp index 533c37b78a..9eb665826f 100644 --- a/tools/rosbag_storage/src/chunked_file.cpp +++ b/tools/rosbag_storage/src/chunked_file.cpp @@ -223,4 +223,33 @@ void ChunkedFile::clearUnused() { nUnused_ = 0; } +void ChunkedFile::swap(ChunkedFile& other) { + using std::swap; + using boost::swap; + swap(filename_, other.filename_); + swap(file_, other.file_); + swap(offset_, other.offset_); + swap(compressed_in_, other.compressed_in_); + swap(unused_, other.unused_); + swap(nUnused_, other.nUnused_); + + swap(stream_factory_, other.stream_factory_); + + FileAccessor::setFile(*stream_factory_->getStream(compression::Uncompressed), this); + FileAccessor::setFile(*stream_factory_->getStream(compression::BZ2), this); + FileAccessor::setFile(*stream_factory_->getStream(compression::LZ4), this); + + FileAccessor::setFile(*other.stream_factory_->getStream(compression::Uncompressed), &other); + FileAccessor::setFile(*other.stream_factory_->getStream(compression::BZ2), &other); + FileAccessor::setFile(*other.stream_factory_->getStream(compression::LZ4), &other); + + swap(read_stream_, other.read_stream_); + FileAccessor::setFile(*read_stream_, this); + FileAccessor::setFile(*other.read_stream_, &other); + + swap(write_stream_, other.write_stream_); + FileAccessor::setFile(*write_stream_, this); + FileAccessor::setFile(*other.write_stream_, &other); +} + } // namespace rosbag From daa9dac7a3a7bd37962918b304849a0273c02cb1 Mon Sep 17 00:00:00 2001 From: Dmitry Rozhkov Date: Wed, 19 Jul 2017 11:17:11 +0300 Subject: [PATCH 24/72] [roscpp] add missing header for writev(). After an update of gcc and glibc roscpp started to fail builds with the error: /home/rojkov/work/ros/build/tmp-glibc/work/i586-oe-linux/roscpp/1.11.21-r0/ros_comm-1.11.21/clients/roscpp/src/libros/transport/transport_udp.cpp:579:25: error: 'writev' was not declared in this scope ssize_t num_bytes = writev(sock_, iov, 2); ^~~~~~ According to POSIX.1-2001 the function writev() is declared in sys/uio.h. The patch includes the missing header for POSIX compliant systems. --- clients/roscpp/src/libros/transport/transport_udp.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/clients/roscpp/src/libros/transport/transport_udp.cpp b/clients/roscpp/src/libros/transport/transport_udp.cpp index c7d8298f98..47d969eea4 100644 --- a/clients/roscpp/src/libros/transport/transport_udp.cpp +++ b/clients/roscpp/src/libros/transport/transport_udp.cpp @@ -48,6 +48,9 @@ #elif defined(__ANDROID__) // For readv() and writev() on ANDROID #include +#elif defined(_POSIX_VERSION) + // For readv() and writev() + #include #endif namespace ros From 8d4cbecb2fe97a1718ce6be75d3910f98354d55b Mon Sep 17 00:00:00 2001 From: Felix Ruess Date: Thu, 20 Jul 2017 00:23:24 +0200 Subject: [PATCH 25/72] Add SteadyTimer (#1014) * add SteadyTimer based on SteadyTime (which uses the CLOCK_MONOTONIC). This timer is not influenced by time jumps of the system time, so ideal for things like periodic checks of timeout/heartbeat, etc... * fix timer_manager to really use a steady clock when needed This is a bit of a hack, since up to boost version 1.61 the time of the steady clock is always converted to system clock, which is then used for the wait... which obviously doesn't help if we explicitly want the steady clock. So as a workaround, include the backported versions of the boost condition variable if boost version is not recent enough. * add tests for SteadyTimer * [test] add -pthread to make some tests compile not sure if this is only need in my case on ROS indigo... * use SteadyTime for some timeouts * add some checks to make sure the backported boost headers are included if needed * specialize TimerManager threadFunc for SteadyTimer to avoid the typeid check and make really sure the correct boost condition wait_until implementation is used * Revert "[test] add -pthread to make some tests compile" This reverts commit f62a3f2bef03efc668501084dd87f3002766f8e7. * set minimum version for rostime * mostly spaces --- clients/roscpp/CMakeLists.txt | 3 +- .../include/boost_161_condition_variable.h | 23 + .../boost_161_pthread_condition_variable.h | 431 ++++++++++++++++++ ...boost_161_pthread_condition_variable_fwd.h | 378 +++++++++++++++ clients/roscpp/include/ros/forwards.h | 18 + .../include/ros/internal_timer_manager.h | 2 +- clients/roscpp/include/ros/node_handle.h | 80 ++++ clients/roscpp/include/ros/steady_timer.h | 127 ++++++ .../roscpp/include/ros/steady_timer_options.h | 86 ++++ clients/roscpp/include/ros/timer_manager.h | 20 +- .../include/ros/transport_publisher_link.h | 6 +- clients/roscpp/package.xml | 4 +- .../src/libros/internal_timer_manager.cpp | 13 +- clients/roscpp/src/libros/master.cpp | 4 +- clients/roscpp/src/libros/node_handle.cpp | 35 +- clients/roscpp/src/libros/steady_timer.cpp | 224 +++++++++ .../src/libros/transport_publisher_link.cpp | 8 +- test/test_roscpp/test/src/timer_callbacks.cpp | 313 +++++++++++++ 18 files changed, 1757 insertions(+), 18 deletions(-) create mode 100644 clients/roscpp/include/boost_161_condition_variable.h create mode 100644 clients/roscpp/include/boost_161_pthread_condition_variable.h create mode 100644 clients/roscpp/include/boost_161_pthread_condition_variable_fwd.h create mode 100644 clients/roscpp/include/ros/steady_timer.h create mode 100644 clients/roscpp/include/ros/steady_timer_options.h create mode 100644 clients/roscpp/src/libros/steady_timer.cpp diff --git a/clients/roscpp/CMakeLists.txt b/clients/roscpp/CMakeLists.txt index 633102919e..ad6ccda1c2 100644 --- a/clients/roscpp/CMakeLists.txt +++ b/clients/roscpp/CMakeLists.txt @@ -22,7 +22,7 @@ list(GET roscpp_VERSION_LIST 2 roscpp_VERSION_PATCH) configure_file(${CMAKE_CURRENT_SOURCE_DIR}/include/ros/common.h.in ${CATKIN_DEVEL_PREFIX}/${CATKIN_GLOBAL_INCLUDE_DESTINATION}/ros/common.h) -find_package(Boost REQUIRED COMPONENTS signals filesystem system) +find_package(Boost REQUIRED COMPONENTS chrono filesystem signals system) include_directories(include ${CATKIN_DEVEL_PREFIX}/${CATKIN_GLOBAL_INCLUDE_DESTINATION}/ros ${catkin_INCLUDE_DIRS} ${Boost_INCLUDE_DIRS}) @@ -118,6 +118,7 @@ add_library(roscpp src/libros/poll_set.cpp src/libros/service.cpp src/libros/this_node.cpp + src/libros/steady_timer.cpp ) add_dependencies(roscpp ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS}) diff --git a/clients/roscpp/include/boost_161_condition_variable.h b/clients/roscpp/include/boost_161_condition_variable.h new file mode 100644 index 0000000000..ee2ff46188 --- /dev/null +++ b/clients/roscpp/include/boost_161_condition_variable.h @@ -0,0 +1,23 @@ +#ifndef BOOST_THREAD_CONDITION_VARIABLE_HPP +#define BOOST_THREAD_CONDITION_VARIABLE_HPP + +// condition_variable.hpp +// +// (C) Copyright 2007 Anthony Williams +// +// Distributed under the Boost Software License, Version 1.0. (See +// accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +#include +#if defined(BOOST_THREAD_PLATFORM_WIN32) +#include +#elif defined(BOOST_THREAD_PLATFORM_PTHREAD) +//#include +#include "boost_161_pthread_condition_variable.h" +#else +#error "Boost threads unavailable on this platform" +#endif + +#endif + diff --git a/clients/roscpp/include/boost_161_pthread_condition_variable.h b/clients/roscpp/include/boost_161_pthread_condition_variable.h new file mode 100644 index 0000000000..8100447bae --- /dev/null +++ b/clients/roscpp/include/boost_161_pthread_condition_variable.h @@ -0,0 +1,431 @@ +#ifndef BOOST_THREAD_CONDITION_VARIABLE_PTHREAD_HPP +#define BOOST_THREAD_CONDITION_VARIABLE_PTHREAD_HPP +// Distributed under the Boost Software License, Version 1.0. (See +// accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// (C) Copyright 2007-10 Anthony Williams +// (C) Copyright 2011-2012 Vicente J. Botet Escriba + +// make sure we include our backported version first!! +// (before the system version might be included via some of the other header files) +#include "boost_161_pthread_condition_variable_fwd.h" + +#include +#include +#if defined BOOST_THREAD_PROVIDES_INTERRUPTIONS +#include +#endif +//#include +#ifdef BOOST_THREAD_USES_CHRONO +#include +#include +#endif +#include + +#include + +namespace boost +{ +#if defined BOOST_THREAD_PROVIDES_INTERRUPTIONS + namespace this_thread + { + void BOOST_THREAD_DECL interruption_point(); + } +#endif + + namespace thread_cv_detail + { + template + struct lock_on_exit + { + MutexType* m; + + lock_on_exit(): + m(0) + {} + + void activate(MutexType& m_) + { + m_.unlock(); + m=&m_; + } + ~lock_on_exit() + { + if(m) + { + m->lock(); + } + } + }; + } + + inline void condition_variable::wait(unique_lock& m) + { +#if defined BOOST_THREAD_THROW_IF_PRECONDITION_NOT_SATISFIED + if(! m.owns_lock()) + { + boost::throw_exception(condition_error(-1, "boost::condition_variable::wait() failed precondition mutex not owned")); + } +#endif + int res=0; + { +#if defined BOOST_THREAD_PROVIDES_INTERRUPTIONS + thread_cv_detail::lock_on_exit > guard; + detail::interruption_checker check_for_interruption(&internal_mutex,&cond); + pthread_mutex_t* the_mutex = &internal_mutex; + guard.activate(m); +#else + pthread_mutex_t* the_mutex = m.mutex()->native_handle(); +#endif + res = pthread_cond_wait(&cond,the_mutex); + } +#if defined BOOST_THREAD_PROVIDES_INTERRUPTIONS + this_thread::interruption_point(); +#endif + if(res && res != EINTR) + { + boost::throw_exception(condition_error(res, "boost::condition_variable::wait failed in pthread_cond_wait")); + } + } + + inline bool condition_variable::do_wait_until( + unique_lock& m, + struct timespec const &timeout) + { +#if defined BOOST_THREAD_THROW_IF_PRECONDITION_NOT_SATISFIED + if (!m.owns_lock()) + { + boost::throw_exception(condition_error(EPERM, "boost::condition_variable::do_wait_until() failed precondition mutex not owned")); + } +#endif + int cond_res; + { +#if defined BOOST_THREAD_PROVIDES_INTERRUPTIONS + thread_cv_detail::lock_on_exit > guard; + detail::interruption_checker check_for_interruption(&internal_mutex,&cond); + pthread_mutex_t* the_mutex = &internal_mutex; + guard.activate(m); +#else + pthread_mutex_t* the_mutex = m.mutex()->native_handle(); +#endif + cond_res=pthread_cond_timedwait(&cond,the_mutex,&timeout); + } +#if defined BOOST_THREAD_PROVIDES_INTERRUPTIONS + this_thread::interruption_point(); +#endif + if(cond_res==ETIMEDOUT) + { + return false; + } + if(cond_res) + { + boost::throw_exception(condition_error(cond_res, "boost::condition_variable::do_wait_until failed in pthread_cond_timedwait")); + } + return true; + } + + inline void condition_variable::notify_one() BOOST_NOEXCEPT + { +#if defined BOOST_THREAD_PROVIDES_INTERRUPTIONS + boost::pthread::pthread_mutex_scoped_lock internal_lock(&internal_mutex); +#endif + BOOST_VERIFY(!pthread_cond_signal(&cond)); + } + + inline void condition_variable::notify_all() BOOST_NOEXCEPT + { +#if defined BOOST_THREAD_PROVIDES_INTERRUPTIONS + boost::pthread::pthread_mutex_scoped_lock internal_lock(&internal_mutex); +#endif + BOOST_VERIFY(!pthread_cond_broadcast(&cond)); + } + + class condition_variable_any + { + pthread_mutex_t internal_mutex; + pthread_cond_t cond; + + public: + BOOST_THREAD_NO_COPYABLE(condition_variable_any) + condition_variable_any() + { + int const res=pthread_mutex_init(&internal_mutex,NULL); + if(res) + { + boost::throw_exception(thread_resource_error(res, "boost::condition_variable_any::condition_variable_any() failed in pthread_mutex_init")); + } + int const res2 = detail::monotonic_pthread_cond_init(cond); + if(res2) + { + BOOST_VERIFY(!pthread_mutex_destroy(&internal_mutex)); + boost::throw_exception(thread_resource_error(res2, "boost::condition_variable_any::condition_variable_any() failed in detail::monotonic_pthread_cond_init")); + } + } + ~condition_variable_any() + { + BOOST_VERIFY(!pthread_mutex_destroy(&internal_mutex)); + BOOST_VERIFY(!pthread_cond_destroy(&cond)); + } + + template + void wait(lock_type& m) + { + int res=0; + { + thread_cv_detail::lock_on_exit guard; +#if defined BOOST_THREAD_PROVIDES_INTERRUPTIONS + detail::interruption_checker check_for_interruption(&internal_mutex,&cond); +#else + boost::pthread::pthread_mutex_scoped_lock check_for_interruption(&internal_mutex); +#endif + guard.activate(m); + res=pthread_cond_wait(&cond,&internal_mutex); + } +#if defined BOOST_THREAD_PROVIDES_INTERRUPTIONS + this_thread::interruption_point(); +#endif + if(res) + { + boost::throw_exception(condition_error(res, "boost::condition_variable_any::wait() failed in pthread_cond_wait")); + } + } + + template + void wait(lock_type& m,predicate_type pred) + { + while(!pred()) wait(m); + } + +#if defined BOOST_THREAD_USES_DATETIME + template + bool timed_wait(lock_type& m,boost::system_time const& abs_time) + { + struct timespec const timeout=detail::to_timespec(abs_time); + return do_wait_until(m, timeout); + } + template + bool timed_wait(lock_type& m,xtime const& abs_time) + { + return timed_wait(m,system_time(abs_time)); + } + + template + bool timed_wait(lock_type& m,duration_type const& wait_duration) + { + return timed_wait(m,get_system_time()+wait_duration); + } + + template + bool timed_wait(lock_type& m,boost::system_time const& abs_time, predicate_type pred) + { + while (!pred()) + { + if(!timed_wait(m, abs_time)) + return pred(); + } + return true; + } + + template + bool timed_wait(lock_type& m,xtime const& abs_time, predicate_type pred) + { + return timed_wait(m,system_time(abs_time),pred); + } + + template + bool timed_wait(lock_type& m,duration_type const& wait_duration,predicate_type pred) + { + return timed_wait(m,get_system_time()+wait_duration,pred); + } +#endif +#ifndef BOOST_THREAD_HAS_CONDATTR_SET_CLOCK_MONOTONIC + +#ifdef BOOST_THREAD_USES_CHRONO + template + cv_status + wait_until( + lock_type& lock, + const chrono::time_point& t) + { + using namespace chrono; + typedef time_point nano_sys_tmpt; + wait_until(lock, + nano_sys_tmpt(ceil(t.time_since_epoch()))); + return system_clock::now() < t ? cv_status::no_timeout : + cv_status::timeout; + } + + template + cv_status + wait_until( + lock_type& lock, + const chrono::time_point& t) + { + using namespace chrono; + system_clock::time_point s_now = system_clock::now(); + typename Clock::time_point c_now = Clock::now(); + wait_until(lock, s_now + ceil(t - c_now)); + return Clock::now() < t ? cv_status::no_timeout : cv_status::timeout; + } + + template + cv_status + wait_for( + lock_type& lock, + const chrono::duration& d) + { + using namespace chrono; + system_clock::time_point s_now = system_clock::now(); + steady_clock::time_point c_now = steady_clock::now(); + wait_until(lock, s_now + ceil(d)); + return steady_clock::now() - c_now < d ? cv_status::no_timeout : + cv_status::timeout; + + } + + template + cv_status wait_until( + lock_type& lk, + chrono::time_point tp) + { + using namespace chrono; + nanoseconds d = tp.time_since_epoch(); + timespec ts = boost::detail::to_timespec(d); + if (do_wait_until(lk, ts)) return cv_status::no_timeout; + else return cv_status::timeout; + } +#endif +#else // defined BOOST_THREAD_HAS_CONDATTR_SET_CLOCK_MONOTONIC +#ifdef BOOST_THREAD_USES_CHRONO + + template + cv_status + wait_until( + lock_type& lock, + const chrono::time_point& t) + { + using namespace chrono; + typedef time_point nano_sys_tmpt; + wait_until(lock, + nano_sys_tmpt(ceil(t.time_since_epoch()))); + return steady_clock::now() < t ? cv_status::no_timeout : + cv_status::timeout; + } + + template + cv_status + wait_until( + lock_type& lock, + const chrono::time_point& t) + { + using namespace chrono; + steady_clock::time_point s_now = steady_clock::now(); + typename Clock::time_point c_now = Clock::now(); + wait_until(lock, s_now + ceil(t - c_now)); + return Clock::now() < t ? cv_status::no_timeout : cv_status::timeout; + } + + template + cv_status + wait_for( + lock_type& lock, + const chrono::duration& d) + { + using namespace chrono; + steady_clock::time_point c_now = steady_clock::now(); + wait_until(lock, c_now + ceil(d)); + return steady_clock::now() - c_now < d ? cv_status::no_timeout : + cv_status::timeout; + } + + template + inline cv_status wait_until( + lock_type& lock, + chrono::time_point tp) + { + using namespace chrono; + nanoseconds d = tp.time_since_epoch(); + timespec ts = boost::detail::to_timespec(d); + if (do_wait_until(lock, ts)) return cv_status::no_timeout; + else return cv_status::timeout; + } + +#endif +#endif // defined BOOST_THREAD_HAS_CONDATTR_SET_CLOCK_MONOTONIC + +#ifdef BOOST_THREAD_USES_CHRONO + template + bool + wait_until( + lock_type& lock, + const chrono::time_point& t, + Predicate pred) + { + while (!pred()) + { + if (wait_until(lock, t) == cv_status::timeout) + return pred(); + } + return true; + } + + template + bool + wait_for( + lock_type& lock, + const chrono::duration& d, + Predicate pred) + { + return wait_until(lock, chrono::steady_clock::now() + d, boost::move(pred)); + } +#endif + + void notify_one() BOOST_NOEXCEPT + { + boost::pthread::pthread_mutex_scoped_lock internal_lock(&internal_mutex); + BOOST_VERIFY(!pthread_cond_signal(&cond)); + } + + void notify_all() BOOST_NOEXCEPT + { + boost::pthread::pthread_mutex_scoped_lock internal_lock(&internal_mutex); + BOOST_VERIFY(!pthread_cond_broadcast(&cond)); + } + private: // used by boost::thread::try_join_until + + template + bool do_wait_until( + lock_type& m, + struct timespec const &timeout) + { + int res=0; + { + thread_cv_detail::lock_on_exit guard; +#if defined BOOST_THREAD_PROVIDES_INTERRUPTIONS + detail::interruption_checker check_for_interruption(&internal_mutex,&cond); +#else + boost::pthread::pthread_mutex_scoped_lock check_for_interruption(&internal_mutex); +#endif + guard.activate(m); + res=pthread_cond_timedwait(&cond,&internal_mutex,&timeout); + } +#if defined BOOST_THREAD_PROVIDES_INTERRUPTIONS + this_thread::interruption_point(); +#endif + if(res==ETIMEDOUT) + { + return false; + } + if(res) + { + boost::throw_exception(condition_error(res, "boost::condition_variable_any::do_wait_until() failed in pthread_cond_timedwait")); + } + return true; + } + }; + +} + +#include + +#endif diff --git a/clients/roscpp/include/boost_161_pthread_condition_variable_fwd.h b/clients/roscpp/include/boost_161_pthread_condition_variable_fwd.h new file mode 100644 index 0000000000..2e4e4c6761 --- /dev/null +++ b/clients/roscpp/include/boost_161_pthread_condition_variable_fwd.h @@ -0,0 +1,378 @@ +#ifndef BOOST_THREAD_PTHREAD_CONDITION_VARIABLE_FWD_HPP +#define BOOST_THREAD_PTHREAD_CONDITION_VARIABLE_FWD_HPP +// Distributed under the Boost Software License, Version 1.0. (See +// accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// (C) Copyright 2007-8 Anthony Williams +// (C) Copyright 2011-2012 Vicente J. Botet Escriba + +// define to check if this backported version was included +#define USING_BACKPORTED_BOOST_CONDITION_VARIABLE 1 + +#include +#include +#include +#include +#include +#include +#include +#include +#if defined BOOST_THREAD_USES_DATETIME +#include +#endif + +#ifdef BOOST_THREAD_USES_CHRONO +#include +#include +#endif +#include +#include + +#include + +namespace boost +{ + namespace detail { + inline int monotonic_pthread_cond_init(pthread_cond_t& cond) { + +#ifdef BOOST_THREAD_HAS_CONDATTR_SET_CLOCK_MONOTONIC + pthread_condattr_t attr; + int res = pthread_condattr_init(&attr); + if (res) + { + return res; + } + pthread_condattr_setclock(&attr, CLOCK_MONOTONIC); + res=pthread_cond_init(&cond,&attr); + pthread_condattr_destroy(&attr); + return res; +#else + return pthread_cond_init(&cond,NULL); +#endif + + } + } + + class condition_variable + { + private: +#if defined BOOST_THREAD_PROVIDES_INTERRUPTIONS + pthread_mutex_t internal_mutex; +#endif + pthread_cond_t cond; + + public: + //private: // used by boost::thread::try_join_until + + inline bool do_wait_until( + unique_lock& lock, + struct timespec const &timeout); + + bool do_wait_for( + unique_lock& lock, + struct timespec const &timeout) + { +#if ! defined BOOST_THREAD_USEFIXES_TIMESPEC + return do_wait_until(lock, boost::detail::timespec_plus(timeout, boost::detail::timespec_now())); +#elif ! defined BOOST_THREAD_HAS_CONDATTR_SET_CLOCK_MONOTONIC + //using namespace chrono; + //nanoseconds ns = chrono::system_clock::now().time_since_epoch(); + + struct timespec ts = boost::detail::timespec_now_realtime(); + //ts.tv_sec = static_cast(chrono::duration_cast(ns).count()); + //ts.tv_nsec = static_cast((ns - chrono::duration_cast(ns)).count()); + return do_wait_until(lock, boost::detail::timespec_plus(timeout, ts)); +#else + // old behavior was fine for monotonic + return do_wait_until(lock, boost::detail::timespec_plus(timeout, boost::detail::timespec_now_realtime())); +#endif + } + + public: + BOOST_THREAD_NO_COPYABLE(condition_variable) + condition_variable() + { + int res; +#if defined BOOST_THREAD_PROVIDES_INTERRUPTIONS + res=pthread_mutex_init(&internal_mutex,NULL); + if(res) + { + boost::throw_exception(thread_resource_error(res, "boost::condition_variable::condition_variable() constructor failed in pthread_mutex_init")); + } +#endif + res = detail::monotonic_pthread_cond_init(cond); + if (res) + { +#if defined BOOST_THREAD_PROVIDES_INTERRUPTIONS + BOOST_VERIFY(!pthread_mutex_destroy(&internal_mutex)); +#endif + boost::throw_exception(thread_resource_error(res, "boost::condition_variable::condition_variable() constructor failed in detail::monotonic_pthread_cond_init")); + } + } + ~condition_variable() + { + int ret; +#if defined BOOST_THREAD_PROVIDES_INTERRUPTIONS + do { + ret = pthread_mutex_destroy(&internal_mutex); + } while (ret == EINTR); + BOOST_ASSERT(!ret); +#endif + do { + ret = pthread_cond_destroy(&cond); + } while (ret == EINTR); + BOOST_ASSERT(!ret); + } + + void wait(unique_lock& m); + + template + void wait(unique_lock& m,predicate_type pred) + { + while(!pred()) wait(m); + } + +#if defined BOOST_THREAD_USES_DATETIME + inline bool timed_wait( + unique_lock& m, + boost::system_time const& abs_time) + { +#if defined BOOST_THREAD_WAIT_BUG + struct timespec const timeout=detail::to_timespec(abs_time + BOOST_THREAD_WAIT_BUG); + return do_wait_until(m, timeout); +#else + struct timespec const timeout=detail::to_timespec(abs_time); + return do_wait_until(m, timeout); +#endif + } + bool timed_wait( + unique_lock& m, + xtime const& abs_time) + { + return timed_wait(m,system_time(abs_time)); + } + + template + bool timed_wait( + unique_lock& m, + duration_type const& wait_duration) + { + if (wait_duration.is_pos_infinity()) + { + wait(m); // or do_wait(m,detail::timeout::sentinel()); + return true; + } + if (wait_duration.is_special()) + { + return true; + } + return timed_wait(m,get_system_time()+wait_duration); + } + + template + bool timed_wait( + unique_lock& m, + boost::system_time const& abs_time,predicate_type pred) + { + while (!pred()) + { + if(!timed_wait(m, abs_time)) + return pred(); + } + return true; + } + + template + bool timed_wait( + unique_lock& m, + xtime const& abs_time,predicate_type pred) + { + return timed_wait(m,system_time(abs_time),pred); + } + + template + bool timed_wait( + unique_lock& m, + duration_type const& wait_duration,predicate_type pred) + { + if (wait_duration.is_pos_infinity()) + { + while (!pred()) + { + wait(m); // or do_wait(m,detail::timeout::sentinel()); + } + return true; + } + if (wait_duration.is_special()) + { + return pred(); + } + return timed_wait(m,get_system_time()+wait_duration,pred); + } +#endif + +#ifndef BOOST_THREAD_HAS_CONDATTR_SET_CLOCK_MONOTONIC + +#ifdef BOOST_THREAD_USES_CHRONO + + template + cv_status + wait_until( + unique_lock& lock, + const chrono::time_point& t) + { + using namespace chrono; + typedef time_point nano_sys_tmpt; + wait_until(lock, + nano_sys_tmpt(ceil(t.time_since_epoch()))); + return system_clock::now() < t ? cv_status::no_timeout : + cv_status::timeout; + } + + template + cv_status + wait_until( + unique_lock& lock, + const chrono::time_point& t) + { + using namespace chrono; + system_clock::time_point s_now = system_clock::now(); + typename Clock::time_point c_now = Clock::now(); + wait_until(lock, s_now + ceil(t - c_now)); + return Clock::now() < t ? cv_status::no_timeout : cv_status::timeout; + } + + + + template + cv_status + wait_for( + unique_lock& lock, + const chrono::duration& d) + { + using namespace chrono; + system_clock::time_point s_now = system_clock::now(); + steady_clock::time_point c_now = steady_clock::now(); + wait_until(lock, s_now + ceil(d)); + return steady_clock::now() - c_now < d ? cv_status::no_timeout : + cv_status::timeout; + + } + + inline cv_status wait_until( + unique_lock& lk, + chrono::time_point tp) + { + using namespace chrono; + nanoseconds d = tp.time_since_epoch(); + timespec ts = boost::detail::to_timespec(d); + if (do_wait_until(lk, ts)) return cv_status::no_timeout; + else return cv_status::timeout; + } +#endif + +#else // defined BOOST_THREAD_HAS_CONDATTR_SET_CLOCK_MONOTONIC +#ifdef BOOST_THREAD_USES_CHRONO + + template + cv_status + wait_until( + unique_lock& lock, + const chrono::time_point& t) + { + using namespace chrono; + typedef time_point nano_sys_tmpt; + wait_until(lock, + nano_sys_tmpt(ceil(t.time_since_epoch()))); + return steady_clock::now() < t ? cv_status::no_timeout : + cv_status::timeout; + } + + template + cv_status + wait_until( + unique_lock& lock, + const chrono::time_point& t) + { + using namespace chrono; + steady_clock::time_point s_now = steady_clock::now(); + typename Clock::time_point c_now = Clock::now(); + wait_until(lock, s_now + ceil(t - c_now)); + return Clock::now() < t ? cv_status::no_timeout : cv_status::timeout; + } + + template + cv_status + wait_for( + unique_lock& lock, + const chrono::duration& d) + { + using namespace chrono; + steady_clock::time_point c_now = steady_clock::now(); + wait_until(lock, c_now + ceil(d)); + return steady_clock::now() - c_now < d ? cv_status::no_timeout : + cv_status::timeout; + } + + inline cv_status wait_until( + unique_lock& lk, + chrono::time_point tp) + { + using namespace chrono; + nanoseconds d = tp.time_since_epoch(); + timespec ts = boost::detail::to_timespec(d); + if (do_wait_until(lk, ts)) return cv_status::no_timeout; + else return cv_status::timeout; + } +#endif + +#endif // defined BOOST_THREAD_HAS_CONDATTR_SET_CLOCK_MONOTONIC + +#ifdef BOOST_THREAD_USES_CHRONO + template + bool + wait_until( + unique_lock& lock, + const chrono::time_point& t, + Predicate pred) + { + while (!pred()) + { + if (wait_until(lock, t) == cv_status::timeout) + return pred(); + } + return true; + } + + template + bool + wait_for( + unique_lock& lock, + const chrono::duration& d, + Predicate pred) + { + return wait_until(lock, chrono::steady_clock::now() + d, boost::move(pred)); + } +#endif + +#define BOOST_THREAD_DEFINES_CONDITION_VARIABLE_NATIVE_HANDLE + typedef pthread_cond_t* native_handle_type; + native_handle_type native_handle() + { + return &cond; + } + + void notify_one() BOOST_NOEXCEPT; + void notify_all() BOOST_NOEXCEPT; + + + }; + + BOOST_THREAD_DECL void notify_all_at_thread_exit(condition_variable& cond, unique_lock lk); + +} + + +#include + +#endif diff --git a/clients/roscpp/include/ros/forwards.h b/clients/roscpp/include/ros/forwards.h index 9095ce55e2..8ac7406b1b 100644 --- a/clients/roscpp/include/ros/forwards.h +++ b/clients/roscpp/include/ros/forwards.h @@ -161,6 +161,24 @@ struct WallTimerEvent }; typedef boost::function WallTimerCallback; +/** + * \brief Structure passed as a parameter to the callback invoked by a ros::SteadyTimer + */ +struct SteadyTimerEvent +{ + SteadyTime last_expected; ///< In a perfect world, this is when the last callback should have happened + SteadyTime last_real; ///< When the last callback actually happened + + SteadyTime current_expected; ///< In a perfect world, this is when the current callback should be happening + SteadyTime current_real; ///< This is when the current callback was actually called (SteadyTime::now() as of the beginning of the callback) + + struct + { + WallDuration last_duration; ///< How long the last callback ran for + } profile; +}; +typedef boost::function SteadyTimerCallback; + class ServiceManager; typedef boost::shared_ptr ServiceManagerPtr; class TopicManager; diff --git a/clients/roscpp/include/ros/internal_timer_manager.h b/clients/roscpp/include/ros/internal_timer_manager.h index 5f33dfcf97..44e23c2d56 100644 --- a/clients/roscpp/include/ros/internal_timer_manager.h +++ b/clients/roscpp/include/ros/internal_timer_manager.h @@ -36,7 +36,7 @@ namespace ros { template class TimerManager; -typedef TimerManager InternalTimerManager; +typedef TimerManager InternalTimerManager; typedef boost::shared_ptr InternalTimerManagerPtr; ROSCPP_DECL void initInternalTimerManager(); diff --git a/clients/roscpp/include/ros/node_handle.h b/clients/roscpp/include/ros/node_handle.h index 638011458b..fcb6c783ab 100644 --- a/clients/roscpp/include/ros/node_handle.h +++ b/clients/roscpp/include/ros/node_handle.h @@ -36,6 +36,7 @@ #include "ros/timer.h" #include "ros/rate.h" #include "ros/wall_timer.h" +#include "ros/steady_timer.h" #include "ros/advertise_options.h" #include "ros/advertise_service_options.h" #include "ros/subscribe_options.h" @@ -1466,6 +1467,85 @@ if (service) // Enter if advertised service is valid */ WallTimer createWallTimer(WallTimerOptions& ops) const; + ////////////////////////////////////////////////////////////////////////////////////////////////////////////// + // Versions of createSteadyTimer() + ////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + /** + * \brief Create a timer which will call a callback at the specified rate, using wall time to determine + * when to call the callback instead of ROS time. + * This variant takes a class member function, and a bare pointer to the object to call the method on. + * + * When the Timer (and all copies of it) returned goes out of scope, the timer will automatically + * be stopped, and the callback will no longer be called. + * + * \param period The period at which to call the callback + * \param callback The method to call + * \param obj The object to call the method on + * \param oneshot If true, this timer will only fire once + * \param autostart If true (default), return timer that is already started + */ + template + SteadyTimer createSteadyTimer(WallDuration period, void(T::*callback)(const SteadyTimerEvent&), T* obj, + bool oneshot = false, bool autostart = true) const + { + return createSteadyTimer(period, boost::bind(callback, obj, _1), oneshot, autostart); + } + + /** + * \brief Create a timer which will call a callback at the specified rate, using wall time to determine + * when to call the callback instead of ROS time. This variant takes + * a class member function, and a shared pointer to the object to call the method on. + * + * When the Timer (and all copies of it) returned goes out of scope, the timer will automatically + * be stopped, and the callback will no longer be called. + * + * \param period The period at which to call the callback + * \param callback The method to call + * \param obj The object to call the method on. Since this is a shared pointer, the object will + * automatically be tracked with a weak_ptr so that if it is deleted before the Timer goes out of + * scope the callback will no longer be called (and therefore will not crash). + * \param oneshot If true, this timer will only fire once + */ + template + SteadyTimer createSteadyTimer(WallDuration period, void(T::*callback)(const SteadyTimerEvent&), + const boost::shared_ptr& obj, + bool oneshot = false, bool autostart = true) const + { + SteadyTimerOptions ops(period, boost::bind(callback, obj.get(), _1), 0); + ops.tracked_object = obj; + ops.oneshot = oneshot; + ops.autostart = autostart; + return createSteadyTimer(ops); + } + + /** + * \brief Create a timer which will call a callback at the specified rate, using wall time to determine + * when to call the callback instead of ROS time. This variant takes + * anything that can be bound to a Boost.Function, including a bare function + * + * When the Timer (and all copies of it) returned goes out of scope, the timer will automatically + * be stopped, and the callback will no longer be called. + * + * \param period The period at which to call the callback + * \param callback The function to call + * \param oneshot If true, this timer will only fire once + */ + SteadyTimer createSteadyTimer(WallDuration period, const SteadyTimerCallback& callback, + bool oneshot = false, bool autostart = true) const; + + /** + * \brief Create a timer which will call a callback at the specified rate, using wall time to determine + * when to call the callback instead of ROS time. This variant allows + * the full range of TimerOptions. + * + * When the Timer (and all copies of it) returned goes out of scope, the timer will automatically + * be stopped, and the callback will no longer be called. + * + * \param ops The options to use when creating the timer + */ + SteadyTimer createSteadyTimer(SteadyTimerOptions& ops) const; + /** \brief Set an arbitrary XML/RPC value on the parameter server. * * \param key The key to be used in the parameter server's dictionary diff --git a/clients/roscpp/include/ros/steady_timer.h b/clients/roscpp/include/ros/steady_timer.h new file mode 100644 index 0000000000..c16f282895 --- /dev/null +++ b/clients/roscpp/include/ros/steady_timer.h @@ -0,0 +1,127 @@ +/* + * Copyright (C) 2017, Felix Ruess, Roboception GmbH + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the names of Stanford University or Willow Garage, Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef ROSCPP_STEADY_TIMER_H +#define ROSCPP_STEADY_TIMER_H + +#include "common.h" +#include "forwards.h" +#include "steady_timer_options.h" + +namespace ros +{ + +/** + * \brief Manages a steady-clock timer callback + * + * A SteadyTimer should always be created through a call to NodeHandle::createSteadyTimer(), or copied from one + * that was. Once all copies of a specific + * SteadyTimer go out of scope, the callback associated with that handle will stop + * being called. + */ +class ROSCPP_DECL SteadyTimer +{ +public: + SteadyTimer() {} + SteadyTimer(const SteadyTimer& rhs); + ~SteadyTimer(); + + /** + * \brief Start the timer. Does nothing if the timer is already started. + */ + void start(); + /** + * \brief Stop the timer. Once this call returns, no more callbacks will be called. Does + * nothing if the timer is already stopped. + */ + void stop(); + + /** + * \brief Returns whether or not the timer has any pending events to call. + */ + bool hasPending(); + + /** + * \brief Set the period of this timer + */ + void setPeriod(const WallDuration& period, bool reset=true); + + bool isValid() { return impl_ && impl_->isValid(); } + operator void*() { return isValid() ? (void *) 1 : (void *) 0; } + + bool operator<(const SteadyTimer& rhs) + { + return impl_ < rhs.impl_; + } + + bool operator==(const SteadyTimer& rhs) + { + return impl_ == rhs.impl_; + } + + bool operator!=(const SteadyTimer& rhs) + { + return impl_ != rhs.impl_; + } + +private: + SteadyTimer(const SteadyTimerOptions& ops); + + class Impl + { + public: + Impl(); + ~Impl(); + + bool isValid(); + bool hasPending(); + void setPeriod(const WallDuration &period, bool reset=true); + + void start(); + void stop(); + + bool started_; + int32_t timer_handle_; + + WallDuration period_; + SteadyTimerCallback callback_; + CallbackQueueInterface *callback_queue_; + VoidConstWPtr tracked_object_; + bool has_tracked_object_; + bool oneshot_; + }; + typedef boost::shared_ptr ImplPtr; + typedef boost::weak_ptr ImplWPtr; + + ImplPtr impl_; + + friend class NodeHandle; +}; + +} + +#endif diff --git a/clients/roscpp/include/ros/steady_timer_options.h b/clients/roscpp/include/ros/steady_timer_options.h new file mode 100644 index 0000000000..e93a973de5 --- /dev/null +++ b/clients/roscpp/include/ros/steady_timer_options.h @@ -0,0 +1,86 @@ +/* + * Copyright (C) 2017, Felix Ruess, Roboception GmbH + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the names of Stanford University or Willow Garage, Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef ROSCPP_STEADY_TIMER_OPTIONS_H +#define ROSCPP_STEADY_TIMER_OPTIONS_H + +#include "common.h" +#include "ros/forwards.h" + +namespace ros +{ + +/** + * \brief Encapsulates all options available for starting a timer + */ +struct ROSCPP_DECL SteadyTimerOptions +{ + SteadyTimerOptions() + : period(0.1) + , callback_queue(0) + , oneshot(false) + , autostart(true) + { + } + + /* + * \brief Constructor + * \param + */ + SteadyTimerOptions(WallDuration _period, const SteadyTimerCallback& _callback, CallbackQueueInterface* _queue, + bool oneshot = false, bool autostart = true) + : period(_period) + , callback(_callback) + , callback_queue(_queue) + , oneshot(oneshot) + , autostart(autostart) + {} + + WallDuration period; ///< The period to call the callback at + SteadyTimerCallback callback; ///< The callback to call + + CallbackQueueInterface* callback_queue; ///< Queue to add callbacks to. If NULL, the global callback queue will be used + + /** + * A shared pointer to an object to track for these callbacks. If set, the a weak_ptr will be created to this object, + * and if the reference count goes to 0 the subscriber callbacks will not get called. + * + * \note Note that setting this will cause a new reference to be added to the object before the + * callback, and for it to go out of scope (and potentially be deleted) in the code path (and therefore + * thread) that the callback is invoked from. + */ + VoidConstPtr tracked_object; + + bool oneshot; + bool autostart; +}; + + +} + +#endif + diff --git a/clients/roscpp/include/ros/timer_manager.h b/clients/roscpp/include/ros/timer_manager.h index e5da5fccdd..27f8ca1f64 100644 --- a/clients/roscpp/include/ros/timer_manager.h +++ b/clients/roscpp/include/ros/timer_manager.h @@ -28,6 +28,21 @@ #ifndef ROSCPP_TIMER_MANAGER_H #define ROSCPP_TIMER_MANAGER_H +// check if we might need to include our own backported version boost::condition_variable +// in order to use CLOCK_MONOTONIC for the SteadyTimer +// the include order here is important! +#ifdef BOOST_THREAD_HAS_CONDATTR_SET_CLOCK_MONOTONIC +#include +#if BOOST_VERSION < 106100 +// use backported version of boost condition variable, see https://svn.boost.org/trac/boost/ticket/6377 +#include "boost_161_condition_variable.h" +#else // Boost version is 1.61 or greater and has the steady clock fixes +#include +#endif +#else // !BOOST_THREAD_HAS_CONDATTR_SET_CLOCK_MONOTONIC +#include +#endif // BOOST_THREAD_HAS_CONDATTR_SET_CLOCK_MONOTONIC + #include "ros/forwards.h" #include "ros/time.h" #include "ros/file_log.h" @@ -35,7 +50,6 @@ #include #include #include -#include #include "ros/assert.h" #include "ros/callback_queue_interface.h" @@ -180,9 +194,9 @@ class TimerManager event.current_real = T::now(); event.profile.last_duration = info->last_cb_duration; - WallTime cb_start = WallTime::now(); + SteadyTime cb_start = SteadyTime::now(); info->callback(event); - WallTime cb_end = WallTime::now(); + SteadyTime cb_end = SteadyTime::now(); info->last_cb_duration = cb_end - cb_start; info->last_real = event.current_real; diff --git a/clients/roscpp/include/ros/transport_publisher_link.h b/clients/roscpp/include/ros/transport_publisher_link.h index a2bfe87803..7d462920cf 100644 --- a/clients/roscpp/include/ros/transport_publisher_link.h +++ b/clients/roscpp/include/ros/transport_publisher_link.h @@ -42,7 +42,7 @@ typedef boost::weak_ptr SubscriptionWPtr; class Connection; typedef boost::shared_ptr ConnectionPtr; -struct WallTimerEvent; +struct SteadyTimerEvent; /** * \brief Handles a connection to a single publisher on a given topic. Receives messages from a publisher @@ -76,14 +76,14 @@ class ROSCPP_DECL TransportPublisherLink : public PublisherLink void onMessageLength(const ConnectionPtr& conn, const boost::shared_array& buffer, uint32_t size, bool success); void onMessage(const ConnectionPtr& conn, const boost::shared_array& buffer, uint32_t size, bool success); - void onRetryTimer(const ros::WallTimerEvent&); + void onRetryTimer(const ros::SteadyTimerEvent&); ConnectionPtr connection_; int32_t retry_timer_handle_; bool needs_retry_; WallDuration retry_period_; - WallTime next_retry_; + SteadyTime next_retry_; bool dropping_; }; typedef boost::shared_ptr TransportPublisherLinkPtr; diff --git a/clients/roscpp/package.xml b/clients/roscpp/package.xml index c914382840..cfa20593da 100644 --- a/clients/roscpp/package.xml +++ b/clients/roscpp/package.xml @@ -31,7 +31,7 @@ roscpp_traits rosgraph_msgs roslang - rostime + rostime std_msgs xmlrpcpp @@ -41,7 +41,7 @@ roscpp_serialization roscpp_traits rosgraph_msgs - rostime + rostime std_msgs xmlrpcpp diff --git a/clients/roscpp/src/libros/internal_timer_manager.cpp b/clients/roscpp/src/libros/internal_timer_manager.cpp index 5f3ba278d0..facb4174c8 100644 --- a/clients/roscpp/src/libros/internal_timer_manager.cpp +++ b/clients/roscpp/src/libros/internal_timer_manager.cpp @@ -25,8 +25,19 @@ * POSSIBILITY OF SUCH DAMAGE. */ -#include "ros/internal_timer_manager.h" +// make sure we use CLOCK_MONOTONIC for the condition variable +#define BOOST_THREAD_HAS_CONDATTR_SET_CLOCK_MONOTONIC + #include "ros/timer_manager.h" +#include "ros/internal_timer_manager.h" + +// check if we have really included the backported boost condition variable +// just in case someone messes with the include order... +#if BOOST_VERSION < 106100 +#ifndef USING_BACKPORTED_BOOST_CONDITION_VARIABLE +#error "steady timer needs boost version >= 1.61 or the backported headers!" +#endif +#endif namespace ros { diff --git a/clients/roscpp/src/libros/master.cpp b/clients/roscpp/src/libros/master.cpp index 04d73058f5..c0e2e10d06 100644 --- a/clients/roscpp/src/libros/master.cpp +++ b/clients/roscpp/src/libros/master.cpp @@ -178,7 +178,7 @@ boost::mutex g_xmlrpc_call_mutex; bool execute(const std::string& method, const XmlRpc::XmlRpcValue& request, XmlRpc::XmlRpcValue& response, XmlRpc::XmlRpcValue& payload, bool wait_for_master) { - ros::WallTime start_time = ros::WallTime::now(); + ros::SteadyTime start_time = ros::SteadyTime::now(); std::string master_host = getHost(); uint32_t master_port = getPort(); @@ -213,7 +213,7 @@ bool execute(const std::string& method, const XmlRpc::XmlRpcValue& request, XmlR return false; } - if (!g_retry_timeout.isZero() && (ros::WallTime::now() - start_time) >= g_retry_timeout) + if (!g_retry_timeout.isZero() && (ros::SteadyTime::now() - start_time) >= g_retry_timeout) { ROS_ERROR("[%s] Timed out trying to connect to the master after [%f] seconds", method.c_str(), g_retry_timeout.toSec()); XMLRPCManager::instance()->releaseXMLRPCClient(c); diff --git a/clients/roscpp/src/libros/node_handle.cpp b/clients/roscpp/src/libros/node_handle.cpp index 7dc079749c..67caeee7fe 100644 --- a/clients/roscpp/src/libros/node_handle.cpp +++ b/clients/roscpp/src/libros/node_handle.cpp @@ -29,10 +29,12 @@ #include "ros/this_node.h" #include "ros/service.h" #include "ros/callback_queue.h" -#include "ros/timer_manager.h" #include "ros/time.h" #include "ros/rate.h" +#include "ros/timer.h" +#include "ros/wall_timer.h" +#include "ros/steady_timer.h" #include "ros/xmlrpc_manager.h" #include "ros/topic_manager.h" @@ -449,6 +451,37 @@ WallTimer NodeHandle::createWallTimer(WallTimerOptions& ops) const return timer; } +SteadyTimer NodeHandle::createSteadyTimer(WallDuration period, const SteadyTimerCallback& callback, + bool oneshot, bool autostart) const +{ + SteadyTimerOptions ops; + ops.period = period; + ops.callback = callback; + ops.oneshot = oneshot; + ops.autostart = autostart; + return createSteadyTimer(ops); +} + +SteadyTimer NodeHandle::createSteadyTimer(SteadyTimerOptions& ops) const +{ + if (ops.callback_queue == 0) + { + if (callback_queue_) + { + ops.callback_queue = callback_queue_; + } + else + { + ops.callback_queue = getGlobalCallbackQueue(); + } + } + + SteadyTimer timer(ops); + if (ops.autostart) + timer.start(); + return timer; +} + void NodeHandle::shutdown() { { diff --git a/clients/roscpp/src/libros/steady_timer.cpp b/clients/roscpp/src/libros/steady_timer.cpp new file mode 100644 index 0000000000..7621f42b45 --- /dev/null +++ b/clients/roscpp/src/libros/steady_timer.cpp @@ -0,0 +1,224 @@ +/* + * Copyright (C) 2017, Felix Ruess, Roboception GmbH + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the names of Stanford University or Willow Garage, Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +// make sure we use CLOCK_MONOTONIC for the condition variable +#define BOOST_THREAD_HAS_CONDATTR_SET_CLOCK_MONOTONIC + +#include "ros/steady_timer.h" +#include "ros/timer_manager.h" + +// check if we have really included the backported boost condition variable +// just in case someone messes with the include order... +#if BOOST_VERSION < 106100 +#ifndef USING_BACKPORTED_BOOST_CONDITION_VARIABLE +#error "steady timer needs boost version >= 1.61 or the backported headers!" +#endif +#endif + +namespace ros +{ + +// specialization for SteadyTimer, to make sure we use a version with wait_until that uses the monotonic clock +template<> +void TimerManager::threadFunc() +{ + SteadyTime current; + while (!quit_) + { + SteadyTime sleep_end; + + boost::mutex::scoped_lock lock(timers_mutex_); + + current = SteadyTime::now(); + + { + boost::mutex::scoped_lock waitlock(waiting_mutex_); + + if (waiting_.empty()) + { + sleep_end = current + WallDuration(0.1); + } + else + { + TimerInfoPtr info = findTimer(waiting_.front()); + + while (!waiting_.empty() && info && info->next_expected <= current) + { + current = SteadyTime::now(); + + //ROS_DEBUG("Scheduling timer callback for timer [%d] of period [%f], [%f] off expected", info->handle, info->period.toSec(), (current - info->next_expected).toSec()); + CallbackInterfacePtr cb(boost::make_shared(this, info, info->last_expected, info->last_real, info->next_expected)); + info->callback_queue->addCallback(cb, (uint64_t)info.get()); + + waiting_.pop_front(); + + if (waiting_.empty()) + { + break; + } + + info = findTimer(waiting_.front()); + } + + if (info) + { + sleep_end = info->next_expected; + } + } + } + + while (!new_timer_ && SteadyTime::now() < sleep_end && !quit_) + { + current = SteadyTime::now(); + + if (current >= sleep_end) + { + break; + } + + // requires boost 1.61 for wait_until to actually use the steady clock + // see: https://svn.boost.org/trac/boost/ticket/6377 + boost::chrono::steady_clock::time_point end_tp(boost::chrono::nanoseconds(sleep_end.toNSec())); + timers_cond_.wait_until(lock, end_tp); + } + + new_timer_ = false; + } +} + +SteadyTimer::Impl::Impl() + : started_(false) + , timer_handle_(-1) +{ } + +SteadyTimer::Impl::~Impl() +{ + ROS_DEBUG("SteadyTimer deregistering callbacks."); + stop(); +} + +void SteadyTimer::Impl::start() +{ + if (!started_) + { + VoidConstPtr tracked_object; + if (has_tracked_object_) + { + tracked_object = tracked_object_.lock(); + } + timer_handle_ = TimerManager::global().add(period_, callback_, callback_queue_, tracked_object, oneshot_); + started_ = true; + } +} + +void SteadyTimer::Impl::stop() +{ + if (started_) + { + started_ = false; + TimerManager::global().remove(timer_handle_); + timer_handle_ = -1; + } +} + +bool SteadyTimer::Impl::isValid() +{ + return !period_.isZero(); +} + +bool SteadyTimer::Impl::hasPending() +{ + if (!isValid() || timer_handle_ == -1) + { + return false; + } + + return TimerManager::global().hasPending(timer_handle_); +} + +void SteadyTimer::Impl::setPeriod(const WallDuration& period, bool reset) +{ + period_ = period; + TimerManager::global().setPeriod(timer_handle_, period, reset); +} + + +SteadyTimer::SteadyTimer(const SteadyTimerOptions& ops) +: impl_(new Impl) +{ + impl_->period_ = ops.period; + impl_->callback_ = ops.callback; + impl_->callback_queue_ = ops.callback_queue; + impl_->tracked_object_ = ops.tracked_object; + impl_->has_tracked_object_ = (ops.tracked_object != NULL); + impl_->oneshot_ = ops.oneshot; +} + +SteadyTimer::SteadyTimer(const SteadyTimer& rhs) +{ + impl_ = rhs.impl_; +} + +SteadyTimer::~SteadyTimer() +{ +} + +void SteadyTimer::start() +{ + if (impl_) + { + impl_->start(); + } +} + +void SteadyTimer::stop() +{ + if (impl_) + { + impl_->stop(); + } +} + +bool SteadyTimer::hasPending() +{ + if (impl_) + { + return impl_->hasPending(); + } + + return false; +} + +void SteadyTimer::setPeriod(const WallDuration& period, bool reset) +{ + if (impl_) + { + impl_->setPeriod(period, reset); + } +} + +} diff --git a/clients/roscpp/src/libros/transport_publisher_link.cpp b/clients/roscpp/src/libros/transport_publisher_link.cpp index 6e9b8785b4..092585d3f2 100644 --- a/clients/roscpp/src/libros/transport_publisher_link.cpp +++ b/clients/roscpp/src/libros/transport_publisher_link.cpp @@ -198,14 +198,14 @@ void TransportPublisherLink::onMessage(const ConnectionPtr& conn, const boost::s } } -void TransportPublisherLink::onRetryTimer(const ros::WallTimerEvent&) +void TransportPublisherLink::onRetryTimer(const ros::SteadyTimerEvent&) { if (dropping_) { return; } - if (needs_retry_ && WallTime::now() > next_retry_) + if (needs_retry_ && SteadyTime::now() > next_retry_) { retry_period_ = std::min(retry_period_ * 2, WallDuration(20)); needs_retry_ = false; @@ -268,12 +268,12 @@ void TransportPublisherLink::onConnectionDropped(const ConnectionPtr& conn, Conn ROS_ASSERT(!needs_retry_); needs_retry_ = true; - next_retry_ = WallTime::now() + retry_period_; + next_retry_ = SteadyTime::now() + retry_period_; if (retry_timer_handle_ == -1) { retry_period_ = WallDuration(0.1); - next_retry_ = WallTime::now() + retry_period_; + next_retry_ = SteadyTime::now() + retry_period_; // shared_from_this() shared_ptr is used to ensure TransportPublisherLink is not // destroyed in the middle of onRetryTimer execution retry_timer_handle_ = getInternalTimerManager()->add(WallDuration(retry_period_), diff --git a/test/test_roscpp/test/src/timer_callbacks.cpp b/test/test_roscpp/test/src/timer_callbacks.cpp index 9f2bc7ec5e..4f87907e95 100644 --- a/test/test_roscpp/test/src/timer_callbacks.cpp +++ b/test/test_roscpp/test/src/timer_callbacks.cpp @@ -54,6 +54,319 @@ using namespace test_roscpp; std::string g_node_name = "test_timer_callbacks"; + +/************************* SteadyTimer tests **********************/ + +class SteadyTimerHelper +{ + public: + SteadyTimerHelper(float period, bool oneshot = false) + : expected_period_(period) + , failed_(false) + , total_calls_(0) + , testing_period_(false) + , calls_before_testing_period_(0) + { + NodeHandle n; + timer_ = n.createSteadyTimer(expected_period_, &SteadyTimerHelper::callback, this, oneshot); + } + + void callback(const SteadyTimerEvent& e) + { + bool first = last_call_.isZero(); + SteadyTime last_call = last_call_; + last_call_ = SteadyTime::now(); + SteadyTime start = last_call_; + + if (!first) + { + if (fabsf(expected_next_call_.toSec() - start.toSec()) > 0.1f) + { + ROS_ERROR("Call came at wrong time (%f vs. %f)", expected_next_call_.toSec(), start.toSec()); + failed_ = true; + } + } + + if(testing_period_) + { + + // Inside callback, less than current period, reset=false + if(total_calls_ == calls_before_testing_period_) + { + WallDuration p(0.5); + pretendWork(0.15); + setPeriod(p); + } + + // Inside callback, greater than current period, reset=false + else if(total_calls_ == (calls_before_testing_period_+1)) + { + WallDuration p(0.25); + pretendWork(0.15); + setPeriod(p); + } + + // Inside callback, less than current period, reset=true + else if(total_calls_ == (calls_before_testing_period_+2)) + { + WallDuration p(0.5); + pretendWork(0.15); + setPeriod(p, true); + } + + // Inside callback, greater than current period, reset=true + else if(total_calls_ == (calls_before_testing_period_+3)) + { + WallDuration p(0.25); + pretendWork(0.15); + setPeriod(p, true); + } + } + else + { + expected_next_call_ = e.current_expected + expected_period_; + } + + SteadyTime end = SteadyTime::now(); + last_duration_ = end - start; + + ++total_calls_; + } + + void setPeriod(const WallDuration p, bool reset=false) + { + if(reset) + { + expected_next_call_ = SteadyTime::now() + p; + } + else + { + expected_next_call_ = last_call_ + p; + } + + timer_.setPeriod(p, reset); + expected_period_ = p; + } + + + void pretendWork(const float t) + { + ros::Rate r(1. / t); + r.sleep(); + } + + SteadyTime last_call_; + SteadyTime expected_next_call_; + WallDuration expected_period_; + WallDuration last_duration_; + + bool failed_; + + SteadyTimer timer_; + int32_t total_calls_; + + bool testing_period_; + int calls_before_testing_period_; +}; + +TEST(RoscppTimerCallbacks, singleSteadyTimeCallback) +{ + NodeHandle n; + SteadyTimerHelper helper1(0.01); + + WallDuration d(0.001f); + for (int32_t i = 0; i < 1000 && n.ok(); ++i) + { + spinOnce(); + d.sleep(); + } + + if (helper1.failed_) + { + FAIL(); + } + + if (helper1.total_calls_ < 99) + { + ROS_ERROR("Total calls: %d (expected at least 100)", helper1.total_calls_); + FAIL(); + } +} + +TEST(RoscppTimerCallbacks, multipleSteadyTimeCallbacks) +{ + NodeHandle n; + const int count = 100; + typedef boost::scoped_ptr HelperPtr; + HelperPtr helpers[count]; + for (int i = 0; i < count; ++i) + { + helpers[i].reset(new SteadyTimerHelper((float)(i + 1) * 0.1f)); + } + + WallDuration d(0.01f); + const int spin_count = 1000; + for (int32_t i = 0; i < spin_count && n.ok(); ++i) + { + spinOnce(); + d.sleep(); + } + + for (int i = 0; i < count; ++i) + { + if (helpers[i]->failed_) + { + ROS_ERROR("Helper %d failed", i); + FAIL(); + } + + int32_t expected_count = (spin_count * d.toSec()) / helpers[i]->expected_period_.toSec(); + if (helpers[i]->total_calls_ < (expected_count - 1)) + { + ROS_ERROR("Helper %d total calls: %d (at least %d expected)", i, helpers[i]->total_calls_, expected_count); + FAIL(); + } + } +} + +TEST(RoscppTimerCallbacks, steadySetPeriod) +{ + NodeHandle n; + WallDuration period(0.5); + SteadyTimerHelper helper(period.toSec()); + Rate r(100); + + // Let the callback occur once before getting started + while(helper.total_calls_ < 1) + { + spinOnce(); + r.sleep(); + } + + helper.pretendWork(0.1); + + // outside callback, new period < old period, reset = false + Duration wait(0.5); + WallDuration p(0.25); + helper.setPeriod(p); + while(helper.total_calls_ < 2) + { + spinOnce(); + r.sleep(); + } + + helper.pretendWork(0.1); + + // outside callback, new period > old period, reset = false + WallDuration p2(0.5); + helper.setPeriod(p); + while(helper.total_calls_ < 3) + { + spinOnce(); + r.sleep(); + } + + helper.pretendWork(0.1); + + // outside callback, new period < old period, reset = true + WallDuration p3(0.25); + helper.setPeriod(p, true); + while(helper.total_calls_ < 4) + { + spinOnce(); + r.sleep(); + } + + helper.pretendWork(0.1); + + // outside callback, new period > old period, reset = true + WallDuration p4(0.5); + helper.setPeriod(p, true); + while(helper.total_calls_ < 5) + { + spinOnce(); + r.sleep(); + } + + // Test calling setPeriod inside callback + helper.calls_before_testing_period_ = helper.total_calls_; + int total = helper.total_calls_ + 5; + helper.testing_period_ = true; + while(helper.total_calls_ < total) + { + spinOnce(); + r.sleep(); + } + helper.testing_period_ = false; + + + if(helper.failed_) + { + ROS_ERROR("Helper failed in setPeriod"); + FAIL(); + } +} + +TEST(RoscppTimerCallbacks, stopSteadyTimer) +{ + NodeHandle n; + SteadyTimerHelper helper(0.001); + + for (int32_t i = 0; i < 1000 && n.ok(); ++i) + { + WallDuration(0.001).sleep(); + spinOnce(); + } + + ASSERT_GT(helper.total_calls_, 0); + int32_t last_count = helper.total_calls_; + helper.timer_.stop(); + + for (int32_t i = 0; i < 1000 && n.ok(); ++i) + { + WallDuration(0.001).sleep(); + spinOnce(); + } + + ASSERT_EQ(last_count, helper.total_calls_); +} + +int32_t g_steady_count = 0; +void steadyTimerCallback(const ros::SteadyTimerEvent&) +{ + ++g_steady_count; +} + +TEST(RoscppTimerCallbacks, steadyStopThenSpin) +{ + g_steady_count = 0; + NodeHandle n; + ros::SteadyTimer timer = n.createSteadyTimer(ros::WallDuration(0.001), steadyTimerCallback); + + WallDuration(0.1).sleep(); + timer.stop(); + + spinOnce(); + + ASSERT_EQ(g_steady_count, 0); +} + +TEST(RoscppTimerCallbacks, oneShotSteadyTimer) +{ + NodeHandle n; + SteadyTimerHelper helper(0.001, true); + + for (int32_t i = 0; i < 1000 && n.ok(); ++i) + { + WallDuration(0.001).sleep(); + spinOnce(); + } + + ASSERT_EQ(helper.total_calls_, 1); +} + +/************************* WallTimer tests **********************/ + class WallTimerHelper { public: From d6acee1991d6b6e3d20ce444a5dd8c96d787d0dd Mon Sep 17 00:00:00 2001 From: Dirk Thomas Date: Fri, 21 Jul 2017 10:38:40 -0700 Subject: [PATCH 26/72] Close CLOSE_WAIT sockets by default (#1104) * Add close_half_closed_sockets function * Call close_half_closed_sockets in xmlrpcapi by default --- tools/rosmaster/src/rosmaster/util.py | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/tools/rosmaster/src/rosmaster/util.py b/tools/rosmaster/src/rosmaster/util.py index 5b9e3d18f5..ee7d609ed5 100644 --- a/tools/rosmaster/src/rosmaster/util.py +++ b/tools/rosmaster/src/rosmaster/util.py @@ -49,6 +49,8 @@ monkey_patch() del monkey_patch +import socket + _proxies = {} #cache ServerProxys def xmlrpcapi(uri): """ @@ -62,9 +64,19 @@ def xmlrpcapi(uri): return None if not uri in _proxies: _proxies[uri] = ServerProxy(uri) + close_half_closed_sockets() return _proxies[uri] +def close_half_closed_sockets(): + for proxy in _proxies.values(): + transport = proxy("transport") + if transport._connection and transport._connection[1] is not None and transport._connection[1].sock is not None: + state = transport._connection[1].sock.getsockopt(socket.SOL_TCP, socket.TCP_INFO) + if state == 8: # CLOSE_WAIT + transport.close() + + def remove_server_proxy(uri): if uri in _proxies: del _proxies[uri] From 687dc905076d2686d196d2026b1adba7452afb9b Mon Sep 17 00:00:00 2001 From: Dirk Thomas Date: Fri, 21 Jul 2017 11:00:19 -0700 Subject: [PATCH 27/72] fix handling connections without indices --- tools/rosbag/src/rosbag/bag.py | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/tools/rosbag/src/rosbag/bag.py b/tools/rosbag/src/rosbag/bag.py index f907b0a53d..1f9cf36f3e 100644 --- a/tools/rosbag/src/rosbag/bag.py +++ b/tools/rosbag/src/rosbag/bag.py @@ -496,7 +496,8 @@ def get_start_time(self): else: if not self._connection_indexes: raise ROSBagException('Bag contains no message') - start_stamp = min([index[0].time.to_sec() for index in self._connection_indexes.values()]) + start_stamps = [index[0].time.to_sec() for index in self._connection_indexes.values() if index] + start_stamp = min(start_stamps) if start_stamps else 0 return start_stamp @@ -512,7 +513,8 @@ def get_end_time(self): else: if not self._connection_indexes: raise ROSBagException('Bag contains no message') - end_stamp = max([index[-1].time.to_sec() for index in self._connection_indexes.values()]) + end_stamps = [index[-1].time.to_sec() for index in self._connection_indexes.values() if index] + end_stamp = max(end_stamps) if end_stamps else 0 return end_stamp @@ -625,8 +627,10 @@ def __str__(self): start_stamp = self._chunks[ 0].start_time.to_sec() end_stamp = self._chunks[-1].end_time.to_sec() else: - start_stamp = min([index[ 0].time.to_sec() for index in self._connection_indexes.values()]) - end_stamp = max([index[-1].time.to_sec() for index in self._connection_indexes.values()]) + start_stamps = [index[0].time.to_sec() for index in self._connection_indexes.values() if index] + start_stamp = min(start_stamps) if start_stamps else 0 + end_stamps = [index[-1].time.to_sec() for index in self._connection_indexes.values() if index] + end_stamp = max(end_stamps) if end_stamps else 0 # Show duration duration = end_stamp - start_stamp @@ -808,8 +812,10 @@ def _get_yaml_info(self, key=None): start_stamp = self._chunks[ 0].start_time.to_sec() end_stamp = self._chunks[-1].end_time.to_sec() else: - start_stamp = min([index[ 0].time.to_sec() for index in self._connection_indexes.values()]) - end_stamp = max([index[-1].time.to_sec() for index in self._connection_indexes.values()]) + start_stamps = [index[0].time.to_sec() for index in self._connection_indexes.values() if index] + start_stamp = min(start_stamps) if start_stamps else 0 + end_stamps = [index[-1].time.to_sec() for index in self._connection_indexes.values() if index] + end_stamp = max(end_stamps) if end_stamps else 0 duration = end_stamp - start_stamp s += 'duration: %.6f\n' % duration From b13c1ffd26d57b7dc14834fce8aa77ef526e5117 Mon Sep 17 00:00:00 2001 From: Dirk Thomas Date: Fri, 21 Jul 2017 11:08:30 -0700 Subject: [PATCH 28/72] fix rostopic prining long integers --- tools/rostopic/src/rostopic/__init__.py | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/tools/rostopic/src/rostopic/__init__.py b/tools/rostopic/src/rostopic/__init__.py index f33bf0ab29..c32e33efff 100644 --- a/tools/rostopic/src/rostopic/__init__.py +++ b/tools/rostopic/src/rostopic/__init__.py @@ -64,6 +64,12 @@ #TODO: lazy-import rospy or move rospy-dependent routines to separate location import rospy +try: + long +except NameError: + long = int + + class ROSTopicException(Exception): """ Base exception class of rostopic-related errors @@ -687,7 +693,7 @@ def _sub_str_plot_fields(val, f, field_filter): """recursive helper function for _str_plot_fields""" # CSV type_ = type(val) - if type_ in (bool, int, float) or \ + if type_ in (bool, int, long, float) or \ isinstance(val, genpy.TVal): return f # duck-type check for messages @@ -708,7 +714,7 @@ def _sub_str_plot_fields(val, f, field_filter): val0 = val[0] type0 = type(val0) # no arrays of arrays - if type0 in (bool, int, float) or \ + if type0 in (bool, int, long, float) or \ isinstance(val0, genpy.TVal): return ','.join(["%s%s"%(f,x) for x in range(0,len(val))]) elif _isstring_type(type0): @@ -757,7 +763,7 @@ def _sub_str_plot(val, time_offset, field_filter): if type_ == bool: return '1' if val else '0' - elif type_ in (int, float) or \ + elif type_ in (int, long, float) or \ isinstance(val, genpy.TVal): if time_offset is not None and isinstance(val, genpy.Time): return str(val-time_offset) @@ -783,7 +789,7 @@ def _sub_str_plot(val, time_offset, field_filter): type0 = type(val0) if type0 == bool: return ','.join([('1' if v else '0') for v in val]) - elif type0 in (int, float) or \ + elif type0 in (int, long, float) or \ isinstance(val0, genpy.TVal): return ','.join([str(v) for v in val]) elif _isstring_type(type0): From 66a62cd90ee302537de21d1dcef44c7c8f6fc295 Mon Sep 17 00:00:00 2001 From: Dirk Thomas Date: Wed, 9 Aug 2017 10:49:39 -0700 Subject: [PATCH 29/72] update tests to match stringify changes --- test/test_rostopic/test/test_rostopic_unit.py | 4 ++-- tools/rostopic/test/check_rostopic_command_line_online.py | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/test/test_rostopic/test/test_rostopic_unit.py b/test/test_rostopic/test/test_rostopic_unit.py index 984341a161..1fcb6bc274 100644 --- a/test/test_rostopic/test/test_rostopic_unit.py +++ b/test/test_rostopic/test/test_rostopic_unit.py @@ -247,7 +247,7 @@ def test_strify_message(self): m = String() self.assertEquals("data: ''", strify_message(m, field_filter=f)) m = String('foo') - self.assertEquals('data: foo', strify_message(m, field_filter=f)) + self.assertEquals('data: "foo"', strify_message(m, field_filter=f)) m = TVals(Time(123, 456), Duration(78, 90)) v = yaml.load(strify_message(m, field_filter=f)) self.assertEquals({'t': {'secs': 123, 'nsecs': 456}, 'd': {'secs': 78, 'nsecs': 90}}, v) @@ -283,7 +283,7 @@ def test_strify_message(self): m = String() self.assertEquals("data: ''", strify_message(m, field_filter=f)) m = String('foo') - self.assertEquals('data: foo', strify_message(m, field_filter=f)) + self.assertEquals('data: "foo"', strify_message(m, field_filter=f)) m = TVals(Time(123, 456), Duration(78, 90)) v = yaml.load(strify_message(m, field_filter=f)) self.assertEquals({'t': {'secs': 123, 'nsecs': 456}, 'd': {'secs': 78, 'nsecs': 90}}, v) diff --git a/tools/rostopic/test/check_rostopic_command_line_online.py b/tools/rostopic/test/check_rostopic_command_line_online.py index 864965c164..2ec6fcd7fe 100755 --- a/tools/rostopic/test/check_rostopic_command_line_online.py +++ b/tools/rostopic/test/check_rostopic_command_line_online.py @@ -111,7 +111,7 @@ def test_rostopic(self): values = [n for n in values if n != '---'] self.assertEquals(count, len(values), "wrong number of echos in output:\n"+str(values)) for n in values: - self.assert_('data: hello world ' in n, n) + self.assert_('data: "hello world ' in n, n) if 0: #bw From 91b9f14ab05da365497194a1b82af2c54fc9aa8b Mon Sep 17 00:00:00 2001 From: Dirk Thomas Date: Wed, 9 Aug 2017 13:37:29 -0700 Subject: [PATCH 30/72] ignore headers with zero stamp in statistics --- clients/roscpp/src/libros/statistics.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/clients/roscpp/src/libros/statistics.cpp b/clients/roscpp/src/libros/statistics.cpp index 2b5811e5aa..2b0a1c299b 100644 --- a/clients/roscpp/src/libros/statistics.cpp +++ b/clients/roscpp/src/libros/statistics.cpp @@ -100,7 +100,10 @@ void StatisticsLogger::callback(const boost::shared_ptr& connection_he std_msgs::Header header; ros::serialization::IStream stream(m.message_start, m.num_bytes - (m.message_start - m.buf.get())); ros::serialization::deserialize(stream, header); - stats.age_list.push_back(received_time - header.stamp); + if (!header.stamp.isZero()) + { + stats.age_list.push_back(received_time - header.stamp); + } } catch (ros::serialization::StreamOverrunException& e) { From 6d7a78f68d0af3088a92142cad15bd85c6744dda Mon Sep 17 00:00:00 2001 From: Kirk MacTavish Date: Wed, 2 Aug 2017 16:51:52 -0400 Subject: [PATCH 31/72] Improves the stability of SteadyTimerHelper. Due to scheduling / resource contention, `sleep`s and `wait_until`s may be delayed. The `SteadyTimerHelper` test class was not robust to these delays, which was likely the cause of a failing test (`multipleSteadyTimeCallbacks` in `timer_callbacks.cpp`:220). --- test/test_roscpp/test/src/timer_callbacks.cpp | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/test/test_roscpp/test/src/timer_callbacks.cpp b/test/test_roscpp/test/src/timer_callbacks.cpp index 4f87907e95..ebae9de677 100644 --- a/test/test_roscpp/test/src/timer_callbacks.cpp +++ b/test/test_roscpp/test/src/timer_callbacks.cpp @@ -80,7 +80,10 @@ class SteadyTimerHelper if (!first) { - if (fabsf(expected_next_call_.toSec() - start.toSec()) > 0.1f) + double time_error = start.toSec() - expected_next_call_.toSec(); + // Strict check if called early, loose check if called late. + // The timed wait could be delayed due to scheduling/resources. + if (time_error > 1.0 || time_error < -0.01) { ROS_ERROR("Call came at wrong time (%f vs. %f)", expected_next_call_.toSec(), start.toSec()); failed_ = true; @@ -124,7 +127,9 @@ class SteadyTimerHelper } else { - expected_next_call_ = e.current_expected + expected_period_; + // If this call was very delayed (beyond the next period), the timer will be + // scheduled to call back immediately (next expected is set to the current time) + expected_next_call_ = std::max(e.current_expected + expected_period_, start); } SteadyTime end = SteadyTime::now(); From 22ac0f8bd4288e1c28cdbed0930a50f367495808 Mon Sep 17 00:00:00 2001 From: Kirk MacTavish Date: Fri, 11 Aug 2017 17:28:51 -0400 Subject: [PATCH 32/72] Improve steady timer tests (#1132) * improve SteadyTimer tests instead of checking when the callback was actually called, check for when it was added to the callback queue. This *should* make the test more reliable. * more tolerant and unified timer tests --- test/test_roscpp/test/src/timer_callbacks.cpp | 61 ++++--------------- 1 file changed, 11 insertions(+), 50 deletions(-) diff --git a/test/test_roscpp/test/src/timer_callbacks.cpp b/test/test_roscpp/test/src/timer_callbacks.cpp index ebae9de677..8ce262a48e 100644 --- a/test/test_roscpp/test/src/timer_callbacks.cpp +++ b/test/test_roscpp/test/src/timer_callbacks.cpp @@ -74,18 +74,16 @@ class SteadyTimerHelper void callback(const SteadyTimerEvent& e) { bool first = last_call_.isZero(); - SteadyTime last_call = last_call_; - last_call_ = SteadyTime::now(); - SteadyTime start = last_call_; + last_call_ = e.current_real; if (!first) { - double time_error = start.toSec() - expected_next_call_.toSec(); + double time_error = e.current_real.toSec() - e.current_expected.toSec(); // Strict check if called early, loose check if called late. - // The timed wait could be delayed due to scheduling/resources. - if (time_error > 1.0 || time_error < -0.01) + // Yes, this is very loose, but must pass in high-load, containerized/virtualized, contentious environments. + if (time_error > 5.0 || time_error < -0.01) { - ROS_ERROR("Call came at wrong time (%f vs. %f)", expected_next_call_.toSec(), start.toSec()); + ROS_ERROR("Call came at wrong time (expected: %f, actual %f)", e.current_expected.toSec(), e.current_real.toSec()); failed_ = true; } } @@ -125,30 +123,12 @@ class SteadyTimerHelper setPeriod(p, true); } } - else - { - // If this call was very delayed (beyond the next period), the timer will be - // scheduled to call back immediately (next expected is set to the current time) - expected_next_call_ = std::max(e.current_expected + expected_period_, start); - } - - SteadyTime end = SteadyTime::now(); - last_duration_ = end - start; ++total_calls_; } void setPeriod(const WallDuration p, bool reset=false) { - if(reset) - { - expected_next_call_ = SteadyTime::now() + p; - } - else - { - expected_next_call_ = last_call_ + p; - } - timer_.setPeriod(p, reset); expected_period_ = p; } @@ -161,9 +141,7 @@ class SteadyTimerHelper } SteadyTime last_call_; - SteadyTime expected_next_call_; WallDuration expected_period_; - WallDuration last_duration_; bool failed_; @@ -389,15 +367,16 @@ class WallTimerHelper void callback(const WallTimerEvent& e) { bool first = last_call_.isZero(); - WallTime last_call = last_call_; - last_call_ = WallTime::now(); - WallTime start = last_call_; + last_call_ = e.current_real; if (!first) { - if (fabsf(expected_next_call_.toSec() - start.toSec()) > 0.1f) + double time_error = e.current_real.toSec() - e.current_expected.toSec(); + // Strict check if called early, loose check if called late. + // Yes, this is very loose, but must pass in high-load, containerized/virtualized, contentious environments. + if (time_error > 5.0 || time_error < -0.01) { - ROS_ERROR("Call came at wrong time (%f vs. %f)", expected_next_call_.toSec(), start.toSec()); + ROS_ERROR("Call came at wrong time (expected: %f, actual %f)", e.current_expected.toSec(), e.current_real.toSec()); failed_ = true; } } @@ -437,28 +416,12 @@ class WallTimerHelper setPeriod(p, true); } } - else - { - expected_next_call_ = e.current_expected + expected_period_; - } - - WallTime end = WallTime::now(); - last_duration_ = end - start; ++total_calls_; } void setPeriod(const WallDuration p, bool reset=false) { - if(reset) - { - expected_next_call_ = WallTime::now() + p; - } - else - { - expected_next_call_ = last_call_ + p; - } - timer_.setPeriod(p, reset); expected_period_ = p; } @@ -471,9 +434,7 @@ class WallTimerHelper } WallTime last_call_; - WallTime expected_next_call_; WallDuration expected_period_; - WallDuration last_duration_; bool failed_; From 3e71a45ce6a7cca3f99db4523acf70ad567899e5 Mon Sep 17 00:00:00 2001 From: Felix Ruess Date: Sat, 12 Aug 2017 13:02:57 +0200 Subject: [PATCH 33/72] xmlrpc_manager: use SteadyTime for timeout --- clients/roscpp/include/ros/xmlrpc_manager.h | 2 +- clients/roscpp/src/libros/xmlrpc_manager.cpp | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/clients/roscpp/include/ros/xmlrpc_manager.h b/clients/roscpp/include/ros/xmlrpc_manager.h index 2dc5034c8f..b621e93dbb 100644 --- a/clients/roscpp/include/ros/xmlrpc_manager.h +++ b/clients/roscpp/include/ros/xmlrpc_manager.h @@ -80,7 +80,7 @@ class ROSCPP_DECL CachedXmlRpcClient } bool in_use_; - ros::WallTime last_use_time_; // for reaping + ros::SteadyTime last_use_time_; // for reaping XmlRpc::XmlRpcClient* client_; static const ros::WallDuration s_zombie_time_; // how long before it is toasted diff --git a/clients/roscpp/src/libros/xmlrpc_manager.cpp b/clients/roscpp/src/libros/xmlrpc_manager.cpp index 6a3829f76f..1aee46b1a5 100644 --- a/clients/roscpp/src/libros/xmlrpc_manager.cpp +++ b/clients/roscpp/src/libros/xmlrpc_manager.cpp @@ -336,10 +336,10 @@ XmlRpcClient* XMLRPCManager::getXMLRPCClient(const std::string &host, const int // hooray, it's pointing at our destination. re-use it. c = i->client_; i->in_use_ = true; - i->last_use_time_ = WallTime::now(); + i->last_use_time_ = SteadyTime::now(); break; } - else if (i->last_use_time_ + CachedXmlRpcClient::s_zombie_time_ < WallTime::now()) + else if (i->last_use_time_ + CachedXmlRpcClient::s_zombie_time_ < SteadyTime::now()) { // toast this guy. he's dead and nobody is reusing him. delete i->client_; @@ -362,7 +362,7 @@ XmlRpcClient* XMLRPCManager::getXMLRPCClient(const std::string &host, const int c = new XmlRpcClient(host.c_str(), port, uri.c_str()); CachedXmlRpcClient mc(c); mc.in_use_ = true; - mc.last_use_time_ = WallTime::now(); + mc.last_use_time_ = SteadyTime::now(); clients_.push_back(mc); //ROS_INFO("%d xmlrpc clients allocated\n", xmlrpc_clients.size()); } From a31ddd0cf3df18b360fac4458ba5bbec14e885e3 Mon Sep 17 00:00:00 2001 From: Tim Rakowski Date: Sat, 12 Aug 2017 20:25:02 +0200 Subject: [PATCH 34/72] Replaced deprecated lz4 function call --- utilities/roslz4/src/lz4s.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/utilities/roslz4/src/lz4s.c b/utilities/roslz4/src/lz4s.c index 05f16eabfc..c1299b040f 100644 --- a/utilities/roslz4/src/lz4s.c +++ b/utilities/roslz4/src/lz4s.c @@ -181,10 +181,10 @@ int bufferToOutput(roslz4_stream *str) { state->buffer_offset, str->output_left); // Shrink output by 1 to detect if data is not compressible - uint32_t comp_size = LZ4_compress_limitedOutput(state->buffer, - str->output_next + 4, - (int) state->buffer_offset, - (int) uncomp_size - 1); + uint32_t comp_size = LZ4_compress_default(state->buffer, + str->output_next + 4, + (int) state->buffer_offset, + (int) uncomp_size - 1); uint32_t wrote; if (comp_size > 0) { DEBUG("bufferToOutput() Compressed to %i bytes\n", comp_size); From 5f689af92a95cd836c528804ddf5e66dcb14095b Mon Sep 17 00:00:00 2001 From: Tim Rakowski Date: Sat, 12 Aug 2017 20:52:23 +0200 Subject: [PATCH 35/72] Removed deprecated dynamic exception specifications --- tools/rosbag_storage/include/rosbag/bag_player.h | 2 +- tools/rosbag_storage/src/bag_player.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/tools/rosbag_storage/include/rosbag/bag_player.h b/tools/rosbag_storage/include/rosbag/bag_player.h index a3c6749ed8..5aefe0de4d 100644 --- a/tools/rosbag_storage/include/rosbag/bag_player.h +++ b/tools/rosbag_storage/include/rosbag/bag_player.h @@ -77,7 +77,7 @@ class BagPlayer { public: /* Constructor expecting the filename of a bag */ - BagPlayer(const std::string &filename) throw(BagException); + BagPlayer(const std::string &filename); /* Register a callback for a specific topic and type */ template diff --git a/tools/rosbag_storage/src/bag_player.cpp b/tools/rosbag_storage/src/bag_player.cpp index ae87e6a8e4..eee5da9976 100644 --- a/tools/rosbag_storage/src/bag_player.cpp +++ b/tools/rosbag_storage/src/bag_player.cpp @@ -5,7 +5,7 @@ namespace rosbag { -BagPlayer::BagPlayer(const std::string &fname) throw(BagException) { +BagPlayer::BagPlayer(const std::string &fname) { bag.open(fname, rosbag::bagmode::Read); ros::Time::init(); View v(bag); From c11b6cef908b95ef0adad55e4b6322fb8933d4aa Mon Sep 17 00:00:00 2001 From: Fadri Furrer Date: Mon, 14 Aug 2017 16:16:09 +0200 Subject: [PATCH 36/72] only use CLOCK_MONOTONIC if not apple --- clients/roscpp/src/libros/internal_timer_manager.cpp | 4 +++- clients/roscpp/src/libros/steady_timer.cpp | 4 +++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/clients/roscpp/src/libros/internal_timer_manager.cpp b/clients/roscpp/src/libros/internal_timer_manager.cpp index facb4174c8..564c2bfbe0 100644 --- a/clients/roscpp/src/libros/internal_timer_manager.cpp +++ b/clients/roscpp/src/libros/internal_timer_manager.cpp @@ -25,8 +25,10 @@ * POSSIBILITY OF SUCH DAMAGE. */ -// make sure we use CLOCK_MONOTONIC for the condition variable +// Make sure we use CLOCK_MONOTONIC for the condition variable if not Apple. +#ifndef __APPLE__ #define BOOST_THREAD_HAS_CONDATTR_SET_CLOCK_MONOTONIC +#endif #include "ros/timer_manager.h" #include "ros/internal_timer_manager.h" diff --git a/clients/roscpp/src/libros/steady_timer.cpp b/clients/roscpp/src/libros/steady_timer.cpp index 7621f42b45..ff3bac56ab 100644 --- a/clients/roscpp/src/libros/steady_timer.cpp +++ b/clients/roscpp/src/libros/steady_timer.cpp @@ -25,8 +25,10 @@ * POSSIBILITY OF SUCH DAMAGE. */ -// make sure we use CLOCK_MONOTONIC for the condition variable +// Make sure we use CLOCK_MONOTONIC for the condition variable if not Apple. +#ifndef __APPLE__ #define BOOST_THREAD_HAS_CONDATTR_SET_CLOCK_MONOTONIC +#endif #include "ros/steady_timer.h" #include "ros/timer_manager.h" From 45df3c0c2ed88a2a24e9e55b67dc12bca6768877 Mon Sep 17 00:00:00 2001 From: Tim Rakowski Date: Sat, 12 Aug 2017 20:56:01 +0200 Subject: [PATCH 37/72] Improved whitespace to fix g++ 7 warning MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit .../ros_comm/tools/rosbag_storage/src/view.cpp:249:5: warning: this ‘if’ clause does not guard... [-Wmisleading-indentation] if ((bag.getMode() & bagmode::Read) != bagmode::Read) ^~ .../ros_comm/tools/rosbag_storage/src/view.cpp:252:2: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the ‘if’ boost::function query = TrueQuery(); ^~~~~ --- tools/rosbag_storage/src/view.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/rosbag_storage/src/view.cpp b/tools/rosbag_storage/src/view.cpp index b388b4c1a4..81cae14ed8 100644 --- a/tools/rosbag_storage/src/view.cpp +++ b/tools/rosbag_storage/src/view.cpp @@ -249,7 +249,7 @@ void View::addQuery(Bag const& bag, ros::Time const& start_time, ros::Time const if ((bag.getMode() & bagmode::Read) != bagmode::Read) throw BagException("Bag not opened for reading"); - boost::function query = TrueQuery(); + boost::function query = TrueQuery(); queries_.push_back(new BagQuery(&bag, Query(query, start_time, end_time), bag.bag_revision_)); From fd5165265eccdfee7082bca72da4b5b081928c43 Mon Sep 17 00:00:00 2001 From: Markus Grimm Date: Wed, 8 Feb 2017 17:33:28 +0100 Subject: [PATCH 38/72] Using poll() in favor of select() in the XmlRPCDispatcher (#833) * Using poll() in favor of select() in the XmlRPCDispatcher * #832: initialize pollfd event with 0. Added check for POLLHUP and POLLNVAL * Fix syntax --- utilities/xmlrpcpp/src/XmlRpcDispatch.cpp | 97 ++++++++++------------- 1 file changed, 44 insertions(+), 53 deletions(-) diff --git a/utilities/xmlrpcpp/src/XmlRpcDispatch.cpp b/utilities/xmlrpcpp/src/XmlRpcDispatch.cpp index e92dc5cf11..2f167a6ada 100644 --- a/utilities/xmlrpcpp/src/XmlRpcDispatch.cpp +++ b/utilities/xmlrpcpp/src/XmlRpcDispatch.cpp @@ -6,12 +6,17 @@ #include #include #include +#include #if defined (__ANDROID__) #include #endif #if defined(_WINDOWS) # include +static inline int poll( struct pollfd *pfd, int nfds, int timeout) +{ + return WSAPoll(pfd, nfds, timeout); +} # define USE_FTIME # if defined(_MSC_VER) @@ -81,83 +86,69 @@ XmlRpcDispatch::work(double timeout) _endTime = (timeout < 0.0) ? -1.0 : (getTime() + timeout); _doClear = false; _inWork = true; + int timeout_ms = static_cast(floor(timeout * 1000.)); // Only work while there is something to monitor while (_sources.size() > 0) { // Construct the sets of descriptors we are interested in - fd_set inFd, outFd, excFd; - FD_ZERO(&inFd); - FD_ZERO(&outFd); - FD_ZERO(&excFd); + struct pollfd fds[_sources.size()]; - int maxFd = -1; // Not used on windows SourceList::iterator it; - for (it=_sources.begin(); it!=_sources.end(); ++it) { + std::size_t i = 0; + for (it=_sources.begin(); it!=_sources.end(); ++it, ++i) { int fd = it->getSource()->getfd(); - if (it->getMask() & ReadableEvent) FD_SET(fd, &inFd); - if (it->getMask() & WritableEvent) FD_SET(fd, &outFd); - if (it->getMask() & Exception) FD_SET(fd, &excFd); - if (it->getMask() && fd > maxFd) maxFd = fd; + fds[i].fd = fd; + fds[i].events = 0; + if (it->getMask() & ReadableEvent) fds[i].events |= POLLIN; + if (it->getMask() & WritableEvent) fds[i].events |= POLLOUT; } // Check for events - int nEvents; - if (timeout < 0.0) - nEvents = select(maxFd+1, &inFd, &outFd, &excFd, NULL); - else - { - struct timeval tv; - tv.tv_sec = (int)floor(timeout); - tv.tv_usec = ((int)floor(1000000.0 * (timeout-floor(timeout)))) % 1000000; - nEvents = select(maxFd+1, &inFd, &outFd, &excFd, &tv); - } + int nEvents = poll(fds, _sources.size(), (timeout_ms < 0) ? -1 : timeout_ms); if (nEvents < 0) { if(errno != EINTR) - XmlRpcUtil::error("Error in XmlRpcDispatch::work: error in select (%d).", nEvents); + XmlRpcUtil::error("Error in XmlRpcDispatch::work: error in poll (%d).", nEvents); _inWork = false; return; } // Process events - for (it=_sources.begin(); it != _sources.end(); ) + for (i=0, it=_sources.begin(); it != _sources.end(); ++i) { SourceList::iterator thisIt = it++; XmlRpcSource* src = thisIt->getSource(); - int fd = src->getfd(); unsigned newMask = (unsigned) -1; - if (fd <= maxFd) { - // If you select on multiple event types this could be ambiguous - if (FD_ISSET(fd, &inFd)) - newMask &= src->handleEvent(ReadableEvent); - if (FD_ISSET(fd, &outFd)) - newMask &= src->handleEvent(WritableEvent); - if (FD_ISSET(fd, &excFd)) - newMask &= src->handleEvent(Exception); - - // Find the source again. It may have moved as a result of the way - // that sources are removed and added in the call stack starting - // from the handleEvent() calls above. - for (thisIt=_sources.begin(); thisIt != _sources.end(); thisIt++) - { - if(thisIt->getSource() == src) - break; - } - if(thisIt == _sources.end()) - { - XmlRpcUtil::error("Error in XmlRpcDispatch::work: couldn't find source iterator"); - continue; - } - - if ( ! newMask) { - _sources.erase(thisIt); // Stop monitoring this one - if ( ! src->getKeepOpen()) - src->close(); - } else if (newMask != (unsigned) -1) { - thisIt->getMask() = newMask; - } + // If you select on multiple event types this could be ambiguous + if (fds[i].revents & POLLIN) + newMask &= src->handleEvent(ReadableEvent); + if (fds[i].revents & POLLOUT) + newMask &= src->handleEvent(WritableEvent); + if (fds[i].revents & (POLLERR|POLLHUP|POLLNVAL)) + newMask &= src->handleEvent(Exception); + + // Find the source again. It may have moved as a result of the way + // that sources are removed and added in the call stack starting + // from the handleEvent() calls above. + for (thisIt=_sources.begin(); thisIt != _sources.end(); thisIt++) + { + if(thisIt->getSource() == src) + break; + } + if(thisIt == _sources.end()) + { + XmlRpcUtil::error("Error in XmlRpcDispatch::work: couldn't find source iterator"); + continue; + } + + if ( ! newMask) { + _sources.erase(thisIt); // Stop monitoring this one + if ( ! src->getKeepOpen()) + src->close(); + } else if (newMask != (unsigned) -1) { + thisIt->getMask() = newMask; } } From 0ee9edbdf6914e2ec659cf683766e31fd3845807 Mon Sep 17 00:00:00 2001 From: Kirk MacTavish Date: Fri, 11 Aug 2017 21:44:39 -0400 Subject: [PATCH 39/72] poll flags emulate select, verify requests, sync/init sources/fds This commit makes sure that the poll flags emulate select (which it replaces). It also double-checks event types to make sure they were requested (e.g. POLLERR might trigger both). It keeps track of fd/src relationship through two parallel arrays, instead of an iterator / array hybrid. --- utilities/xmlrpcpp/src/XmlRpcDispatch.cpp | 47 ++++++++++++++--------- 1 file changed, 29 insertions(+), 18 deletions(-) diff --git a/utilities/xmlrpcpp/src/XmlRpcDispatch.cpp b/utilities/xmlrpcpp/src/XmlRpcDispatch.cpp index 2f167a6ada..fd171adbc0 100644 --- a/utilities/xmlrpcpp/src/XmlRpcDispatch.cpp +++ b/utilities/xmlrpcpp/src/XmlRpcDispatch.cpp @@ -7,9 +7,6 @@ #include #include #include -#if defined (__ANDROID__) -#include -#endif #if defined(_WINDOWS) # include @@ -82,6 +79,14 @@ XmlRpcDispatch::setSourceEvents(XmlRpcSource* source, unsigned eventMask) void XmlRpcDispatch::work(double timeout) { + // Loosely based on `man select` > Correspondence between select() and poll() notifications + // and cloudius-systems/osv#35, cloudius-systems/osv@b53d39a using poll to emulate select + const unsigned POLLIN_REQ = POLLIN; // Request read + const unsigned POLLIN_CHK = (POLLIN | POLLHUP | POLLERR); // Readable or connection lost + const unsigned POLLOUT_REQ = POLLOUT; // Request write + const unsigned POLLOUT_CHK = (POLLOUT | POLLERR); // Writable or connection lost + const unsigned POLLEX_CHK = (POLLPRI | POLLNVAL); // Exception or invalid fd + // Compute end time _endTime = (timeout < 0.0) ? -1.0 : (getTime() + timeout); _doClear = false; @@ -92,20 +97,23 @@ XmlRpcDispatch::work(double timeout) while (_sources.size() > 0) { // Construct the sets of descriptors we are interested in - struct pollfd fds[_sources.size()]; + const unsigned source_cnt = _sources.size(); + pollfd fds[source_cnt]; + XmlRpcSource * sources[source_cnt]; SourceList::iterator it; std::size_t i = 0; for (it=_sources.begin(); it!=_sources.end(); ++it, ++i) { - int fd = it->getSource()->getfd(); - fds[i].fd = fd; + sources[i] = it->getSource(); + fds[i].fd = sources[i]->getfd(); + fds[i].revents = 0; // some platforms may not clear this in poll() fds[i].events = 0; - if (it->getMask() & ReadableEvent) fds[i].events |= POLLIN; - if (it->getMask() & WritableEvent) fds[i].events |= POLLOUT; + if (it->getMask() & ReadableEvent) fds[i].events |= POLLIN_REQ; + if (it->getMask() & WritableEvent) fds[i].events |= POLLOUT_REQ; } // Check for events - int nEvents = poll(fds, _sources.size(), (timeout_ms < 0) ? -1 : timeout_ms); + int nEvents = poll(fds, source_cnt, (timeout_ms < 0) ? -1 : timeout_ms); if (nEvents < 0) { @@ -116,23 +124,26 @@ XmlRpcDispatch::work(double timeout) } // Process events - for (i=0, it=_sources.begin(); it != _sources.end(); ++i) + for (i=0; i < source_cnt; ++i) { - SourceList::iterator thisIt = it++; - XmlRpcSource* src = thisIt->getSource(); + XmlRpcSource* src = sources[i]; + pollfd & pfd = fds[i]; unsigned newMask = (unsigned) -1; - // If you select on multiple event types this could be ambiguous - if (fds[i].revents & POLLIN) + // Only handle requested events to avoid being prematurely removed from dispatch + bool readable = (pfd.events & POLLIN_REQ) == POLLIN_REQ; + bool writable = (pfd.events & POLLOUT_REQ) == POLLOUT_REQ; + if (readable && (pfd.revents & POLLIN_CHK)) newMask &= src->handleEvent(ReadableEvent); - if (fds[i].revents & POLLOUT) + if (writable && (pfd.revents & POLLOUT_CHK)) newMask &= src->handleEvent(WritableEvent); - if (fds[i].revents & (POLLERR|POLLHUP|POLLNVAL)) + if (pfd.revents & POLLEX_CHK) newMask &= src->handleEvent(Exception); - // Find the source again. It may have moved as a result of the way + // Find the source iterator. It may have moved as a result of the way // that sources are removed and added in the call stack starting // from the handleEvent() calls above. - for (thisIt=_sources.begin(); thisIt != _sources.end(); thisIt++) + SourceList::iterator thisIt; + for (thisIt = _sources.begin(); thisIt != _sources.end(); thisIt++) { if(thisIt->getSource() == src) break; From ced009c83f8f3a3ba7659dfb44acaee492df8f30 Mon Sep 17 00:00:00 2001 From: Kartik Mohta Date: Mon, 14 Aug 2017 20:52:34 -0400 Subject: [PATCH 40/72] Fix rostopic hz and bw in Python 3 (#1126) * string.atoi is not present in Python3, just use int(x) * rostopic bw: set default value of window_size arg to -1 instead of None * Check for window_size < 0 when constructing ROSTopicBandwidth object * Revert "Check for window_size < 0 when constructing ROSTopicBandwidth object" This reverts commit 86a2a29f9cfb9aeb1cca0b94ff4a899f6d9f9089. * Revert "rostopic bw: set default value of window_size arg to -1 instead of None" This reverts commit 4c74df9cf0bfe21b8a32a4d8458a9a1b0a6fdec6. * Check for argument != None before calling int(options.window_size) * Properly check for options.window_size != None before converting to int --- tools/rostopic/src/rostopic/__init__.py | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/tools/rostopic/src/rostopic/__init__.py b/tools/rostopic/src/rostopic/__init__.py index c32e33efff..4b11424f3e 100644 --- a/tools/rostopic/src/rostopic/__init__.py +++ b/tools/rostopic/src/rostopic/__init__.py @@ -1488,11 +1488,7 @@ def _rostopic_cmd_hz(argv): if len(args) == 0: parser.error("topic must be specified") try: - if options.window_size != -1: - import string - window_size = string.atoi(options.window_size) - else: - window_size = options.window_size + window_size = int(options.window_size) except: parser.error("window size must be an integer") @@ -1540,11 +1536,7 @@ def _rostopic_cmd_bw(argv=sys.argv): if len(args) > 1: parser.error("you may only specify one input topic") try: - if options.window_size: - import string - window_size = string.atoi(options.window_size) - else: - window_size = options.window_size + window_size = int(options.window_size) if options.window_size is not None else None except: parser.error("window size must be an integer") topic = rosgraph.names.script_resolve_name('rostopic', args[0]) From 7b592eb32b27a27a1eda6fad2e0cdbd8ff22958d Mon Sep 17 00:00:00 2001 From: Mike Purvis Date: Fri, 18 Aug 2017 14:38:43 -0400 Subject: [PATCH 41/72] Don't direct users to build rosout with rosmake. (#1140) * Don't direct users to build rosout with rosmake. * Eliminate special case for rosout being missing. --- tools/roslaunch/src/roslaunch/launch.py | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/tools/roslaunch/src/roslaunch/launch.py b/tools/roslaunch/src/roslaunch/launch.py index 8b5e424a4c..e4d237fbf8 100644 --- a/tools/roslaunch/src/roslaunch/launch.py +++ b/tools/roslaunch/src/roslaunch/launch.py @@ -539,10 +539,7 @@ def launch_node(self, node, core=False): process = create_node_process(self.run_id, node, master.uri) except roslaunch.node_args.NodeParamsException as e: self.logger.error(e) - if node.package == 'rosout' and node.type == 'rosout': - printerrlog("\n\n\nERROR: rosout is not built. Please run 'rosmake rosout'\n\n\n") - else: - printerrlog("ERROR: cannot launch node of type [%s/%s]: %s"%(node.package, node.type, str(e))) + printerrlog("ERROR: cannot launch node of type [%s/%s]: %s"%(node.package, node.type, str(e))) if node.name: return node.name, False else: From 603c0cb7c6d9bc196f494832c3476bb98dd7bea2 Mon Sep 17 00:00:00 2001 From: Dirk Thomas Date: Mon, 21 Aug 2017 13:37:01 -0700 Subject: [PATCH 42/72] use not deprecated console_bridge macros and undefine the deprecated ones --- tools/rosbag_storage/include/rosbag/bag.h | 16 ++++++- tools/rosbag_storage/src/bag.cpp | 58 +++++++++++------------ 2 files changed, 43 insertions(+), 31 deletions(-) diff --git a/tools/rosbag_storage/include/rosbag/bag.h b/tools/rosbag_storage/include/rosbag/bag.h index 14ad8a2c5d..526c1dab03 100644 --- a/tools/rosbag_storage/include/rosbag/bag.h +++ b/tools/rosbag_storage/include/rosbag/bag.h @@ -61,6 +61,18 @@ #include #include "console_bridge/console.h" +#if defined logDebug +# undef logDebug +#endif +#if defined logInform +# undef logInform +#endif +#if defined logWarn +# undef logWarn +#endif +#if defined logError +# undef logError +#endif namespace rosbag { @@ -569,7 +581,7 @@ void Bag::doWrite(std::string const& topic, ros::Time const& time, T const& msg, // Check if we want to stop this chunk uint32_t chunk_size = getChunkOffset(); - logDebug(" curr_chunk_size=%d (threshold=%d)", chunk_size, chunk_threshold_); + CONSOLE_BRIDGE_logDebug(" curr_chunk_size=%d (threshold=%d)", chunk_size, chunk_threshold_); if (chunk_size > chunk_threshold_) { // Empty the outgoing chunk stopWritingChunk(); @@ -604,7 +616,7 @@ void Bag::writeMessageDataRecord(uint32_t conn_id, ros::Time const& time, T cons seek(0, std::ios::end); file_size_ = file_.getOffset(); - logDebug("Writing MSG_DATA [%llu:%d]: conn=%d sec=%d nsec=%d data_len=%d", + CONSOLE_BRIDGE_logDebug("Writing MSG_DATA [%llu:%d]: conn=%d sec=%d nsec=%d data_len=%d", (unsigned long long) file_.getOffset(), getChunkOffset(), conn_id, time.sec, time.nsec, msg_ser_len); writeHeader(header); diff --git a/tools/rosbag_storage/src/bag.cpp b/tools/rosbag_storage/src/bag.cpp index 281f326ce7..b030852cfe 100644 --- a/tools/rosbag_storage/src/bag.cpp +++ b/tools/rosbag_storage/src/bag.cpp @@ -213,7 +213,7 @@ void Bag::setCompression(CompressionType compression) { void Bag::writeVersion() { string version = string("#ROSBAG V") + VERSION + string("\n"); - logDebug("Writing VERSION [%llu]: %s", (unsigned long long) file_.getOffset(), version.c_str()); + CONSOLE_BRIDGE_logDebug("Writing VERSION [%llu]: %s", (unsigned long long) file_.getOffset(), version.c_str()); version_ = 200; @@ -236,7 +236,7 @@ void Bag::readVersion() { version_ = version_major * 100 + version_minor; - logDebug("Read VERSION: version=%d", version_); + CONSOLE_BRIDGE_logDebug("Read VERSION: version=%d", version_); } uint32_t Bag::getMajorVersion() const { return version_ / 100; } @@ -325,7 +325,7 @@ void Bag::startReadingVersion102() { multiset const& index = i->second; IndexEntry const& first_entry = *index.begin(); - logDebug("Reading message definition for connection %d at %llu", i->first, (unsigned long long) first_entry.chunk_pos); + CONSOLE_BRIDGE_logDebug("Reading message definition for connection %d at %llu", i->first, (unsigned long long) first_entry.chunk_pos); seek(first_entry.chunk_pos); @@ -339,7 +339,7 @@ void Bag::writeFileHeaderRecord() { connection_count_ = connections_.size(); chunk_count_ = chunks_.size(); - logDebug("Writing FILE_HEADER [%llu]: index_pos=%llu connection_count=%d chunk_count=%d", + CONSOLE_BRIDGE_logDebug("Writing FILE_HEADER [%llu]: index_pos=%llu connection_count=%d chunk_count=%d", (unsigned long long) file_.getOffset(), (unsigned long long) index_data_pos_, connection_count_, chunk_count_); // Write file header record @@ -390,7 +390,7 @@ void Bag::readFileHeaderRecord() { readField(fields, CHUNK_COUNT_FIELD_NAME, true, &chunk_count_); } - logDebug("Read FILE_HEADER: index_pos=%llu connection_count=%d chunk_count=%d", + CONSOLE_BRIDGE_logDebug("Read FILE_HEADER: index_pos=%llu connection_count=%d chunk_count=%d", (unsigned long long) index_data_pos_, connection_count_, chunk_count_); // Skip the data section (just padding) @@ -460,7 +460,7 @@ void Bag::writeChunkHeader(CompressionType compression, uint32_t compressed_size chunk_header.compressed_size = compressed_size; chunk_header.uncompressed_size = uncompressed_size; - logDebug("Writing CHUNK [%llu]: compression=%s compressed=%d uncompressed=%d", + CONSOLE_BRIDGE_logDebug("Writing CHUNK [%llu]: compression=%s compressed=%d uncompressed=%d", (unsigned long long) file_.getOffset(), chunk_header.compression.c_str(), chunk_header.compressed_size, chunk_header.uncompressed_size); M_string header; @@ -485,7 +485,7 @@ void Bag::readChunkHeader(ChunkHeader& chunk_header) const { readField(fields, COMPRESSION_FIELD_NAME, true, chunk_header.compression); readField(fields, SIZE_FIELD_NAME, true, &chunk_header.uncompressed_size); - logDebug("Read CHUNK: compression=%s size=%d uncompressed=%d (%f)", chunk_header.compression.c_str(), chunk_header.compressed_size, chunk_header.uncompressed_size, 100 * ((double) chunk_header.compressed_size) / chunk_header.uncompressed_size); + CONSOLE_BRIDGE_logDebug("Read CHUNK: compression=%s size=%d uncompressed=%d (%f)", chunk_header.compression.c_str(), chunk_header.compressed_size, chunk_header.uncompressed_size, 100 * ((double) chunk_header.compressed_size) / chunk_header.uncompressed_size); } // Index records @@ -506,7 +506,7 @@ void Bag::writeIndexRecords() { writeDataLength(index_size * 12); - logDebug("Writing INDEX_DATA: connection=%d ver=%d count=%d", connection_id, INDEX_VERSION, index_size); + CONSOLE_BRIDGE_logDebug("Writing INDEX_DATA: connection=%d ver=%d count=%d", connection_id, INDEX_VERSION, index_size); // Write the index record data (pairs of timestamp and position in file) foreach(IndexEntry const& e, index) { @@ -514,7 +514,7 @@ void Bag::writeIndexRecords() { write((char*) &e.time.nsec, 4); write((char*) &e.offset, 4); - logDebug(" - %d.%d: %d", e.time.sec, e.time.nsec, e.offset); + CONSOLE_BRIDGE_logDebug(" - %d.%d: %d", e.time.sec, e.time.nsec, e.offset); } } } @@ -536,7 +536,7 @@ void Bag::readTopicIndexRecord102() { readField(fields, TOPIC_FIELD_NAME, true, topic); readField(fields, COUNT_FIELD_NAME, true, &count); - logDebug("Read INDEX_DATA: ver=%d topic=%s count=%d", index_version, topic.c_str(), count); + CONSOLE_BRIDGE_logDebug("Read INDEX_DATA: ver=%d topic=%s count=%d", index_version, topic.c_str(), count); if (index_version != 0) throw BagFormatException((format("Unsupported INDEX_DATA version: %1%") % index_version).str()); @@ -546,7 +546,7 @@ void Bag::readTopicIndexRecord102() { if (topic_conn_id_iter == topic_connection_ids_.end()) { connection_id = connections_.size(); - logDebug("Creating connection: id=%d topic=%s", connection_id, topic.c_str()); + CONSOLE_BRIDGE_logDebug("Creating connection: id=%d topic=%s", connection_id, topic.c_str()); ConnectionInfo* connection_info = new ConnectionInfo(); connection_info->id = connection_id; connection_info->topic = topic; @@ -569,11 +569,11 @@ void Bag::readTopicIndexRecord102() { index_entry.time = Time(sec, nsec); index_entry.offset = 0; - logDebug(" - %d.%d: %llu", sec, nsec, (unsigned long long) index_entry.chunk_pos); + CONSOLE_BRIDGE_logDebug(" - %d.%d: %llu", sec, nsec, (unsigned long long) index_entry.chunk_pos); if (index_entry.time < ros::TIME_MIN || index_entry.time > ros::TIME_MAX) { - logError("Index entry for topic %s contains invalid time.", topic.c_str()); + CONSOLE_BRIDGE_logError("Index entry for topic %s contains invalid time.", topic.c_str()); } else { connection_index.insert(connection_index.end(), index_entry); @@ -598,7 +598,7 @@ void Bag::readConnectionIndexRecord200() { readField(fields, CONNECTION_FIELD_NAME, true, &connection_id); readField(fields, COUNT_FIELD_NAME, true, &count); - logDebug("Read INDEX_DATA: ver=%d connection=%d count=%d", index_version, connection_id, count); + CONSOLE_BRIDGE_logDebug("Read INDEX_DATA: ver=%d connection=%d count=%d", index_version, connection_id, count); if (index_version != 1) throw BagFormatException((format("Unsupported INDEX_DATA version: %1%") % index_version).str()); @@ -617,11 +617,11 @@ void Bag::readConnectionIndexRecord200() { read((char*) &index_entry.offset, 4); index_entry.time = Time(sec, nsec); - logDebug(" - %d.%d: %llu+%d", sec, nsec, (unsigned long long) index_entry.chunk_pos, index_entry.offset); + CONSOLE_BRIDGE_logDebug(" - %d.%d: %llu+%d", sec, nsec, (unsigned long long) index_entry.chunk_pos, index_entry.offset); if (index_entry.time < ros::TIME_MIN || index_entry.time > ros::TIME_MAX) { - logError("Index entry for topic %s contains invalid time. This message will not be loaded.", connections_[connection_id]->topic.c_str()); + CONSOLE_BRIDGE_logError("Index entry for topic %s contains invalid time. This message will not be loaded.", connections_[connection_id]->topic.c_str()); } else { connection_index.insert(connection_index.end(), index_entry); @@ -639,7 +639,7 @@ void Bag::writeConnectionRecords() { } void Bag::writeConnectionRecord(ConnectionInfo const* connection_info) { - logDebug("Writing CONNECTION [%llu:%d]: topic=%s id=%d", + CONSOLE_BRIDGE_logDebug("Writing CONNECTION [%llu:%d]: topic=%s id=%d", (unsigned long long) file_.getOffset(), getChunkOffset(), connection_info->topic.c_str(), connection_info->id); M_string header; @@ -693,7 +693,7 @@ void Bag::readConnectionRecord() { connection_info->md5sum = (*connection_info->header)["md5sum"]; connections_[id] = connection_info; - logDebug("Read CONNECTION: topic=%s id=%d", topic.c_str(), id); + CONSOLE_BRIDGE_logDebug("Read CONNECTION: topic=%s id=%d", topic.c_str(), id); } } @@ -719,7 +719,7 @@ void Bag::readMessageDefinitionRecord102() { if (topic_conn_id_iter == topic_connection_ids_.end()) { uint32_t id = connections_.size(); - logDebug("Creating connection: topic=%s md5sum=%s datatype=%s", topic.c_str(), md5sum.c_str(), datatype.c_str()); + CONSOLE_BRIDGE_logDebug("Creating connection: topic=%s md5sum=%s datatype=%s", topic.c_str(), md5sum.c_str(), datatype.c_str()); connection_info = new ConnectionInfo(); connection_info->id = id; connection_info->topic = topic; @@ -738,7 +738,7 @@ void Bag::readMessageDefinitionRecord102() { (*connection_info->header)["md5sum"] = connection_info->md5sum; (*connection_info->header)["message_definition"] = connection_info->msg_def; - logDebug("Read MSG_DEF: topic=%s md5sum=%s datatype=%s", topic.c_str(), md5sum.c_str(), datatype.c_str()); + CONSOLE_BRIDGE_logDebug("Read MSG_DEF: topic=%s md5sum=%s datatype=%s", topic.c_str(), md5sum.c_str(), datatype.c_str()); } void Bag::decompressChunk(uint64_t chunk_pos) const { @@ -773,7 +773,7 @@ void Bag::decompressChunk(uint64_t chunk_pos) const { } void Bag::readMessageDataRecord102(uint64_t offset, ros::Header& header) const { - logDebug("readMessageDataRecord: offset=%llu", (unsigned long long) offset); + CONSOLE_BRIDGE_logDebug("readMessageDataRecord: offset=%llu", (unsigned long long) offset); seek(offset); @@ -799,7 +799,7 @@ void Bag::decompressRawChunk(ChunkHeader const& chunk_header) const { assert(chunk_header.compression == COMPRESSION_NONE); assert(chunk_header.compressed_size == chunk_header.uncompressed_size); - logDebug("compressed_size: %d uncompressed_size: %d", chunk_header.compressed_size, chunk_header.uncompressed_size); + CONSOLE_BRIDGE_logDebug("compressed_size: %d uncompressed_size: %d", chunk_header.compressed_size, chunk_header.uncompressed_size); decompress_buffer_.setSize(chunk_header.compressed_size); file_.read((char*) decompress_buffer_.getData(), chunk_header.compressed_size); @@ -812,7 +812,7 @@ void Bag::decompressBz2Chunk(ChunkHeader const& chunk_header) const { CompressionType compression = compression::BZ2; - logDebug("compressed_size: %d uncompressed_size: %d", chunk_header.compressed_size, chunk_header.uncompressed_size); + CONSOLE_BRIDGE_logDebug("compressed_size: %d uncompressed_size: %d", chunk_header.compressed_size, chunk_header.uncompressed_size); chunk_buffer_.setSize(chunk_header.compressed_size); file_.read((char*) chunk_buffer_.getData(), chunk_header.compressed_size); @@ -828,7 +828,7 @@ void Bag::decompressLz4Chunk(ChunkHeader const& chunk_header) const { CompressionType compression = compression::LZ4; - logDebug("lz4 compressed_size: %d uncompressed_size: %d", + CONSOLE_BRIDGE_logDebug("lz4 compressed_size: %d uncompressed_size: %d", chunk_header.compressed_size, chunk_header.uncompressed_size); chunk_buffer_.setSize(chunk_header.compressed_size); @@ -889,7 +889,7 @@ void Bag::writeChunkInfoRecords() { header[END_TIME_FIELD_NAME] = toHeaderString(&chunk_info.end_time); header[COUNT_FIELD_NAME] = toHeaderString(&chunk_connection_count); - logDebug("Writing CHUNK_INFO [%llu]: ver=%d pos=%llu start=%d.%d end=%d.%d", + CONSOLE_BRIDGE_logDebug("Writing CHUNK_INFO [%llu]: ver=%d pos=%llu start=%d.%d end=%d.%d", (unsigned long long) file_.getOffset(), CHUNK_INFO_VERSION, (unsigned long long) chunk_info.pos, chunk_info.start_time.sec, chunk_info.start_time.nsec, chunk_info.end_time.sec, chunk_info.end_time.nsec); @@ -906,7 +906,7 @@ void Bag::writeChunkInfoRecords() { write((char*) &connection_id, 4); write((char*) &count, 4); - logDebug(" - %d: %d", connection_id, count); + CONSOLE_BRIDGE_logDebug(" - %d: %d", connection_id, count); } } } @@ -935,7 +935,7 @@ void Bag::readChunkInfoRecord() { uint32_t chunk_connection_count = 0; readField(fields, COUNT_FIELD_NAME, true, &chunk_connection_count); - logDebug("Read CHUNK_INFO: chunk_pos=%llu connection_count=%d start=%d.%d end=%d.%d", + CONSOLE_BRIDGE_logDebug("Read CHUNK_INFO: chunk_pos=%llu connection_count=%d start=%d.%d end=%d.%d", (unsigned long long) chunk_info.pos, chunk_connection_count, chunk_info.start_time.sec, chunk_info.start_time.nsec, chunk_info.end_time.sec, chunk_info.end_time.nsec); @@ -946,7 +946,7 @@ void Bag::readChunkInfoRecord() { read((char*) &connection_id, 4); read((char*) &connection_count, 4); - logDebug(" %d: %d messages", connection_id, connection_count); + CONSOLE_BRIDGE_logDebug(" %d: %d messages", connection_id, connection_count); chunk_info.connection_counts[connection_id] = connection_count; } @@ -1028,7 +1028,7 @@ void Bag::readMessageDataHeaderFromBuffer(Buffer& buffer, uint32_t offset, ros:: total_bytes_read = 0; uint8_t op = 0xFF; do { - logDebug("reading header from buffer: offset=%d", offset); + CONSOLE_BRIDGE_logDebug("reading header from buffer: offset=%d", offset); uint32_t bytes_read; readHeaderFromBuffer(*current_buffer_, offset, header, data_size, bytes_read); From 973056901e0bf6d0369737bf420a5dac58e8a97f Mon Sep 17 00:00:00 2001 From: Matthias Horne Date: Tue, 22 Aug 2017 13:08:38 +0200 Subject: [PATCH 43/72] Fix rosbag API for Python 3 Closes ros/ros_comm#1047 --- tools/rosbag/src/rosbag/bag.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tools/rosbag/src/rosbag/bag.py b/tools/rosbag/src/rosbag/bag.py index 1f9cf36f3e..3130b43b73 100644 --- a/tools/rosbag/src/rosbag/bag.py +++ b/tools/rosbag/src/rosbag/bag.py @@ -1586,6 +1586,7 @@ def _read_uint32(f): return _unpack_uint32(f.read(4)) def _read_uint64(f): return _unpack_uint64(f.read(8)) def _read_time (f): return _unpack_time (f.read(8)) +def _decode_str(v): return v if type(v) is str else v.decode() def _unpack_uint8(v): return struct.unpack(' Date: Mon, 11 Sep 2017 07:04:39 -0400 Subject: [PATCH 44/72] Sort the output of rosnode info. --- tools/rosnode/src/rosnode/__init__.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tools/rosnode/src/rosnode/__init__.py b/tools/rosnode/src/rosnode/__init__.py index 44917fb117..504d65d204 100644 --- a/tools/rosnode/src/rosnode/__init__.py +++ b/tools/rosnode/src/rosnode/__init__.py @@ -492,9 +492,9 @@ def topic_type(t, pub_topics): pub_topics = master.getPublishedTopics('/') except socket.error: raise ROSNodeIOException("Unable to communicate with master!") - pubs = [t for t, l in state[0] if node_name in l] - subs = [t for t, l in state[1] if node_name in l] - srvs = [t for t, l in state[2] if node_name in l] + pubs = sorted([t for t, l in state[0] if node_name in l]) + subs = sorted([t for t, l in state[1] if node_name in l]) + srvs = sorted([t for t, l in state[2] if node_name in l]) buff = "Node [%s]"%node_name if pubs: From a915a991a2a73be6bc30d0e5bede2192e30bae89 Mon Sep 17 00:00:00 2001 From: Kartik Mohta Date: Thu, 14 Sep 2017 16:29:31 -0400 Subject: [PATCH 45/72] Minor fixes for compatibility with both Python 2 & 3 --- tools/rosnode/src/rosnode/__init__.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/tools/rosnode/src/rosnode/__init__.py b/tools/rosnode/src/rosnode/__init__.py index 504d65d204..103c91efaa 100644 --- a/tools/rosnode/src/rosnode/__init__.py +++ b/tools/rosnode/src/rosnode/__init__.py @@ -182,7 +182,6 @@ def get_nodes_by_machine(machine): @raise ROSNodeException: if machine name cannot be resolved to an address @raise ROSNodeIOException: if unable to communicate with master """ - import urlparse master = rosgraph.Master(ID) try: @@ -338,7 +337,7 @@ def rosnode_ping(node_name, max_count=None, verbose=False): # 3786: catch ValueError on unpack as socket.error is not always a tuple try: # #3659 - errnum, msg = e + errnum, msg = e.args if errnum == -2: #name/service unknown p = urlparse.urlparse(node_api) print("ERROR: Unknown host [%s] for node [%s]"%(p.hostname, node_name), file=sys.stderr) From b8fecba0182995bfd78f2b8f83ccf77a11058c9f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Santos?= Date: Wed, 4 Oct 2017 12:53:34 -0700 Subject: [PATCH 46/72] [bug] fixes #1158 (#1159) * [bug] fixes #1158 XmlLoader and LoaderContext no longer share the param list to child 'node' contexts. This was causing the creation of unintended private parameters when the tilde notation was used. * added test cases for tilde param in launch * added test cases for tilde param in python * fixed tilde param issue for group tags Issue #1158 manifested for group tags that appear before (but not containing) node tags. * added one more test case for issue #1158 used param tag to make sure we test the proposed fix * Added negative tests for extra parameters Some parameters should not be present at all. --- tools/roslaunch/src/roslaunch/xmlloader.py | 2 ++ tools/roslaunch/test/unit/test_roslaunch_dump_params.py | 7 +++++++ tools/roslaunch/test/xml/test-dump-rosparam.launch | 6 ++++++ 3 files changed, 15 insertions(+) diff --git a/tools/roslaunch/src/roslaunch/xmlloader.py b/tools/roslaunch/src/roslaunch/xmlloader.py index 6bb752b6fc..3a8799adf2 100644 --- a/tools/roslaunch/src/roslaunch/xmlloader.py +++ b/tools/roslaunch/src/roslaunch/xmlloader.py @@ -368,6 +368,7 @@ def _node_tag(self, tag, context, ros_config, default_machine, is_test=False, ve child_ns = self._ns_clear_params_attr('node', tag, context, ros_config, node_name=name) param_ns = child_ns.child(name) + param_ns.params = [] # This is necessary because child() does not make a copy of the param list. # required attributes pkg, node_type = self.reqd_attrs(tag, context, ('pkg', 'type')) @@ -647,6 +648,7 @@ def _recurse_load(self, ros_config, tags, context, default_machine, is_core, ver if ifunless_test(self, tag, context): self._check_attrs(tag, context, ros_config, XmlLoader.GROUP_ATTRS) child_ns = self._ns_clear_params_attr(name, tag, context, ros_config) + child_ns.params = list(child_ns.params) # copy is needed here to enclose new params default_machine = \ self._recurse_load(ros_config, tag.childNodes, child_ns, \ default_machine, is_core, verbose) diff --git a/tools/roslaunch/test/unit/test_roslaunch_dump_params.py b/tools/roslaunch/test/unit/test_roslaunch_dump_params.py index f1ba196174..20024a6013 100644 --- a/tools/roslaunch/test/unit/test_roslaunch_dump_params.py +++ b/tools/roslaunch/test/unit/test_roslaunch_dump_params.py @@ -77,6 +77,10 @@ def test_roslaunch(self): '/node_rosparam/dict1/shoulders': 2, '/node_rosparam/dict1/knees': 3, '/node_rosparam/dict1/toes': 4, + '/node_rosparam/tilde1': 'foo', + '/node_rosparam/local_param': 'baz', + + '/node_rosparam2/tilde1': 'foo', '/inline_str': 'value1', '/inline_list': [1, 2, 3, 4], @@ -99,3 +103,6 @@ def test_roslaunch(self): elif v != output_val[k]: self.fail("key [%s] value [%s] does not match output: %s"%(k, v, output_val[k])) self.assertEquals(val, output_val) + for k in ('/node_rosparam/tilde2', '/node_rosparam2/tilde2', '/node_rosparam2/local_param'): + if k in output_val: + self.fail("key [%s] should not be in output: %s"%(k, output_val)) diff --git a/tools/roslaunch/test/xml/test-dump-rosparam.launch b/tools/roslaunch/test/xml/test-dump-rosparam.launch index d02d34fa30..cd8a6d9769 100644 --- a/tools/roslaunch/test/xml/test-dump-rosparam.launch +++ b/tools/roslaunch/test/xml/test-dump-rosparam.launch @@ -1,15 +1,21 @@ + + + + + + value1 [1, 2, 3, 4] {key1: value1, key2: value2} From b4b6360138a11ad11e5228cf2cecc45aa426d4bc Mon Sep 17 00:00:00 2001 From: Christopher Wecht Date: Thu, 5 Oct 2017 14:33:45 +0200 Subject: [PATCH 47/72] rosconsole: replaced 'while(0)' by 'while(false)' --- tools/rosconsole/include/ros/assert.h | 8 ++++---- tools/rosconsole/include/ros/console.h | 22 +++++++++++----------- 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/tools/rosconsole/include/ros/assert.h b/tools/rosconsole/include/ros/assert.h index 182f02f3b5..3cbd315e07 100644 --- a/tools/rosconsole/include/ros/assert.h +++ b/tools/rosconsole/include/ros/assert.h @@ -117,7 +117,7 @@ do { \ ROS_FATAL("BREAKPOINT HIT\n\tfile = %s\n\tline=%d\n", __FILE__, __LINE__); \ ROS_ISSUE_BREAK() \ - } while (0) + } while (false) #define ROS_ASSERT(cond) \ do { \ @@ -125,7 +125,7 @@ ROS_FATAL("ASSERTION FAILED\n\tfile = %s\n\tline = %d\n\tcond = %s\n", __FILE__, __LINE__, #cond); \ ROS_ISSUE_BREAK() \ } \ - } while (0) + } while (false) #define ROS_ASSERT_MSG(cond, ...) \ do { \ @@ -135,14 +135,14 @@ ROS_FATAL("\n"); \ ROS_ISSUE_BREAK(); \ } \ - } while (0) + } while (false) #define ROS_ASSERT_CMD(cond, cmd) \ do { \ if (!(cond)) { \ cmd; \ } \ - } while (0) + } while (false) #else diff --git a/tools/rosconsole/include/ros/console.h b/tools/rosconsole/include/ros/console.h index 28901d77c2..bd12f0231f 100644 --- a/tools/rosconsole/include/ros/console.h +++ b/tools/rosconsole/include/ros/console.h @@ -326,7 +326,7 @@ ROSCONSOLE_DECL std::string formatToString(const char* fmt, ...); { \ ::ros::console::initialize(); \ } \ - } while(0) + } while(false) #define ROSCONSOLE_DEFINE_LOCATION(cond, level, name) \ ROSCONSOLE_AUTOINIT; \ @@ -378,7 +378,7 @@ ROSCONSOLE_DECL std::string formatToString(const char* fmt, ...); { \ ROSCONSOLE_PRINT_AT_LOCATION(__VA_ARGS__); \ } \ - } while(0) + } while(false) /** * \brief Log to a given named logger at a given verbosity level, only if a given condition has been met, with stream-style formatting @@ -397,7 +397,7 @@ ROSCONSOLE_DECL std::string formatToString(const char* fmt, ...); { \ ROSCONSOLE_PRINT_STREAM_AT_LOCATION(args); \ } \ - } while(0) + } while(false) /** * \brief Log to a given named logger at a given verbosity level, only the first time it is hit when enabled, with printf-style formatting @@ -415,7 +415,7 @@ ROSCONSOLE_DECL std::string formatToString(const char* fmt, ...); hit = true; \ ROSCONSOLE_PRINT_AT_LOCATION(__VA_ARGS__); \ } \ - } while(0) + } while(false) // inside a macro which uses args use only well namespaced variable names in order to not overlay variables coming in via args /** @@ -434,7 +434,7 @@ ROSCONSOLE_DECL std::string formatToString(const char* fmt, ...); __ros_log_stream_once__hit__ = true; \ ROSCONSOLE_PRINT_STREAM_AT_LOCATION(args); \ } \ - } while(0) + } while(false) /** * \brief Log to a given named logger at a given verbosity level, limited to a specific rate of printing, with printf-style formatting @@ -454,7 +454,7 @@ ROSCONSOLE_DECL std::string formatToString(const char* fmt, ...); last_hit = now.toSec(); \ ROSCONSOLE_PRINT_AT_LOCATION(__VA_ARGS__); \ } \ - } while(0) + } while(false) // inside a macro which uses args use only well namespaced variable names in order to not overlay variables coming in via args /** @@ -475,7 +475,7 @@ ROSCONSOLE_DECL std::string formatToString(const char* fmt, ...); __ros_log_stream_throttle__last_hit__ = __ros_log_stream_throttle__now__.toSec(); \ ROSCONSOLE_PRINT_STREAM_AT_LOCATION(args); \ } \ - } while(0) + } while(false) /** * \brief Log to a given named logger at a given verbosity level, limited to a specific rate of printing, with printf-style formatting @@ -495,7 +495,7 @@ ROSCONSOLE_DECL std::string formatToString(const char* fmt, ...); __ros_log_delayed_throttle__last_hit__ = __ros_log_delayed_throttle__now__.toSec(); \ ROSCONSOLE_PRINT_AT_LOCATION(__VA_ARGS__); \ } \ - } while(0) + } while(false) // inside a macro which uses args use only well namespaced variable names in order to not overlay variables coming in via args /** @@ -516,7 +516,7 @@ ROSCONSOLE_DECL std::string formatToString(const char* fmt, ...); __ros_log_stream_delayed_throttle__last_hit__ = __ros_log_stream_delayed_throttle__now__.toSec(); \ ROSCONSOLE_PRINT_STREAM_AT_LOCATION(args); \ } \ - } while(0) + } while(false) /** * \brief Log to a given named logger at a given verbosity level, with user-defined filtering, with printf-style formatting @@ -533,7 +533,7 @@ ROSCONSOLE_DECL std::string formatToString(const char* fmt, ...); { \ ROSCONSOLE_PRINT_AT_LOCATION_WITH_FILTER(filter, __VA_ARGS__); \ } \ - } while(0) + } while(false) /** * \brief Log to a given named logger at a given verbosity level, with user-defined filtering, with stream-style formatting @@ -550,7 +550,7 @@ ROSCONSOLE_DECL std::string formatToString(const char* fmt, ...); { \ ROSCONSOLE_PRINT_STREAM_AT_LOCATION_WITH_FILTER(filter, args); \ } \ - } while(0) + } while(false) /** * \brief Log to a given named logger at a given verbosity level, with printf-style formatting From 266f8a73835314190b97b008c15a6533a17a6628 Mon Sep 17 00:00:00 2001 From: Oleg Kalachev Date: Thu, 5 Oct 2017 18:08:47 +0300 Subject: [PATCH 48/72] Change rospy.Rate hz type from int to float (#1177) --- clients/rospy/src/rospy/timer.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/clients/rospy/src/rospy/timer.py b/clients/rospy/src/rospy/timer.py index f02a6453dc..b0f43cd30f 100644 --- a/clients/rospy/src/rospy/timer.py +++ b/clients/rospy/src/rospy/timer.py @@ -53,7 +53,7 @@ def __init__(self, hz, reset=False): """ Constructor. @param hz: hz rate to determine sleeping - @type hz: int + @type hz: float @param reset: if True, timer is reset when rostime moved backward. [default: False] @type reset: bool """ From 6e906e4d282c97be3bd4d508a9239d50fea35455 Mon Sep 17 00:00:00 2001 From: Jochen Sprickerhof Date: Thu, 5 Oct 2017 20:23:38 +0200 Subject: [PATCH 49/72] Don't try to set unknown socket options (#1172) * Don't try to set unknown socket options These are not avaible on FreeBSD, for example * individualize ifdefs * fix whitespace --- clients/roscpp/src/libros/transport/transport_tcp.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/clients/roscpp/src/libros/transport/transport_tcp.cpp b/clients/roscpp/src/libros/transport/transport_tcp.cpp index 9605dbbfc9..e3e152813b 100644 --- a/clients/roscpp/src/libros/transport/transport_tcp.cpp +++ b/clients/roscpp/src/libros/transport/transport_tcp.cpp @@ -179,19 +179,23 @@ void TransportTCP::setKeepAlive(bool use, uint32_t idle, uint32_t interval, uint } /* cygwin SOL_TCP does not seem to support TCP_KEEPIDLE, TCP_KEEPINTVL, TCP_KEEPCNT */ -#if defined(SOL_TCP) && !defined(__CYGWIN__) +#if defined(SOL_TCP) && defined(TCP_KEEPIDLE) val = idle; if (setsockopt(sock_, SOL_TCP, TCP_KEEPIDLE, &val, sizeof(val)) != 0) { ROS_DEBUG("setsockopt failed to set TCP_KEEPIDLE on socket [%d] [%s]", sock_, cached_remote_host_.c_str()); } +#endif +#if defined(SOL_TCP) && defined(TCP_KEEPINTVL) val = interval; if (setsockopt(sock_, SOL_TCP, TCP_KEEPINTVL, &val, sizeof(val)) != 0) { ROS_DEBUG("setsockopt failed to set TCP_KEEPINTVL on socket [%d] [%s]", sock_, cached_remote_host_.c_str()); } +#endif +#if defined(SOL_TCP) && defined(TCP_KEEPCNT) val = count; if (setsockopt(sock_, SOL_TCP, TCP_KEEPCNT, &val, sizeof(val)) != 0) { From 3cfef198969dc435533a2562b0a259f533b5f4de Mon Sep 17 00:00:00 2001 From: Felix Widmaier Date: Thu, 5 Oct 2017 20:24:13 +0200 Subject: [PATCH 50/72] rosnode: Return exit code 1 if there is an error. (#1178) --- tools/rosnode/src/rosnode/__init__.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/tools/rosnode/src/rosnode/__init__.py b/tools/rosnode/src/rosnode/__init__.py index 103c91efaa..f7bf80ad61 100644 --- a/tools/rosnode/src/rosnode/__init__.py +++ b/tools/rosnode/src/rosnode/__init__.py @@ -807,9 +807,12 @@ def rosnodemain(argv=None): _fullusage() except socket.error: print("Network communication failed. Most likely failed to communicate with master.", file=sys.stderr) + sys.exit(1) except rosgraph.MasterError as e: print("ERROR: "+str(e), file=sys.stderr) + sys.exit(1) except ROSNodeException as e: print("ERROR: "+str(e), file=sys.stderr) + sys.exit(1) except KeyboardInterrupt: pass From 4ff5bd88c9cf356512741d310765f8f65756ffbd Mon Sep 17 00:00:00 2001 From: Tim Rakowski Date: Tue, 17 Oct 2017 18:15:51 +0200 Subject: [PATCH 51/72] Fixed an out of bounds read in void rosbag::View::iterator::increment() (#1191) - Only triggered if reduce_overlap_ = true - When iters_.size() == 1 and iters_.pop_back() gets called in the loop, the next loop condition check would read from iters_.back(), but iters_ would be empty by then. --- tools/rosbag_storage/src/view.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/rosbag_storage/src/view.cpp b/tools/rosbag_storage/src/view.cpp index 81cae14ed8..dbb1e72478 100644 --- a/tools/rosbag_storage/src/view.cpp +++ b/tools/rosbag_storage/src/view.cpp @@ -136,7 +136,7 @@ void View::iterator::increment() { { std::multiset::const_iterator last_iter = iters_.back().iter; - while (iters_.back().iter == last_iter) + while (!iters_.empty() && iters_.back().iter == last_iter) { iters_.back().iter++; if (iters_.back().iter == iters_.back().range->end) From 7aa64f9c9a615603e97debac67c205bf05a949a3 Mon Sep 17 00:00:00 2001 From: Jim Won Date: Fri, 20 Oct 2017 12:44:19 -0400 Subject: [PATCH 52/72] Test bzfile_ and lz4s_ before reading/writing/closing (#1183) * Test bzfile_ before reading/writing/closing * Test lz4stream before reading/writing --- tools/rosbag_storage/src/bz2_stream.cpp | 16 ++++++++++++++++ tools/rosbag_storage/src/lz4_stream.cpp | 25 +++++++++++++++++++++++++ 2 files changed, 41 insertions(+) diff --git a/tools/rosbag_storage/src/bz2_stream.cpp b/tools/rosbag_storage/src/bz2_stream.cpp index 900cd046c2..78e175381e 100644 --- a/tools/rosbag_storage/src/bz2_stream.cpp +++ b/tools/rosbag_storage/src/bz2_stream.cpp @@ -70,6 +70,10 @@ void BZ2Stream::startWrite() { } void BZ2Stream::write(void* ptr, size_t size) { + if (!bzfile_) { + throw BagException("cannot write to unopened bzfile"); + } + BZ2_bzWrite(&bzerror_, bzfile_, ptr, size); switch (bzerror_) { @@ -80,6 +84,10 @@ void BZ2Stream::write(void* ptr, size_t size) { } void BZ2Stream::stopWrite() { + if (!bzfile_) { + throw BagException("cannot close unopened bzfile"); + } + unsigned int nbytes_in; unsigned int nbytes_out; BZ2_bzWriteClose(&bzerror_, bzfile_, 0, &nbytes_in, &nbytes_out); @@ -107,6 +115,10 @@ void BZ2Stream::startRead() { } void BZ2Stream::read(void* ptr, size_t size) { + if (!bzfile_) { + throw BagException("cannot read from unopened bzfile"); + } + BZ2_bzRead(&bzerror_, bzfile_, ptr, size); advanceOffset(size); @@ -133,6 +145,10 @@ void BZ2Stream::read(void* ptr, size_t size) { } void BZ2Stream::stopRead() { + if (!bzfile_) { + throw BagException("cannot close unopened bzfile"); + } + BZ2_bzReadClose(&bzerror_, bzfile_); switch (bzerror_) { diff --git a/tools/rosbag_storage/src/lz4_stream.cpp b/tools/rosbag_storage/src/lz4_stream.cpp index 950266494e..297bcf7b33 100644 --- a/tools/rosbag_storage/src/lz4_stream.cpp +++ b/tools/rosbag_storage/src/lz4_stream.cpp @@ -46,6 +46,7 @@ LZ4Stream::LZ4Stream(ChunkedFile* file) : Stream(file), block_size_id_(6) { buff_size_ = roslz4_blockSizeFromIndex(block_size_id_) + 64; buff_ = new char[buff_size_]; + lz4s_.state = NULL; } LZ4Stream::~LZ4Stream() { @@ -57,6 +58,10 @@ CompressionType LZ4Stream::getCompressionType() const { } void LZ4Stream::startWrite() { + if (lz4s_.state) { + throw BagException("cannot start writing to already opened lz4 stream"); + } + setCompressedIn(0); int ret = roslz4_compressStart(&lz4s_, block_size_id_); @@ -71,6 +76,10 @@ void LZ4Stream::startWrite() { } void LZ4Stream::write(void* ptr, size_t size) { + if (!lz4s_.state) { + throw BagException("cannot write to unopened lz4 stream"); + } + lz4s_.input_left = size; lz4s_.input_next = (char*) ptr; @@ -112,12 +121,20 @@ void LZ4Stream::writeStream(int action) { } void LZ4Stream::stopWrite() { + if (!lz4s_.state) { + throw BagException("cannot close unopened lz4 stream"); + } + writeStream(ROSLZ4_FINISH); setCompressedIn(0); roslz4_compressEnd(&lz4s_); } void LZ4Stream::startRead() { + if (lz4s_.state) { + throw BagException("cannot start reading from already opened lz4 stream"); + } + int ret = roslz4_decompressStart(&lz4s_); switch(ret) { case ROSLZ4_OK: break; @@ -137,6 +154,10 @@ void LZ4Stream::startRead() { } void LZ4Stream::read(void* ptr, size_t size) { + if (!lz4s_.state) { + throw BagException("cannot read from unopened lz4 stream"); + } + // Setup stream by filling buffer with data from file int to_read = buff_size_ - lz4s_.input_left; char *input_start = buff_ + lz4s_.input_left; @@ -181,6 +202,10 @@ void LZ4Stream::read(void* ptr, size_t size) { } void LZ4Stream::stopRead() { + if (!lz4s_.state) { + throw BagException("cannot close unopened lz4 stream"); + } + roslz4_decompressEnd(&lz4s_); } From bb4681c9dd8b92fc7e5c1f4578f161ab33c9f2da Mon Sep 17 00:00:00 2001 From: Martin Pecka Date: Mon, 23 Oct 2017 20:37:58 +0200 Subject: [PATCH 53/72] More agile demux. (#1196) * More agile demux. Publishers in demux are no longer destroyed and recreated when switching, which results in much faster switching behavior. The previous version took even 10 seconds to start publishing on the newly selected topic (all on localhost). Please, comment if you feel the default behavior should stay as the old was, and this new behavior should be triggered by a parameter. * update style --- tools/topic_tools/src/demux.cpp | 51 +++++++++++++++++++-------------- 1 file changed, 29 insertions(+), 22 deletions(-) diff --git a/tools/topic_tools/src/demux.cpp b/tools/topic_tools/src/demux.cpp index 3740af1ed4..8d414d4cad 100644 --- a/tools/topic_tools/src/demux.cpp +++ b/tools/topic_tools/src/demux.cpp @@ -72,13 +72,6 @@ bool sel_srv_cb( topic_tools::DemuxSelect::Request &req, bool ret = false; if (g_selected != g_pubs.end()) { res.prev_topic = g_selected->topic_name; - - // Unregister old topic - ROS_INFO("Unregistering %s", res.prev_topic.c_str()); - if (g_selected->pub) - g_selected->pub->shutdown(); - delete g_selected->pub; - g_selected->pub = NULL; } else res.prev_topic = string(""); @@ -104,6 +97,7 @@ bool sel_srv_cb( topic_tools::DemuxSelect::Request &req, g_selected = it; ROS_INFO("demux selected output: [%s]", it->topic_name.c_str()); ret = true; + break; } } if(!ret) @@ -127,22 +121,35 @@ void in_cb(const boost::shared_ptr& msg) ROS_DEBUG("Received an incoming msg ..."); // when a message is incoming, check, if the requested publisher is already existing. // if not, create it with the information available from the incoming message. - if(!g_selected->pub) + bool selected_added = false; + for (list::iterator it = g_pubs.begin(); it != g_pubs.end(); ++it) { + if (!it->pub) + { + if (it->topic_name == g_selected->topic_name) + { + selected_added = true; + } + + try + { + it->pub = new ros::Publisher(msg->advertise(*g_node, it->topic_name, 10, false)); + } + catch (ros::InvalidNameException& e) + { + ROS_WARN("failed to add topic '%s' to demux, because it's an invalid name: %s", + it->topic_name.c_str(), e.what()); + return; + } + + ROS_INFO("Added publisher %s to demux!", it->topic_name.c_str()); + } + } + + if (selected_added) { - try - { - g_selected->pub = new ros::Publisher(msg->advertise(*g_node, g_selected->topic_name, 10, false)); - } - catch(ros::InvalidNameException& e) - { - ROS_WARN("failed to add topic %s to demux, because it's an invalid name: %s", - g_selected->topic_name.c_str(), e.what()); - return; - } - - ROS_INFO("Added publisher %s to demux! Sleeping for 0.5 secs.", g_selected->topic_name.c_str()); - // This is needed, because it takes some time before publisher is registered and can send out messages. - ros::Duration(0.5).sleep(); + // This is needed, because it takes some time before publisher is registered and can send out messages. + ROS_INFO("Sleeping 0.5 sec."); + ros::Duration(0.5).sleep(); } // finally: send out the message over the active publisher From af02431fe49d79165dc6bd13c62ca6d91df66693 Mon Sep 17 00:00:00 2001 From: Yay295 Date: Thu, 2 Nov 2017 09:44:15 -0600 Subject: [PATCH 54/72] catch exception with `socket.TCP_INFO` on WSL (#1212) * catch exception with `socket.TCP_INFO` on WSL fixes issue https://github.com/ros/ros_comm/issues/1207 this only catches socket error 92 * Update util.py * Update util.py * avoid unnecessary changes, change import order --- tools/rosmaster/src/rosmaster/util.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/tools/rosmaster/src/rosmaster/util.py b/tools/rosmaster/src/rosmaster/util.py index ee7d609ed5..6fb469d781 100644 --- a/tools/rosmaster/src/rosmaster/util.py +++ b/tools/rosmaster/src/rosmaster/util.py @@ -49,6 +49,7 @@ monkey_patch() del monkey_patch +import errno import socket _proxies = {} #cache ServerProxys @@ -72,7 +73,12 @@ def close_half_closed_sockets(): for proxy in _proxies.values(): transport = proxy("transport") if transport._connection and transport._connection[1] is not None and transport._connection[1].sock is not None: - state = transport._connection[1].sock.getsockopt(socket.SOL_TCP, socket.TCP_INFO) + try: + state = transport._connection[1].sock.getsockopt(socket.SOL_TCP, socket.TCP_INFO) + except socket.error as e: # catch [Errno 92] Protocol not available + if e.args[0] is errno.ENOPROTOOPT: + return + raise if state == 8: # CLOSE_WAIT transport.close() From 97488e265b3cccbb3ce8e81eb2686f4e89e08568 Mon Sep 17 00:00:00 2001 From: Dirk Thomas Date: Fri, 14 Jul 2017 13:58:10 -0700 Subject: [PATCH 55/72] fix path check --- utilities/roswtf/src/roswtf/environment.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/utilities/roswtf/src/roswtf/environment.py b/utilities/roswtf/src/roswtf/environment.py index b11260996c..1e21065863 100644 --- a/utilities/roswtf/src/roswtf/environment.py +++ b/utilities/roswtf/src/roswtf/environment.py @@ -128,7 +128,7 @@ def ros_test_results_dir_check(ctx): def pythonpath_check(ctx): # used to have a lot more checks here, but trying to phase out need for roslib on custom PYTHONPATH path = ctx.pythonpath - roslib_count = len(set([p for p in paths(path) if 'roslib' in p])) + roslib_count = len(set([p for p in paths(path) if 'roslib' in p.split(os.sep)])) if roslib_count > 1: return "Multiple roslib directories in PYTHONPATH (there should only be one)" From 73778dd02b055ca3ca92ca008d924ae58e4e97a0 Mon Sep 17 00:00:00 2001 From: Dirk Thomas Date: Fri, 14 Jul 2017 13:58:56 -0700 Subject: [PATCH 56/72] fix error message to mention what was actually tested --- utilities/roswtf/src/roswtf/rosdep_db.py | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/utilities/roswtf/src/roswtf/rosdep_db.py b/utilities/roswtf/src/roswtf/rosdep_db.py index 3173a910d4..285dab8cd4 100644 --- a/utilities/roswtf/src/roswtf/rosdep_db.py +++ b/utilities/roswtf/src/roswtf/rosdep_db.py @@ -41,15 +41,16 @@ def get_user_home_directory(): return os.path.expanduser("~") -def rosdep_database_initialized_check(ctx): - """Makes sure rosdep database is initialized""" +def rosdep_database_updated_check(ctx): + """Makes sure rosdep database is updated""" if not os.path.exists((os.path.join(get_user_home_directory(), '.ros', 'rosdep', 'sources.cache', 'index'))): - return "Please initialize rosdep database with sudo rosdep init." + return "Please update rosdep database with 'rosdep update'." + warnings = [] -errors = [(rosdep_database_initialized_check, - "ROS Dep database not initialized: "), +errors = [(rosdep_database_updated_check, + "ROS Dep database not updated: "), ] From 221413899ecb98a022a492b11abd0c432ce7ab1d Mon Sep 17 00:00:00 2001 From: Dirk Thomas Date: Fri, 14 Jul 2017 14:11:39 -0700 Subject: [PATCH 57/72] fix roswtf test when rosdep is not initialized --- utilities/roswtf/test/check_roswtf_command_line_online.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/utilities/roswtf/test/check_roswtf_command_line_online.py b/utilities/roswtf/test/check_roswtf_command_line_online.py index 46676c0eb4..2635c22169 100755 --- a/utilities/roswtf/test/check_roswtf_command_line_online.py +++ b/utilities/roswtf/test/check_roswtf_command_line_online.py @@ -127,13 +127,15 @@ def _check_output(self, cmd, output, error=None): 'No errors or warnings' in output or 'Found 1 error' in output, 'CMD[%s] OUTPUT[%s]%s' % (' '.join(cmd), output, '\nstderr[%s]' % error if error else '')) - if 'No errors or warnings' in output: - self.assert_('ERROR' not in output, 'OUTPUT[%s]' % output) + allowed_errors = 0 if 'Found 1 error' in output: self.assert_(output.count('ERROR') == 1, 'OUTPUT[%s]' % output) self.assert_( - 'Error: the rosdep view is empty' not in output, + 'ROS Dep database not updated' in output, 'OUTPUT[%s]' % output) + allowed_errors += 1 + if 'No errors or warnings' in output: + self.assert_(output.count('ERROR') <= allowed_errors, 'OUTPUT[%s]' % output) if __name__ == '__main__': rostest.run(PKG, NAME, TestRostopicOnline, sys.argv) From ffcc92f21c20b022ec81fd9ee4826295aa73e97b Mon Sep 17 00:00:00 2001 From: Dirk Thomas Date: Mon, 6 Nov 2017 09:15:22 -0800 Subject: [PATCH 58/72] update changelogs --- clients/roscpp/CHANGELOG.rst | 14 ++++++++++++++ clients/rospy/CHANGELOG.rst | 8 ++++++++ ros_comm/CHANGELOG.rst | 3 +++ tools/rosbag/CHANGELOG.rst | 7 +++++++ tools/rosbag_storage/CHANGELOG.rst | 12 ++++++++++++ tools/rosconsole/CHANGELOG.rst | 4 ++++ tools/rosgraph/CHANGELOG.rst | 4 ++++ tools/roslaunch/CHANGELOG.rst | 9 +++++++++ tools/rosmaster/CHANGELOG.rst | 5 +++++ tools/rosmsg/CHANGELOG.rst | 4 ++++ tools/rosnode/CHANGELOG.rst | 6 ++++++ tools/rosout/CHANGELOG.rst | 3 +++ tools/rosparam/CHANGELOG.rst | 3 +++ tools/rosservice/CHANGELOG.rst | 3 +++ tools/rostest/CHANGELOG.rst | 4 ++++ tools/rostopic/CHANGELOG.rst | 6 ++++++ tools/topic_tools/CHANGELOG.rst | 4 ++++ utilities/message_filters/CHANGELOG.rst | 3 +++ utilities/roslz4/CHANGELOG.rst | 4 ++++ utilities/roswtf/CHANGELOG.rst | 4 ++++ utilities/xmlrpcpp/CHANGELOG.rst | 4 ++++ 21 files changed, 114 insertions(+) diff --git a/clients/roscpp/CHANGELOG.rst b/clients/roscpp/CHANGELOG.rst index ab15d717c4..d369b3f4cd 100644 --- a/clients/roscpp/CHANGELOG.rst +++ b/clients/roscpp/CHANGELOG.rst @@ -2,6 +2,20 @@ Changelog for package roscpp ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Forthcoming +----------- +* check if socket options are available before using them (`#1172 `_) +* only use CLOCK_MONOTONIC if not on OS X (`#1142 `_) +* xmlrpc_manager: use SteadyTime for timeout (`#1134 `_) +* ignore headers with zero stamp in statistics (`#1127 `_) +* add SteadyTimer, used in TimerManager (`#1014 `_) +* include missing header for writev() (`#1105 `_) +* add missing mutex lock for publisher links (`#1090 `_) +* fix race condition that lead to miss first message (`#1058 `_) +* fix bug in transport_tcp on Windows (`#1050 `_) +* add subscriber to connection log messages (`#1023 `_) +* avoid deleting XmlRpcClient while being used in another thread (`#1013 `_) + 1.12.7 (2017-02-17) ------------------- * move connection specific log message to new name roscpp_internal.connections (`#980 `_) diff --git a/clients/rospy/CHANGELOG.rst b/clients/rospy/CHANGELOG.rst index d2a7e20106..5bf1101a2b 100644 --- a/clients/rospy/CHANGELOG.rst +++ b/clients/rospy/CHANGELOG.rst @@ -2,6 +2,14 @@ Changelog for package rospy ^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Forthcoming +----------- +* change rospy.Rate hz type from int to float (`#1177 `_) +* improve rospy.logXXX_throttle performance (`#1091 `_) +* add option to reset timer when time moved backwards (`#1083 `_) +* abort topic lookup on connection refused (`#1044 `_) +* sleep in rospy wait_for_service even if exceptions raised (`#1025 `_) + 1.12.7 (2017-02-17) ------------------- * make get_published_topics threadsafe (`#958 `_) diff --git a/ros_comm/CHANGELOG.rst b/ros_comm/CHANGELOG.rst index 0173a68b61..48b221e1d4 100644 --- a/ros_comm/CHANGELOG.rst +++ b/ros_comm/CHANGELOG.rst @@ -2,6 +2,9 @@ Changelog for package ros_comm ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Forthcoming +----------- + 1.12.7 (2017-02-17) ------------------- diff --git a/tools/rosbag/CHANGELOG.rst b/tools/rosbag/CHANGELOG.rst index b24be1b05c..1c4dda7483 100644 --- a/tools/rosbag/CHANGELOG.rst +++ b/tools/rosbag/CHANGELOG.rst @@ -2,6 +2,13 @@ Changelog for package rosbag ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Forthcoming +----------- +* fix Python 3 compatibility (`#1150 `_) +* fix handling connections without indices (`#1109 `_) +* improve message of check command (`#1067 `_) +* fix BZip2 inclusion (`#1016 `_) + 1.12.7 (2017-02-17) ------------------- * throw exception instead of accessing invalid memory (`#971 `_) diff --git a/tools/rosbag_storage/CHANGELOG.rst b/tools/rosbag_storage/CHANGELOG.rst index 95b57c948a..b51e72bd1f 100644 --- a/tools/rosbag_storage/CHANGELOG.rst +++ b/tools/rosbag_storage/CHANGELOG.rst @@ -2,6 +2,18 @@ Changelog for package rosbag_storage ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Forthcoming +----------- +* check if bzfile\_ and lz4s\_ handle is valid before reading/writing/closing (`#1183 `_) +* fix an out of bounds read in rosbag::View::iterator::increment() (`#1191 `_) +* replace usage deprecated console_bridge macros (`#1149 `_) +* fix whitespace warnings with g++ 7 (`#1138 `_) +* remove deprecated dynamic exception specifications (`#1137 `_) +* fix buffer overflow vulnerability (`#1092 `_) +* fix rosbag::View::iterator copy assignment operator (`#1017 `_) +* fix open mode on Windows (`#1005 `_) +* add swap function instead of copy constructor / assignment operator for rosbag::Bag (`#1000 `_) + 1.12.7 (2017-02-17) ------------------- diff --git a/tools/rosconsole/CHANGELOG.rst b/tools/rosconsole/CHANGELOG.rst index 82d6048548..36cca4392d 100644 --- a/tools/rosconsole/CHANGELOG.rst +++ b/tools/rosconsole/CHANGELOG.rst @@ -2,6 +2,10 @@ Changelog for package rosconsole ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Forthcoming +----------- +* replace 'while(0)' with 'while(false)' to avoid warnings (`#1179 `_) + 1.12.7 (2017-02-17) ------------------- diff --git a/tools/rosgraph/CHANGELOG.rst b/tools/rosgraph/CHANGELOG.rst index d923e73f2e..2b64d53727 100644 --- a/tools/rosgraph/CHANGELOG.rst +++ b/tools/rosgraph/CHANGELOG.rst @@ -2,6 +2,10 @@ Changelog for package rosgraph ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Forthcoming +----------- +* improve message when `roslogging` cannot change permissions (`#1068 `_) + 1.12.7 (2017-02-17) ------------------- diff --git a/tools/roslaunch/CHANGELOG.rst b/tools/roslaunch/CHANGELOG.rst index 6c8def3976..e763924db0 100644 --- a/tools/roslaunch/CHANGELOG.rst +++ b/tools/roslaunch/CHANGELOG.rst @@ -2,6 +2,15 @@ Changelog for package roslaunch ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Forthcoming +----------- +* fix parameter leaking into sibling scopes (`#1158 `_) +* remove mention of rosmake from error message (`#1140 `_) +* only launch core nodes if master was launched by roslaunch (`#1098 `_) +* ensure pid file is removed on exit (`#1057 `_, `#1084 `_) +* ensure cwd exists (`#1031 `_) +* respect if/unless for roslaunch-check (`#998 `_) + 1.12.7 (2017-02-17) ------------------- * improve error message for invalid tags (`#989 `_) diff --git a/tools/rosmaster/CHANGELOG.rst b/tools/rosmaster/CHANGELOG.rst index bbfde12103..5c64ea9914 100644 --- a/tools/rosmaster/CHANGELOG.rst +++ b/tools/rosmaster/CHANGELOG.rst @@ -2,6 +2,11 @@ Changelog for package rosmaster ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Forthcoming +----------- +* catch exception with `socket.TCP_INFO` on WSL (`#1212 `_, regression from 1.13.1) +* close CLOSE_WAIT sockets by default (`#1104 `_) + 1.12.7 (2017-02-17) ------------------- * add more logging to publisher update calls (`#979 `_) diff --git a/tools/rosmsg/CHANGELOG.rst b/tools/rosmsg/CHANGELOG.rst index 47c51e62a0..a941673ff8 100644 --- a/tools/rosmsg/CHANGELOG.rst +++ b/tools/rosmsg/CHANGELOG.rst @@ -2,6 +2,10 @@ Changelog for package rosmsg ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Forthcoming +----------- +* fix rosmsg show from bag (`#1006 `_) + 1.12.7 (2017-02-17) ------------------- * add rosmsg info as alias of rosmsg show (`#941 `_) diff --git a/tools/rosnode/CHANGELOG.rst b/tools/rosnode/CHANGELOG.rst index a86225bb8d..ec564090ef 100644 --- a/tools/rosnode/CHANGELOG.rst +++ b/tools/rosnode/CHANGELOG.rst @@ -2,6 +2,12 @@ Changelog for package rosnode ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Forthcoming +----------- +* return exit code 1 in case of errors (`#1178 `_) +* sort output of rosnode info (`#1160 `_) +* fix Python 3 compatibility (`#1166 `_) + 1.12.7 (2017-02-17) ------------------- diff --git a/tools/rosout/CHANGELOG.rst b/tools/rosout/CHANGELOG.rst index a65d17efaf..8dbac8d12c 100644 --- a/tools/rosout/CHANGELOG.rst +++ b/tools/rosout/CHANGELOG.rst @@ -2,6 +2,9 @@ Changelog for package rosout ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Forthcoming +----------- + 1.12.7 (2017-02-17) ------------------- diff --git a/tools/rosparam/CHANGELOG.rst b/tools/rosparam/CHANGELOG.rst index 5a84e065c4..e8806e0212 100644 --- a/tools/rosparam/CHANGELOG.rst +++ b/tools/rosparam/CHANGELOG.rst @@ -2,6 +2,9 @@ Changelog for package rosparam ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Forthcoming +----------- + 1.12.7 (2017-02-17) ------------------- diff --git a/tools/rosservice/CHANGELOG.rst b/tools/rosservice/CHANGELOG.rst index 64e83b7270..2844468fa4 100644 --- a/tools/rosservice/CHANGELOG.rst +++ b/tools/rosservice/CHANGELOG.rst @@ -2,6 +2,9 @@ Changelog for package rosservice ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Forthcoming +----------- + 1.12.7 (2017-02-17) ------------------- diff --git a/tools/rostest/CHANGELOG.rst b/tools/rostest/CHANGELOG.rst index 5ded1a7865..ea897db53a 100644 --- a/tools/rostest/CHANGELOG.rst +++ b/tools/rostest/CHANGELOG.rst @@ -2,6 +2,10 @@ Changelog for package rostest ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Forthcoming +----------- +* check clock publication neatly in publishtest (`#973 `_) + 1.12.7 (2017-02-17) ------------------- diff --git a/tools/rostopic/CHANGELOG.rst b/tools/rostopic/CHANGELOG.rst index 8cdd5e8dd1..aca028180d 100644 --- a/tools/rostopic/CHANGELOG.rst +++ b/tools/rostopic/CHANGELOG.rst @@ -2,6 +2,12 @@ Changelog for package rostopic ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Forthcoming +----------- +* fix rostopic hz and bw in Python 3 (`#1126 `_) +* update tests to match stringify changes (`#1125 `_) +* fix rostopic prining long integers (`#1110 `_) + 1.12.7 (2017-02-17) ------------------- diff --git a/tools/topic_tools/CHANGELOG.rst b/tools/topic_tools/CHANGELOG.rst index a3a032fa64..638a326c00 100644 --- a/tools/topic_tools/CHANGELOG.rst +++ b/tools/topic_tools/CHANGELOG.rst @@ -2,6 +2,10 @@ Changelog for package topic_tools ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Forthcoming +----------- +* make demux more agile (`#1196 `_) + 1.12.7 (2017-02-17) ------------------- diff --git a/utilities/message_filters/CHANGELOG.rst b/utilities/message_filters/CHANGELOG.rst index fd4359fc23..a76334d92b 100644 --- a/utilities/message_filters/CHANGELOG.rst +++ b/utilities/message_filters/CHANGELOG.rst @@ -2,6 +2,9 @@ Changelog for package message_filters ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Forthcoming +----------- + 1.12.7 (2017-02-17) ------------------- diff --git a/utilities/roslz4/CHANGELOG.rst b/utilities/roslz4/CHANGELOG.rst index 6520239120..ec0434e0b9 100644 --- a/utilities/roslz4/CHANGELOG.rst +++ b/utilities/roslz4/CHANGELOG.rst @@ -2,6 +2,10 @@ Changelog for package roslz4 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Forthcoming +----------- +* replace deprecated lz4 function call (`#1136 `_) + 1.12.7 (2017-02-17) ------------------- diff --git a/utilities/roswtf/CHANGELOG.rst b/utilities/roswtf/CHANGELOG.rst index b01b529301..c990ba07d7 100644 --- a/utilities/roswtf/CHANGELOG.rst +++ b/utilities/roswtf/CHANGELOG.rst @@ -2,6 +2,10 @@ Changelog for package roswtf ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Forthcoming +----------- +* improve roswtf tests (`#1102 `_) + 1.12.7 (2017-02-17) ------------------- diff --git a/utilities/xmlrpcpp/CHANGELOG.rst b/utilities/xmlrpcpp/CHANGELOG.rst index 60cf2d08bb..c5b9869f20 100644 --- a/utilities/xmlrpcpp/CHANGELOG.rst +++ b/utilities/xmlrpcpp/CHANGELOG.rst @@ -2,6 +2,10 @@ Changelog for package xmlrpcpp ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Forthcoming +----------- +* use poll() in favor of select() in the XmlRPCDispatcher (`#833 `_) + 1.12.7 (2017-02-17) ------------------- * move headers to include/xmlrpcpp (`#962 `_) From 0e7327f5d203da52f3a162dcea9322d87c93672c Mon Sep 17 00:00:00 2001 From: Dirk Thomas Date: Mon, 6 Nov 2017 09:16:12 -0800 Subject: [PATCH 59/72] 1.12.8 --- clients/roscpp/CHANGELOG.rst | 4 ++-- clients/roscpp/package.xml | 2 +- clients/rospy/CHANGELOG.rst | 4 ++-- clients/rospy/package.xml | 2 +- ros_comm/CHANGELOG.rst | 4 ++-- ros_comm/package.xml | 2 +- test/test_rosbag/package.xml | 2 +- test/test_rosbag_storage/package.xml | 2 +- test/test_roscpp/package.xml | 2 +- test/test_rosgraph/package.xml | 2 +- test/test_roslaunch/package.xml | 2 +- test/test_roslib_comm/package.xml | 2 +- test/test_rosmaster/package.xml | 2 +- test/test_rosparam/package.xml | 2 +- test/test_rospy/package.xml | 2 +- test/test_rosservice/package.xml | 2 +- test/test_rostopic/package.xml | 2 +- tools/rosbag/CHANGELOG.rst | 4 ++-- tools/rosbag/package.xml | 2 +- tools/rosbag_storage/CHANGELOG.rst | 4 ++-- tools/rosbag_storage/package.xml | 2 +- tools/rosconsole/CHANGELOG.rst | 4 ++-- tools/rosconsole/package.xml | 2 +- tools/rosgraph/CHANGELOG.rst | 4 ++-- tools/rosgraph/package.xml | 2 +- tools/roslaunch/CHANGELOG.rst | 4 ++-- tools/roslaunch/package.xml | 2 +- tools/rosmaster/CHANGELOG.rst | 4 ++-- tools/rosmaster/package.xml | 2 +- tools/rosmsg/CHANGELOG.rst | 4 ++-- tools/rosmsg/package.xml | 2 +- tools/rosnode/CHANGELOG.rst | 4 ++-- tools/rosnode/package.xml | 2 +- tools/rosout/CHANGELOG.rst | 4 ++-- tools/rosout/package.xml | 2 +- tools/rosparam/CHANGELOG.rst | 4 ++-- tools/rosparam/package.xml | 2 +- tools/rosservice/CHANGELOG.rst | 4 ++-- tools/rosservice/package.xml | 2 +- tools/rostest/CHANGELOG.rst | 4 ++-- tools/rostest/package.xml | 2 +- tools/rostopic/CHANGELOG.rst | 4 ++-- tools/rostopic/package.xml | 2 +- tools/topic_tools/CHANGELOG.rst | 4 ++-- tools/topic_tools/package.xml | 2 +- utilities/message_filters/CHANGELOG.rst | 4 ++-- utilities/message_filters/package.xml | 2 +- utilities/roslz4/CHANGELOG.rst | 4 ++-- utilities/roslz4/package.xml | 2 +- utilities/roswtf/CHANGELOG.rst | 4 ++-- utilities/roswtf/package.xml | 2 +- utilities/xmlrpcpp/CHANGELOG.rst | 4 ++-- utilities/xmlrpcpp/package.xml | 2 +- 53 files changed, 74 insertions(+), 74 deletions(-) diff --git a/clients/roscpp/CHANGELOG.rst b/clients/roscpp/CHANGELOG.rst index d369b3f4cd..672033413b 100644 --- a/clients/roscpp/CHANGELOG.rst +++ b/clients/roscpp/CHANGELOG.rst @@ -2,8 +2,8 @@ Changelog for package roscpp ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -Forthcoming ------------ +1.12.8 (2017-11-06) +------------------- * check if socket options are available before using them (`#1172 `_) * only use CLOCK_MONOTONIC if not on OS X (`#1142 `_) * xmlrpc_manager: use SteadyTime for timeout (`#1134 `_) diff --git a/clients/roscpp/package.xml b/clients/roscpp/package.xml index cfa20593da..9d57e54526 100644 --- a/clients/roscpp/package.xml +++ b/clients/roscpp/package.xml @@ -1,6 +1,6 @@ roscpp - 1.12.7 + 1.12.8 roscpp is a C++ implementation of ROS. It provides a client diff --git a/clients/rospy/CHANGELOG.rst b/clients/rospy/CHANGELOG.rst index 5bf1101a2b..190ab99135 100644 --- a/clients/rospy/CHANGELOG.rst +++ b/clients/rospy/CHANGELOG.rst @@ -2,8 +2,8 @@ Changelog for package rospy ^^^^^^^^^^^^^^^^^^^^^^^^^^^ -Forthcoming ------------ +1.12.8 (2017-11-06) +------------------- * change rospy.Rate hz type from int to float (`#1177 `_) * improve rospy.logXXX_throttle performance (`#1091 `_) * add option to reset timer when time moved backwards (`#1083 `_) diff --git a/clients/rospy/package.xml b/clients/rospy/package.xml index a3f3b0b6f3..5bf62a1837 100644 --- a/clients/rospy/package.xml +++ b/clients/rospy/package.xml @@ -1,6 +1,6 @@ rospy - 1.12.7 + 1.12.8 rospy is a pure Python client library for ROS. The rospy client API enables Python programmers to quickly interface with ROS ros_comm - 1.12.7 + 1.12.8 ROS communications-related packages, including core client libraries (roscpp, rospy) and graph introspection tools (rostopic, rosnode, rosservice, rosparam). diff --git a/test/test_rosbag/package.xml b/test/test_rosbag/package.xml index 0566dc0dca..993f8c759c 100644 --- a/test/test_rosbag/package.xml +++ b/test/test_rosbag/package.xml @@ -1,6 +1,6 @@ test_rosbag - 1.12.7 + 1.12.8 A package containing the unit tests for rosbag. diff --git a/test/test_rosbag_storage/package.xml b/test/test_rosbag_storage/package.xml index 92a4b9e049..d81ec9052b 100644 --- a/test/test_rosbag_storage/package.xml +++ b/test/test_rosbag_storage/package.xml @@ -1,6 +1,6 @@ test_rosbag_storage - 1.12.7 + 1.12.8 A package containing the unit tests for rosbag_storage. diff --git a/test/test_roscpp/package.xml b/test/test_roscpp/package.xml index e956eb5398..ff531450ba 100644 --- a/test/test_roscpp/package.xml +++ b/test/test_roscpp/package.xml @@ -1,6 +1,6 @@ test_roscpp - 1.12.7 + 1.12.8 Tests for roscpp which depend on rostest. diff --git a/test/test_rosgraph/package.xml b/test/test_rosgraph/package.xml index 784f3fd6d6..4f16f9876c 100644 --- a/test/test_rosgraph/package.xml +++ b/test/test_rosgraph/package.xml @@ -1,6 +1,6 @@ test_rosgraph - 1.12.7 + 1.12.8 Tests for rosgraph which depend on rostest. diff --git a/test/test_roslaunch/package.xml b/test/test_roslaunch/package.xml index 2cbe5cc3fb..cf496bb488 100644 --- a/test/test_roslaunch/package.xml +++ b/test/test_roslaunch/package.xml @@ -1,6 +1,6 @@ test_roslaunch - 1.12.7 + 1.12.8 Tests for roslaunch which depend on rostest. diff --git a/test/test_roslib_comm/package.xml b/test/test_roslib_comm/package.xml index 48136ff166..3c6ae37411 100644 --- a/test/test_roslib_comm/package.xml +++ b/test/test_roslib_comm/package.xml @@ -1,6 +1,6 @@ test_roslib_comm - 1.12.7 + 1.12.8 Unit tests verifying that roslib is operating as expected. diff --git a/test/test_rosmaster/package.xml b/test/test_rosmaster/package.xml index 53088238fe..f7f1b1c6d3 100644 --- a/test/test_rosmaster/package.xml +++ b/test/test_rosmaster/package.xml @@ -1,6 +1,6 @@ test_rosmaster - 1.12.7 + 1.12.8 Tests for rosmaster which depend on rostest. diff --git a/test/test_rosparam/package.xml b/test/test_rosparam/package.xml index 47653a9e24..9a0e9def8d 100644 --- a/test/test_rosparam/package.xml +++ b/test/test_rosparam/package.xml @@ -1,6 +1,6 @@ test_rosparam - 1.12.7 + 1.12.8 A package containing the unit tests for rosparam. diff --git a/test/test_rospy/package.xml b/test/test_rospy/package.xml index 5fac086b40..1d94df6ebb 100644 --- a/test/test_rospy/package.xml +++ b/test/test_rospy/package.xml @@ -1,6 +1,6 @@ test_rospy - 1.12.7 + 1.12.8 rospy unit and integration test framework. diff --git a/test/test_rosservice/package.xml b/test/test_rosservice/package.xml index bc9b4192a4..9503d95c34 100644 --- a/test/test_rosservice/package.xml +++ b/test/test_rosservice/package.xml @@ -1,6 +1,6 @@ test_rosservice - 1.12.7 + 1.12.8 Tests for the rosservice tool. diff --git a/test/test_rostopic/package.xml b/test/test_rostopic/package.xml index 0ce77a60f0..03ec862dc5 100644 --- a/test/test_rostopic/package.xml +++ b/test/test_rostopic/package.xml @@ -1,6 +1,6 @@ test_rostopic - 1.12.7 + 1.12.8 Tests for rostopic. diff --git a/tools/rosbag/CHANGELOG.rst b/tools/rosbag/CHANGELOG.rst index 1c4dda7483..62495e8a3b 100644 --- a/tools/rosbag/CHANGELOG.rst +++ b/tools/rosbag/CHANGELOG.rst @@ -2,8 +2,8 @@ Changelog for package rosbag ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -Forthcoming ------------ +1.12.8 (2017-11-06) +------------------- * fix Python 3 compatibility (`#1150 `_) * fix handling connections without indices (`#1109 `_) * improve message of check command (`#1067 `_) diff --git a/tools/rosbag/package.xml b/tools/rosbag/package.xml index dc2a151a13..ec5fd27341 100644 --- a/tools/rosbag/package.xml +++ b/tools/rosbag/package.xml @@ -1,6 +1,6 @@ rosbag - 1.12.7 + 1.12.8 This is a set of tools for recording from and playing back to ROS topics. It is intended to be high performance and avoids diff --git a/tools/rosbag_storage/CHANGELOG.rst b/tools/rosbag_storage/CHANGELOG.rst index b51e72bd1f..d925aac28e 100644 --- a/tools/rosbag_storage/CHANGELOG.rst +++ b/tools/rosbag_storage/CHANGELOG.rst @@ -2,8 +2,8 @@ Changelog for package rosbag_storage ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -Forthcoming ------------ +1.12.8 (2017-11-06) +------------------- * check if bzfile\_ and lz4s\_ handle is valid before reading/writing/closing (`#1183 `_) * fix an out of bounds read in rosbag::View::iterator::increment() (`#1191 `_) * replace usage deprecated console_bridge macros (`#1149 `_) diff --git a/tools/rosbag_storage/package.xml b/tools/rosbag_storage/package.xml index cbd77d7068..e0d4e9fa8b 100644 --- a/tools/rosbag_storage/package.xml +++ b/tools/rosbag_storage/package.xml @@ -1,6 +1,6 @@ rosbag_storage - 1.12.7 + 1.12.8 This is a set of tools for recording from and playing back ROS message without relying on the ROS client library. diff --git a/tools/rosconsole/CHANGELOG.rst b/tools/rosconsole/CHANGELOG.rst index 36cca4392d..c9a6c69d92 100644 --- a/tools/rosconsole/CHANGELOG.rst +++ b/tools/rosconsole/CHANGELOG.rst @@ -2,8 +2,8 @@ Changelog for package rosconsole ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -Forthcoming ------------ +1.12.8 (2017-11-06) +------------------- * replace 'while(0)' with 'while(false)' to avoid warnings (`#1179 `_) 1.12.7 (2017-02-17) diff --git a/tools/rosconsole/package.xml b/tools/rosconsole/package.xml index b9ebff0eb5..16cba187ca 100644 --- a/tools/rosconsole/package.xml +++ b/tools/rosconsole/package.xml @@ -1,6 +1,6 @@ rosconsole - 1.12.7 + 1.12.8 ROS console output library. Dirk Thomas BSD diff --git a/tools/rosgraph/CHANGELOG.rst b/tools/rosgraph/CHANGELOG.rst index 2b64d53727..f4e539a9a1 100644 --- a/tools/rosgraph/CHANGELOG.rst +++ b/tools/rosgraph/CHANGELOG.rst @@ -2,8 +2,8 @@ Changelog for package rosgraph ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -Forthcoming ------------ +1.12.8 (2017-11-06) +------------------- * improve message when `roslogging` cannot change permissions (`#1068 `_) 1.12.7 (2017-02-17) diff --git a/tools/rosgraph/package.xml b/tools/rosgraph/package.xml index 09a870af2f..54ddd1a0ae 100644 --- a/tools/rosgraph/package.xml +++ b/tools/rosgraph/package.xml @@ -1,6 +1,6 @@ rosgraph - 1.12.7 + 1.12.8 rosgraph contains the rosgraph command-line tool, which prints information about the ROS Computation Graph. It also provides an diff --git a/tools/roslaunch/CHANGELOG.rst b/tools/roslaunch/CHANGELOG.rst index e763924db0..933044db5c 100644 --- a/tools/roslaunch/CHANGELOG.rst +++ b/tools/roslaunch/CHANGELOG.rst @@ -2,8 +2,8 @@ Changelog for package roslaunch ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -Forthcoming ------------ +1.12.8 (2017-11-06) +------------------- * fix parameter leaking into sibling scopes (`#1158 `_) * remove mention of rosmake from error message (`#1140 `_) * only launch core nodes if master was launched by roslaunch (`#1098 `_) diff --git a/tools/roslaunch/package.xml b/tools/roslaunch/package.xml index aba1045bba..686b978247 100644 --- a/tools/roslaunch/package.xml +++ b/tools/roslaunch/package.xml @@ -1,6 +1,6 @@ roslaunch - 1.12.7 + 1.12.8 roslaunch is a tool for easily launching multiple ROS nodes locally and remotely diff --git a/tools/rosmaster/CHANGELOG.rst b/tools/rosmaster/CHANGELOG.rst index 5c64ea9914..66f2f81e79 100644 --- a/tools/rosmaster/CHANGELOG.rst +++ b/tools/rosmaster/CHANGELOG.rst @@ -2,8 +2,8 @@ Changelog for package rosmaster ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -Forthcoming ------------ +1.12.8 (2017-11-06) +------------------- * catch exception with `socket.TCP_INFO` on WSL (`#1212 `_, regression from 1.13.1) * close CLOSE_WAIT sockets by default (`#1104 `_) diff --git a/tools/rosmaster/package.xml b/tools/rosmaster/package.xml index 0fc16ab40c..f13d3c14d0 100644 --- a/tools/rosmaster/package.xml +++ b/tools/rosmaster/package.xml @@ -1,6 +1,6 @@ rosmaster - 1.12.7 + 1.12.8 ROS Master implementation. diff --git a/tools/rosmsg/CHANGELOG.rst b/tools/rosmsg/CHANGELOG.rst index a941673ff8..01c4e22401 100644 --- a/tools/rosmsg/CHANGELOG.rst +++ b/tools/rosmsg/CHANGELOG.rst @@ -2,8 +2,8 @@ Changelog for package rosmsg ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -Forthcoming ------------ +1.12.8 (2017-11-06) +------------------- * fix rosmsg show from bag (`#1006 `_) 1.12.7 (2017-02-17) diff --git a/tools/rosmsg/package.xml b/tools/rosmsg/package.xml index 976ed24c5e..e875c39464 100644 --- a/tools/rosmsg/package.xml +++ b/tools/rosmsg/package.xml @@ -1,6 +1,6 @@ rosmsg - 1.12.7 + 1.12.8 rosmsg contains two command-line tools: rosmsg and rossrv. rosmsg is a command-line tool for diff --git a/tools/rosnode/CHANGELOG.rst b/tools/rosnode/CHANGELOG.rst index ec564090ef..5dd15e0f1e 100644 --- a/tools/rosnode/CHANGELOG.rst +++ b/tools/rosnode/CHANGELOG.rst @@ -2,8 +2,8 @@ Changelog for package rosnode ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -Forthcoming ------------ +1.12.8 (2017-11-06) +------------------- * return exit code 1 in case of errors (`#1178 `_) * sort output of rosnode info (`#1160 `_) * fix Python 3 compatibility (`#1166 `_) diff --git a/tools/rosnode/package.xml b/tools/rosnode/package.xml index 92e6fc0a01..1c00c73a1d 100644 --- a/tools/rosnode/package.xml +++ b/tools/rosnode/package.xml @@ -1,6 +1,6 @@ rosnode - 1.12.7 + 1.12.8 rosnode is a command-line tool for displaying debug information about ROS Nodes, diff --git a/tools/rosout/CHANGELOG.rst b/tools/rosout/CHANGELOG.rst index 8dbac8d12c..4fcf1e8a35 100644 --- a/tools/rosout/CHANGELOG.rst +++ b/tools/rosout/CHANGELOG.rst @@ -2,8 +2,8 @@ Changelog for package rosout ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -Forthcoming ------------ +1.12.8 (2017-11-06) +------------------- 1.12.7 (2017-02-17) ------------------- diff --git a/tools/rosout/package.xml b/tools/rosout/package.xml index b090cfc67d..32a93558e3 100644 --- a/tools/rosout/package.xml +++ b/tools/rosout/package.xml @@ -1,6 +1,6 @@ rosout - 1.12.7 + 1.12.8 System-wide logging mechanism for messages sent to the /rosout topic. diff --git a/tools/rosparam/CHANGELOG.rst b/tools/rosparam/CHANGELOG.rst index e8806e0212..a565778af4 100644 --- a/tools/rosparam/CHANGELOG.rst +++ b/tools/rosparam/CHANGELOG.rst @@ -2,8 +2,8 @@ Changelog for package rosparam ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -Forthcoming ------------ +1.12.8 (2017-11-06) +------------------- 1.12.7 (2017-02-17) ------------------- diff --git a/tools/rosparam/package.xml b/tools/rosparam/package.xml index def38a3e6b..0789b39343 100644 --- a/tools/rosparam/package.xml +++ b/tools/rosparam/package.xml @@ -1,6 +1,6 @@ rosparam - 1.12.7 + 1.12.8 rosparam contains the rosparam command-line tool for getting and setting ROS Parameters on the rosservice - 1.12.7 + 1.12.8 rosservice contains the rosservice command-line tool for listing and querying ROS `_) 1.12.7 (2017-02-17) diff --git a/tools/rostest/package.xml b/tools/rostest/package.xml index 8f23233301..298a3d3cdf 100644 --- a/tools/rostest/package.xml +++ b/tools/rostest/package.xml @@ -1,6 +1,6 @@ rostest - 1.12.7 + 1.12.8 Integration test suite based on roslaunch that is compatible with xUnit frameworks. diff --git a/tools/rostopic/CHANGELOG.rst b/tools/rostopic/CHANGELOG.rst index aca028180d..50e8897544 100644 --- a/tools/rostopic/CHANGELOG.rst +++ b/tools/rostopic/CHANGELOG.rst @@ -2,8 +2,8 @@ Changelog for package rostopic ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -Forthcoming ------------ +1.12.8 (2017-11-06) +------------------- * fix rostopic hz and bw in Python 3 (`#1126 `_) * update tests to match stringify changes (`#1125 `_) * fix rostopic prining long integers (`#1110 `_) diff --git a/tools/rostopic/package.xml b/tools/rostopic/package.xml index 8e8c647b6a..860adec881 100644 --- a/tools/rostopic/package.xml +++ b/tools/rostopic/package.xml @@ -1,6 +1,6 @@ rostopic - 1.12.7 + 1.12.8 rostopic contains the rostopic command-line tool for displaying debug information about diff --git a/tools/topic_tools/CHANGELOG.rst b/tools/topic_tools/CHANGELOG.rst index 638a326c00..6a96d1c901 100644 --- a/tools/topic_tools/CHANGELOG.rst +++ b/tools/topic_tools/CHANGELOG.rst @@ -2,8 +2,8 @@ Changelog for package topic_tools ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -Forthcoming ------------ +1.12.8 (2017-11-06) +------------------- * make demux more agile (`#1196 `_) 1.12.7 (2017-02-17) diff --git a/tools/topic_tools/package.xml b/tools/topic_tools/package.xml index 59bf0dae48..bbd8bbc965 100644 --- a/tools/topic_tools/package.xml +++ b/tools/topic_tools/package.xml @@ -1,6 +1,6 @@ topic_tools - 1.12.7 + 1.12.8 Tools for directing, throttling, selecting, and otherwise messing with ROS topics at a meta level. None of the programs in this package actually diff --git a/utilities/message_filters/CHANGELOG.rst b/utilities/message_filters/CHANGELOG.rst index a76334d92b..72dec4af61 100644 --- a/utilities/message_filters/CHANGELOG.rst +++ b/utilities/message_filters/CHANGELOG.rst @@ -2,8 +2,8 @@ Changelog for package message_filters ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -Forthcoming ------------ +1.12.8 (2017-11-06) +------------------- 1.12.7 (2017-02-17) ------------------- diff --git a/utilities/message_filters/package.xml b/utilities/message_filters/package.xml index 3de27a9ca4..7e0d84f341 100644 --- a/utilities/message_filters/package.xml +++ b/utilities/message_filters/package.xml @@ -1,6 +1,6 @@ message_filters - 1.12.7 + 1.12.8 A set of message filters which take in messages and may output those messages at a later time, based on the conditions that filter needs met. diff --git a/utilities/roslz4/CHANGELOG.rst b/utilities/roslz4/CHANGELOG.rst index ec0434e0b9..9bb8c30a0f 100644 --- a/utilities/roslz4/CHANGELOG.rst +++ b/utilities/roslz4/CHANGELOG.rst @@ -2,8 +2,8 @@ Changelog for package roslz4 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -Forthcoming ------------ +1.12.8 (2017-11-06) +------------------- * replace deprecated lz4 function call (`#1136 `_) 1.12.7 (2017-02-17) diff --git a/utilities/roslz4/package.xml b/utilities/roslz4/package.xml index 432164f21d..b5cec18662 100644 --- a/utilities/roslz4/package.xml +++ b/utilities/roslz4/package.xml @@ -1,7 +1,7 @@ roslz4 - 1.12.7 + 1.12.8 A Python and C++ implementation of the LZ4 streaming format. Large data streams are split into blocks which are compressed using the very fast LZ4 diff --git a/utilities/roswtf/CHANGELOG.rst b/utilities/roswtf/CHANGELOG.rst index c990ba07d7..e016b4d223 100644 --- a/utilities/roswtf/CHANGELOG.rst +++ b/utilities/roswtf/CHANGELOG.rst @@ -2,8 +2,8 @@ Changelog for package roswtf ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -Forthcoming ------------ +1.12.8 (2017-11-06) +------------------- * improve roswtf tests (`#1102 `_) 1.12.7 (2017-02-17) diff --git a/utilities/roswtf/package.xml b/utilities/roswtf/package.xml index 60d81977ce..8b6db7b7c2 100644 --- a/utilities/roswtf/package.xml +++ b/utilities/roswtf/package.xml @@ -1,6 +1,6 @@ roswtf - 1.12.7 + 1.12.8 roswtf is a tool for diagnosing issues with a running ROS system. Think of it as a FAQ implemented in code. diff --git a/utilities/xmlrpcpp/CHANGELOG.rst b/utilities/xmlrpcpp/CHANGELOG.rst index c5b9869f20..1576dc934c 100644 --- a/utilities/xmlrpcpp/CHANGELOG.rst +++ b/utilities/xmlrpcpp/CHANGELOG.rst @@ -2,8 +2,8 @@ Changelog for package xmlrpcpp ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -Forthcoming ------------ +1.12.8 (2017-11-06) +------------------- * use poll() in favor of select() in the XmlRPCDispatcher (`#833 `_) 1.12.7 (2017-02-17) diff --git a/utilities/xmlrpcpp/package.xml b/utilities/xmlrpcpp/package.xml index 6749d82297..b45cc461e6 100644 --- a/utilities/xmlrpcpp/package.xml +++ b/utilities/xmlrpcpp/package.xml @@ -1,6 +1,6 @@ xmlrpcpp - 1.12.7 + 1.12.8 XmlRpc++ is a C++ implementation of the XML-RPC protocol. This version is heavily modified from the package available on SourceForge in order to From a5c74ec07be9bbfb61d97fcc8077494e63cde99d Mon Sep 17 00:00:00 2001 From: Dirk Thomas Date: Mon, 6 Nov 2017 11:28:12 -0800 Subject: [PATCH 60/72] backward compatibility with libconsole-bridge in Jessie --- tools/rosbag_storage/include/rosbag/bag.h | 6 ++++++ tools/rosbag_storage/src/bag.cpp | 6 ++++++ 2 files changed, 12 insertions(+) diff --git a/tools/rosbag_storage/include/rosbag/bag.h b/tools/rosbag_storage/include/rosbag/bag.h index 526c1dab03..4df626219c 100644 --- a/tools/rosbag_storage/include/rosbag/bag.h +++ b/tools/rosbag_storage/include/rosbag/bag.h @@ -74,6 +74,12 @@ # undef logError #endif +// Remove this when no longer supporting platforms with libconsole-bridge-dev < 0.3.0, +// in particular Debian Jessie: https://packages.debian.org/jessie/libconsole-bridge-dev +#ifndef CONSOLE_BRIDGE_logDebug + #define CONSOLE_BRIDGE_logDebug logDebug +#endif + namespace rosbag { namespace bagmode diff --git a/tools/rosbag_storage/src/bag.cpp b/tools/rosbag_storage/src/bag.cpp index b030852cfe..a55b3cc056 100644 --- a/tools/rosbag_storage/src/bag.cpp +++ b/tools/rosbag_storage/src/bag.cpp @@ -43,6 +43,12 @@ #include "console_bridge/console.h" +// Remove this when no longer supporting platforms with libconsole-bridge-dev < 0.3.0, +// in particular Debian Jessie: https://packages.debian.org/jessie/libconsole-bridge-dev +#ifndef CONSOLE_BRIDGE_logError + #define CONSOLE_BRIDGE_logError logError +#endif + #define foreach BOOST_FOREACH using std::map; From d12376156c5aab35635689e35f6887224078d65e Mon Sep 17 00:00:00 2001 From: Dirk Thomas Date: Mon, 6 Nov 2017 11:31:30 -0800 Subject: [PATCH 61/72] update changelogs --- clients/roscpp/CHANGELOG.rst | 3 +++ clients/rospy/CHANGELOG.rst | 3 +++ ros_comm/CHANGELOG.rst | 3 +++ tools/rosbag/CHANGELOG.rst | 3 +++ tools/rosbag_storage/CHANGELOG.rst | 4 ++++ tools/rosconsole/CHANGELOG.rst | 3 +++ tools/rosgraph/CHANGELOG.rst | 3 +++ tools/roslaunch/CHANGELOG.rst | 3 +++ tools/rosmaster/CHANGELOG.rst | 3 +++ tools/rosmsg/CHANGELOG.rst | 3 +++ tools/rosnode/CHANGELOG.rst | 3 +++ tools/rosout/CHANGELOG.rst | 3 +++ tools/rosparam/CHANGELOG.rst | 3 +++ tools/rosservice/CHANGELOG.rst | 3 +++ tools/rostest/CHANGELOG.rst | 3 +++ tools/rostopic/CHANGELOG.rst | 3 +++ tools/topic_tools/CHANGELOG.rst | 3 +++ utilities/message_filters/CHANGELOG.rst | 3 +++ utilities/roslz4/CHANGELOG.rst | 3 +++ utilities/roswtf/CHANGELOG.rst | 3 +++ utilities/xmlrpcpp/CHANGELOG.rst | 3 +++ 21 files changed, 64 insertions(+) diff --git a/clients/roscpp/CHANGELOG.rst b/clients/roscpp/CHANGELOG.rst index 672033413b..d90d58ae23 100644 --- a/clients/roscpp/CHANGELOG.rst +++ b/clients/roscpp/CHANGELOG.rst @@ -2,6 +2,9 @@ Changelog for package roscpp ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Forthcoming +----------- + 1.12.8 (2017-11-06) ------------------- * check if socket options are available before using them (`#1172 `_) diff --git a/clients/rospy/CHANGELOG.rst b/clients/rospy/CHANGELOG.rst index 190ab99135..d70bba89fa 100644 --- a/clients/rospy/CHANGELOG.rst +++ b/clients/rospy/CHANGELOG.rst @@ -2,6 +2,9 @@ Changelog for package rospy ^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Forthcoming +----------- + 1.12.8 (2017-11-06) ------------------- * change rospy.Rate hz type from int to float (`#1177 `_) diff --git a/ros_comm/CHANGELOG.rst b/ros_comm/CHANGELOG.rst index d34cd6e106..32f17e86dd 100644 --- a/ros_comm/CHANGELOG.rst +++ b/ros_comm/CHANGELOG.rst @@ -2,6 +2,9 @@ Changelog for package ros_comm ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Forthcoming +----------- + 1.12.8 (2017-11-06) ------------------- diff --git a/tools/rosbag/CHANGELOG.rst b/tools/rosbag/CHANGELOG.rst index 62495e8a3b..74f7f6d6bf 100644 --- a/tools/rosbag/CHANGELOG.rst +++ b/tools/rosbag/CHANGELOG.rst @@ -2,6 +2,9 @@ Changelog for package rosbag ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Forthcoming +----------- + 1.12.8 (2017-11-06) ------------------- * fix Python 3 compatibility (`#1150 `_) diff --git a/tools/rosbag_storage/CHANGELOG.rst b/tools/rosbag_storage/CHANGELOG.rst index d925aac28e..a18677a07f 100644 --- a/tools/rosbag_storage/CHANGELOG.rst +++ b/tools/rosbag_storage/CHANGELOG.rst @@ -2,6 +2,10 @@ Changelog for package rosbag_storage ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Forthcoming +----------- +* fix compatibility with libconsole-bridge in Jessie (`#1219 `_, regression from 1.12.8) + 1.12.8 (2017-11-06) ------------------- * check if bzfile\_ and lz4s\_ handle is valid before reading/writing/closing (`#1183 `_) diff --git a/tools/rosconsole/CHANGELOG.rst b/tools/rosconsole/CHANGELOG.rst index c9a6c69d92..23cda0d011 100644 --- a/tools/rosconsole/CHANGELOG.rst +++ b/tools/rosconsole/CHANGELOG.rst @@ -2,6 +2,9 @@ Changelog for package rosconsole ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Forthcoming +----------- + 1.12.8 (2017-11-06) ------------------- * replace 'while(0)' with 'while(false)' to avoid warnings (`#1179 `_) diff --git a/tools/rosgraph/CHANGELOG.rst b/tools/rosgraph/CHANGELOG.rst index f4e539a9a1..d184916cfe 100644 --- a/tools/rosgraph/CHANGELOG.rst +++ b/tools/rosgraph/CHANGELOG.rst @@ -2,6 +2,9 @@ Changelog for package rosgraph ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Forthcoming +----------- + 1.12.8 (2017-11-06) ------------------- * improve message when `roslogging` cannot change permissions (`#1068 `_) diff --git a/tools/roslaunch/CHANGELOG.rst b/tools/roslaunch/CHANGELOG.rst index 933044db5c..aff87c8459 100644 --- a/tools/roslaunch/CHANGELOG.rst +++ b/tools/roslaunch/CHANGELOG.rst @@ -2,6 +2,9 @@ Changelog for package roslaunch ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Forthcoming +----------- + 1.12.8 (2017-11-06) ------------------- * fix parameter leaking into sibling scopes (`#1158 `_) diff --git a/tools/rosmaster/CHANGELOG.rst b/tools/rosmaster/CHANGELOG.rst index 66f2f81e79..ce922748de 100644 --- a/tools/rosmaster/CHANGELOG.rst +++ b/tools/rosmaster/CHANGELOG.rst @@ -2,6 +2,9 @@ Changelog for package rosmaster ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Forthcoming +----------- + 1.12.8 (2017-11-06) ------------------- * catch exception with `socket.TCP_INFO` on WSL (`#1212 `_, regression from 1.13.1) diff --git a/tools/rosmsg/CHANGELOG.rst b/tools/rosmsg/CHANGELOG.rst index 01c4e22401..b507880d8f 100644 --- a/tools/rosmsg/CHANGELOG.rst +++ b/tools/rosmsg/CHANGELOG.rst @@ -2,6 +2,9 @@ Changelog for package rosmsg ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Forthcoming +----------- + 1.12.8 (2017-11-06) ------------------- * fix rosmsg show from bag (`#1006 `_) diff --git a/tools/rosnode/CHANGELOG.rst b/tools/rosnode/CHANGELOG.rst index 5dd15e0f1e..fb8b6f9ad3 100644 --- a/tools/rosnode/CHANGELOG.rst +++ b/tools/rosnode/CHANGELOG.rst @@ -2,6 +2,9 @@ Changelog for package rosnode ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Forthcoming +----------- + 1.12.8 (2017-11-06) ------------------- * return exit code 1 in case of errors (`#1178 `_) diff --git a/tools/rosout/CHANGELOG.rst b/tools/rosout/CHANGELOG.rst index 4fcf1e8a35..2f01000a40 100644 --- a/tools/rosout/CHANGELOG.rst +++ b/tools/rosout/CHANGELOG.rst @@ -2,6 +2,9 @@ Changelog for package rosout ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Forthcoming +----------- + 1.12.8 (2017-11-06) ------------------- diff --git a/tools/rosparam/CHANGELOG.rst b/tools/rosparam/CHANGELOG.rst index a565778af4..fdc4ab1487 100644 --- a/tools/rosparam/CHANGELOG.rst +++ b/tools/rosparam/CHANGELOG.rst @@ -2,6 +2,9 @@ Changelog for package rosparam ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Forthcoming +----------- + 1.12.8 (2017-11-06) ------------------- diff --git a/tools/rosservice/CHANGELOG.rst b/tools/rosservice/CHANGELOG.rst index 1d37b7c698..2992058a04 100644 --- a/tools/rosservice/CHANGELOG.rst +++ b/tools/rosservice/CHANGELOG.rst @@ -2,6 +2,9 @@ Changelog for package rosservice ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Forthcoming +----------- + 1.12.8 (2017-11-06) ------------------- diff --git a/tools/rostest/CHANGELOG.rst b/tools/rostest/CHANGELOG.rst index 3aed3c22cc..882b0a4986 100644 --- a/tools/rostest/CHANGELOG.rst +++ b/tools/rostest/CHANGELOG.rst @@ -2,6 +2,9 @@ Changelog for package rostest ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Forthcoming +----------- + 1.12.8 (2017-11-06) ------------------- * check clock publication neatly in publishtest (`#973 `_) diff --git a/tools/rostopic/CHANGELOG.rst b/tools/rostopic/CHANGELOG.rst index 50e8897544..087212a354 100644 --- a/tools/rostopic/CHANGELOG.rst +++ b/tools/rostopic/CHANGELOG.rst @@ -2,6 +2,9 @@ Changelog for package rostopic ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Forthcoming +----------- + 1.12.8 (2017-11-06) ------------------- * fix rostopic hz and bw in Python 3 (`#1126 `_) diff --git a/tools/topic_tools/CHANGELOG.rst b/tools/topic_tools/CHANGELOG.rst index 6a96d1c901..1efc33762d 100644 --- a/tools/topic_tools/CHANGELOG.rst +++ b/tools/topic_tools/CHANGELOG.rst @@ -2,6 +2,9 @@ Changelog for package topic_tools ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Forthcoming +----------- + 1.12.8 (2017-11-06) ------------------- * make demux more agile (`#1196 `_) diff --git a/utilities/message_filters/CHANGELOG.rst b/utilities/message_filters/CHANGELOG.rst index 72dec4af61..e07d7df07e 100644 --- a/utilities/message_filters/CHANGELOG.rst +++ b/utilities/message_filters/CHANGELOG.rst @@ -2,6 +2,9 @@ Changelog for package message_filters ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Forthcoming +----------- + 1.12.8 (2017-11-06) ------------------- diff --git a/utilities/roslz4/CHANGELOG.rst b/utilities/roslz4/CHANGELOG.rst index 9bb8c30a0f..73a4d58e9d 100644 --- a/utilities/roslz4/CHANGELOG.rst +++ b/utilities/roslz4/CHANGELOG.rst @@ -2,6 +2,9 @@ Changelog for package roslz4 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Forthcoming +----------- + 1.12.8 (2017-11-06) ------------------- * replace deprecated lz4 function call (`#1136 `_) diff --git a/utilities/roswtf/CHANGELOG.rst b/utilities/roswtf/CHANGELOG.rst index e016b4d223..3df4769019 100644 --- a/utilities/roswtf/CHANGELOG.rst +++ b/utilities/roswtf/CHANGELOG.rst @@ -2,6 +2,9 @@ Changelog for package roswtf ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Forthcoming +----------- + 1.12.8 (2017-11-06) ------------------- * improve roswtf tests (`#1102 `_) diff --git a/utilities/xmlrpcpp/CHANGELOG.rst b/utilities/xmlrpcpp/CHANGELOG.rst index 1576dc934c..8824423052 100644 --- a/utilities/xmlrpcpp/CHANGELOG.rst +++ b/utilities/xmlrpcpp/CHANGELOG.rst @@ -2,6 +2,9 @@ Changelog for package xmlrpcpp ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Forthcoming +----------- + 1.12.8 (2017-11-06) ------------------- * use poll() in favor of select() in the XmlRPCDispatcher (`#833 `_) From 031279ff837488e27a3a08346b6c16330628fcaf Mon Sep 17 00:00:00 2001 From: Dirk Thomas Date: Mon, 6 Nov 2017 11:31:51 -0800 Subject: [PATCH 62/72] 1.12.9 --- clients/roscpp/CHANGELOG.rst | 4 ++-- clients/roscpp/package.xml | 2 +- clients/rospy/CHANGELOG.rst | 4 ++-- clients/rospy/package.xml | 2 +- ros_comm/CHANGELOG.rst | 4 ++-- ros_comm/package.xml | 2 +- test/test_rosbag/package.xml | 2 +- test/test_rosbag_storage/package.xml | 2 +- test/test_roscpp/package.xml | 2 +- test/test_rosgraph/package.xml | 2 +- test/test_roslaunch/package.xml | 2 +- test/test_roslib_comm/package.xml | 2 +- test/test_rosmaster/package.xml | 2 +- test/test_rosparam/package.xml | 2 +- test/test_rospy/package.xml | 2 +- test/test_rosservice/package.xml | 2 +- test/test_rostopic/package.xml | 2 +- tools/rosbag/CHANGELOG.rst | 4 ++-- tools/rosbag/package.xml | 2 +- tools/rosbag_storage/CHANGELOG.rst | 4 ++-- tools/rosbag_storage/package.xml | 2 +- tools/rosconsole/CHANGELOG.rst | 4 ++-- tools/rosconsole/package.xml | 2 +- tools/rosgraph/CHANGELOG.rst | 4 ++-- tools/rosgraph/package.xml | 2 +- tools/roslaunch/CHANGELOG.rst | 4 ++-- tools/roslaunch/package.xml | 2 +- tools/rosmaster/CHANGELOG.rst | 4 ++-- tools/rosmaster/package.xml | 2 +- tools/rosmsg/CHANGELOG.rst | 4 ++-- tools/rosmsg/package.xml | 2 +- tools/rosnode/CHANGELOG.rst | 4 ++-- tools/rosnode/package.xml | 2 +- tools/rosout/CHANGELOG.rst | 4 ++-- tools/rosout/package.xml | 2 +- tools/rosparam/CHANGELOG.rst | 4 ++-- tools/rosparam/package.xml | 2 +- tools/rosservice/CHANGELOG.rst | 4 ++-- tools/rosservice/package.xml | 2 +- tools/rostest/CHANGELOG.rst | 4 ++-- tools/rostest/package.xml | 2 +- tools/rostopic/CHANGELOG.rst | 4 ++-- tools/rostopic/package.xml | 2 +- tools/topic_tools/CHANGELOG.rst | 4 ++-- tools/topic_tools/package.xml | 2 +- utilities/message_filters/CHANGELOG.rst | 4 ++-- utilities/message_filters/package.xml | 2 +- utilities/roslz4/CHANGELOG.rst | 4 ++-- utilities/roslz4/package.xml | 2 +- utilities/roswtf/CHANGELOG.rst | 4 ++-- utilities/roswtf/package.xml | 2 +- utilities/xmlrpcpp/CHANGELOG.rst | 4 ++-- utilities/xmlrpcpp/package.xml | 2 +- 53 files changed, 74 insertions(+), 74 deletions(-) diff --git a/clients/roscpp/CHANGELOG.rst b/clients/roscpp/CHANGELOG.rst index d90d58ae23..8bedb584b7 100644 --- a/clients/roscpp/CHANGELOG.rst +++ b/clients/roscpp/CHANGELOG.rst @@ -2,8 +2,8 @@ Changelog for package roscpp ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -Forthcoming ------------ +1.12.9 (2017-11-06) +------------------- 1.12.8 (2017-11-06) ------------------- diff --git a/clients/roscpp/package.xml b/clients/roscpp/package.xml index 9d57e54526..2b2b2f6049 100644 --- a/clients/roscpp/package.xml +++ b/clients/roscpp/package.xml @@ -1,6 +1,6 @@ roscpp - 1.12.8 + 1.12.9 roscpp is a C++ implementation of ROS. It provides a client diff --git a/clients/rospy/CHANGELOG.rst b/clients/rospy/CHANGELOG.rst index d70bba89fa..e00d919f00 100644 --- a/clients/rospy/CHANGELOG.rst +++ b/clients/rospy/CHANGELOG.rst @@ -2,8 +2,8 @@ Changelog for package rospy ^^^^^^^^^^^^^^^^^^^^^^^^^^^ -Forthcoming ------------ +1.12.9 (2017-11-06) +------------------- 1.12.8 (2017-11-06) ------------------- diff --git a/clients/rospy/package.xml b/clients/rospy/package.xml index 5bf62a1837..1282bf0966 100644 --- a/clients/rospy/package.xml +++ b/clients/rospy/package.xml @@ -1,6 +1,6 @@ rospy - 1.12.8 + 1.12.9 rospy is a pure Python client library for ROS. The rospy client API enables Python programmers to quickly interface with ROS ros_comm - 1.12.8 + 1.12.9 ROS communications-related packages, including core client libraries (roscpp, rospy) and graph introspection tools (rostopic, rosnode, rosservice, rosparam). diff --git a/test/test_rosbag/package.xml b/test/test_rosbag/package.xml index 993f8c759c..87050a203f 100644 --- a/test/test_rosbag/package.xml +++ b/test/test_rosbag/package.xml @@ -1,6 +1,6 @@ test_rosbag - 1.12.8 + 1.12.9 A package containing the unit tests for rosbag. diff --git a/test/test_rosbag_storage/package.xml b/test/test_rosbag_storage/package.xml index d81ec9052b..d70a8d92e3 100644 --- a/test/test_rosbag_storage/package.xml +++ b/test/test_rosbag_storage/package.xml @@ -1,6 +1,6 @@ test_rosbag_storage - 1.12.8 + 1.12.9 A package containing the unit tests for rosbag_storage. diff --git a/test/test_roscpp/package.xml b/test/test_roscpp/package.xml index ff531450ba..6b0bac9c5e 100644 --- a/test/test_roscpp/package.xml +++ b/test/test_roscpp/package.xml @@ -1,6 +1,6 @@ test_roscpp - 1.12.8 + 1.12.9 Tests for roscpp which depend on rostest. diff --git a/test/test_rosgraph/package.xml b/test/test_rosgraph/package.xml index 4f16f9876c..ee34378f9a 100644 --- a/test/test_rosgraph/package.xml +++ b/test/test_rosgraph/package.xml @@ -1,6 +1,6 @@ test_rosgraph - 1.12.8 + 1.12.9 Tests for rosgraph which depend on rostest. diff --git a/test/test_roslaunch/package.xml b/test/test_roslaunch/package.xml index cf496bb488..ad7be1c47e 100644 --- a/test/test_roslaunch/package.xml +++ b/test/test_roslaunch/package.xml @@ -1,6 +1,6 @@ test_roslaunch - 1.12.8 + 1.12.9 Tests for roslaunch which depend on rostest. diff --git a/test/test_roslib_comm/package.xml b/test/test_roslib_comm/package.xml index 3c6ae37411..3f28be367f 100644 --- a/test/test_roslib_comm/package.xml +++ b/test/test_roslib_comm/package.xml @@ -1,6 +1,6 @@ test_roslib_comm - 1.12.8 + 1.12.9 Unit tests verifying that roslib is operating as expected. diff --git a/test/test_rosmaster/package.xml b/test/test_rosmaster/package.xml index f7f1b1c6d3..5112a976ac 100644 --- a/test/test_rosmaster/package.xml +++ b/test/test_rosmaster/package.xml @@ -1,6 +1,6 @@ test_rosmaster - 1.12.8 + 1.12.9 Tests for rosmaster which depend on rostest. diff --git a/test/test_rosparam/package.xml b/test/test_rosparam/package.xml index 9a0e9def8d..2422d558ad 100644 --- a/test/test_rosparam/package.xml +++ b/test/test_rosparam/package.xml @@ -1,6 +1,6 @@ test_rosparam - 1.12.8 + 1.12.9 A package containing the unit tests for rosparam. diff --git a/test/test_rospy/package.xml b/test/test_rospy/package.xml index 1d94df6ebb..37c37ef913 100644 --- a/test/test_rospy/package.xml +++ b/test/test_rospy/package.xml @@ -1,6 +1,6 @@ test_rospy - 1.12.8 + 1.12.9 rospy unit and integration test framework. diff --git a/test/test_rosservice/package.xml b/test/test_rosservice/package.xml index 9503d95c34..30b87f5274 100644 --- a/test/test_rosservice/package.xml +++ b/test/test_rosservice/package.xml @@ -1,6 +1,6 @@ test_rosservice - 1.12.8 + 1.12.9 Tests for the rosservice tool. diff --git a/test/test_rostopic/package.xml b/test/test_rostopic/package.xml index 03ec862dc5..f5b0658f54 100644 --- a/test/test_rostopic/package.xml +++ b/test/test_rostopic/package.xml @@ -1,6 +1,6 @@ test_rostopic - 1.12.8 + 1.12.9 Tests for rostopic. diff --git a/tools/rosbag/CHANGELOG.rst b/tools/rosbag/CHANGELOG.rst index 74f7f6d6bf..671e93b424 100644 --- a/tools/rosbag/CHANGELOG.rst +++ b/tools/rosbag/CHANGELOG.rst @@ -2,8 +2,8 @@ Changelog for package rosbag ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -Forthcoming ------------ +1.12.9 (2017-11-06) +------------------- 1.12.8 (2017-11-06) ------------------- diff --git a/tools/rosbag/package.xml b/tools/rosbag/package.xml index ec5fd27341..9c9f11abb9 100644 --- a/tools/rosbag/package.xml +++ b/tools/rosbag/package.xml @@ -1,6 +1,6 @@ rosbag - 1.12.8 + 1.12.9 This is a set of tools for recording from and playing back to ROS topics. It is intended to be high performance and avoids diff --git a/tools/rosbag_storage/CHANGELOG.rst b/tools/rosbag_storage/CHANGELOG.rst index a18677a07f..ee769b46f8 100644 --- a/tools/rosbag_storage/CHANGELOG.rst +++ b/tools/rosbag_storage/CHANGELOG.rst @@ -2,8 +2,8 @@ Changelog for package rosbag_storage ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -Forthcoming ------------ +1.12.9 (2017-11-06) +------------------- * fix compatibility with libconsole-bridge in Jessie (`#1219 `_, regression from 1.12.8) 1.12.8 (2017-11-06) diff --git a/tools/rosbag_storage/package.xml b/tools/rosbag_storage/package.xml index e0d4e9fa8b..bacf05eee0 100644 --- a/tools/rosbag_storage/package.xml +++ b/tools/rosbag_storage/package.xml @@ -1,6 +1,6 @@ rosbag_storage - 1.12.8 + 1.12.9 This is a set of tools for recording from and playing back ROS message without relying on the ROS client library. diff --git a/tools/rosconsole/CHANGELOG.rst b/tools/rosconsole/CHANGELOG.rst index 23cda0d011..92d3594dc1 100644 --- a/tools/rosconsole/CHANGELOG.rst +++ b/tools/rosconsole/CHANGELOG.rst @@ -2,8 +2,8 @@ Changelog for package rosconsole ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -Forthcoming ------------ +1.12.9 (2017-11-06) +------------------- 1.12.8 (2017-11-06) ------------------- diff --git a/tools/rosconsole/package.xml b/tools/rosconsole/package.xml index 16cba187ca..62f91d8dc2 100644 --- a/tools/rosconsole/package.xml +++ b/tools/rosconsole/package.xml @@ -1,6 +1,6 @@ rosconsole - 1.12.8 + 1.12.9 ROS console output library. Dirk Thomas BSD diff --git a/tools/rosgraph/CHANGELOG.rst b/tools/rosgraph/CHANGELOG.rst index d184916cfe..de2a2b7193 100644 --- a/tools/rosgraph/CHANGELOG.rst +++ b/tools/rosgraph/CHANGELOG.rst @@ -2,8 +2,8 @@ Changelog for package rosgraph ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -Forthcoming ------------ +1.12.9 (2017-11-06) +------------------- 1.12.8 (2017-11-06) ------------------- diff --git a/tools/rosgraph/package.xml b/tools/rosgraph/package.xml index 54ddd1a0ae..8de3def648 100644 --- a/tools/rosgraph/package.xml +++ b/tools/rosgraph/package.xml @@ -1,6 +1,6 @@ rosgraph - 1.12.8 + 1.12.9 rosgraph contains the rosgraph command-line tool, which prints information about the ROS Computation Graph. It also provides an diff --git a/tools/roslaunch/CHANGELOG.rst b/tools/roslaunch/CHANGELOG.rst index aff87c8459..45806e2314 100644 --- a/tools/roslaunch/CHANGELOG.rst +++ b/tools/roslaunch/CHANGELOG.rst @@ -2,8 +2,8 @@ Changelog for package roslaunch ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -Forthcoming ------------ +1.12.9 (2017-11-06) +------------------- 1.12.8 (2017-11-06) ------------------- diff --git a/tools/roslaunch/package.xml b/tools/roslaunch/package.xml index 686b978247..f05cf10132 100644 --- a/tools/roslaunch/package.xml +++ b/tools/roslaunch/package.xml @@ -1,6 +1,6 @@ roslaunch - 1.12.8 + 1.12.9 roslaunch is a tool for easily launching multiple ROS nodes locally and remotely diff --git a/tools/rosmaster/CHANGELOG.rst b/tools/rosmaster/CHANGELOG.rst index ce922748de..79d84c4798 100644 --- a/tools/rosmaster/CHANGELOG.rst +++ b/tools/rosmaster/CHANGELOG.rst @@ -2,8 +2,8 @@ Changelog for package rosmaster ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -Forthcoming ------------ +1.12.9 (2017-11-06) +------------------- 1.12.8 (2017-11-06) ------------------- diff --git a/tools/rosmaster/package.xml b/tools/rosmaster/package.xml index f13d3c14d0..c25269d268 100644 --- a/tools/rosmaster/package.xml +++ b/tools/rosmaster/package.xml @@ -1,6 +1,6 @@ rosmaster - 1.12.8 + 1.12.9 ROS Master implementation. diff --git a/tools/rosmsg/CHANGELOG.rst b/tools/rosmsg/CHANGELOG.rst index b507880d8f..d91bce205d 100644 --- a/tools/rosmsg/CHANGELOG.rst +++ b/tools/rosmsg/CHANGELOG.rst @@ -2,8 +2,8 @@ Changelog for package rosmsg ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -Forthcoming ------------ +1.12.9 (2017-11-06) +------------------- 1.12.8 (2017-11-06) ------------------- diff --git a/tools/rosmsg/package.xml b/tools/rosmsg/package.xml index e875c39464..f083bbed61 100644 --- a/tools/rosmsg/package.xml +++ b/tools/rosmsg/package.xml @@ -1,6 +1,6 @@ rosmsg - 1.12.8 + 1.12.9 rosmsg contains two command-line tools: rosmsg and rossrv. rosmsg is a command-line tool for diff --git a/tools/rosnode/CHANGELOG.rst b/tools/rosnode/CHANGELOG.rst index fb8b6f9ad3..06bfd879ff 100644 --- a/tools/rosnode/CHANGELOG.rst +++ b/tools/rosnode/CHANGELOG.rst @@ -2,8 +2,8 @@ Changelog for package rosnode ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -Forthcoming ------------ +1.12.9 (2017-11-06) +------------------- 1.12.8 (2017-11-06) ------------------- diff --git a/tools/rosnode/package.xml b/tools/rosnode/package.xml index 1c00c73a1d..29065389ef 100644 --- a/tools/rosnode/package.xml +++ b/tools/rosnode/package.xml @@ -1,6 +1,6 @@ rosnode - 1.12.8 + 1.12.9 rosnode is a command-line tool for displaying debug information about ROS Nodes, diff --git a/tools/rosout/CHANGELOG.rst b/tools/rosout/CHANGELOG.rst index 2f01000a40..258a6a23f6 100644 --- a/tools/rosout/CHANGELOG.rst +++ b/tools/rosout/CHANGELOG.rst @@ -2,8 +2,8 @@ Changelog for package rosout ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -Forthcoming ------------ +1.12.9 (2017-11-06) +------------------- 1.12.8 (2017-11-06) ------------------- diff --git a/tools/rosout/package.xml b/tools/rosout/package.xml index 32a93558e3..2f8a6bcafe 100644 --- a/tools/rosout/package.xml +++ b/tools/rosout/package.xml @@ -1,6 +1,6 @@ rosout - 1.12.8 + 1.12.9 System-wide logging mechanism for messages sent to the /rosout topic. diff --git a/tools/rosparam/CHANGELOG.rst b/tools/rosparam/CHANGELOG.rst index fdc4ab1487..b0b96da5aa 100644 --- a/tools/rosparam/CHANGELOG.rst +++ b/tools/rosparam/CHANGELOG.rst @@ -2,8 +2,8 @@ Changelog for package rosparam ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -Forthcoming ------------ +1.12.9 (2017-11-06) +------------------- 1.12.8 (2017-11-06) ------------------- diff --git a/tools/rosparam/package.xml b/tools/rosparam/package.xml index 0789b39343..02b4114208 100644 --- a/tools/rosparam/package.xml +++ b/tools/rosparam/package.xml @@ -1,6 +1,6 @@ rosparam - 1.12.8 + 1.12.9 rosparam contains the rosparam command-line tool for getting and setting ROS Parameters on the rosservice - 1.12.8 + 1.12.9 rosservice contains the rosservice command-line tool for listing and querying ROS rostest - 1.12.8 + 1.12.9 Integration test suite based on roslaunch that is compatible with xUnit frameworks. diff --git a/tools/rostopic/CHANGELOG.rst b/tools/rostopic/CHANGELOG.rst index 087212a354..bc76d730cc 100644 --- a/tools/rostopic/CHANGELOG.rst +++ b/tools/rostopic/CHANGELOG.rst @@ -2,8 +2,8 @@ Changelog for package rostopic ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -Forthcoming ------------ +1.12.9 (2017-11-06) +------------------- 1.12.8 (2017-11-06) ------------------- diff --git a/tools/rostopic/package.xml b/tools/rostopic/package.xml index 860adec881..f4d84c8467 100644 --- a/tools/rostopic/package.xml +++ b/tools/rostopic/package.xml @@ -1,6 +1,6 @@ rostopic - 1.12.8 + 1.12.9 rostopic contains the rostopic command-line tool for displaying debug information about diff --git a/tools/topic_tools/CHANGELOG.rst b/tools/topic_tools/CHANGELOG.rst index 1efc33762d..51cc53d57f 100644 --- a/tools/topic_tools/CHANGELOG.rst +++ b/tools/topic_tools/CHANGELOG.rst @@ -2,8 +2,8 @@ Changelog for package topic_tools ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -Forthcoming ------------ +1.12.9 (2017-11-06) +------------------- 1.12.8 (2017-11-06) ------------------- diff --git a/tools/topic_tools/package.xml b/tools/topic_tools/package.xml index bbd8bbc965..85f643387a 100644 --- a/tools/topic_tools/package.xml +++ b/tools/topic_tools/package.xml @@ -1,6 +1,6 @@ topic_tools - 1.12.8 + 1.12.9 Tools for directing, throttling, selecting, and otherwise messing with ROS topics at a meta level. None of the programs in this package actually diff --git a/utilities/message_filters/CHANGELOG.rst b/utilities/message_filters/CHANGELOG.rst index e07d7df07e..513cdbb0fe 100644 --- a/utilities/message_filters/CHANGELOG.rst +++ b/utilities/message_filters/CHANGELOG.rst @@ -2,8 +2,8 @@ Changelog for package message_filters ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -Forthcoming ------------ +1.12.9 (2017-11-06) +------------------- 1.12.8 (2017-11-06) ------------------- diff --git a/utilities/message_filters/package.xml b/utilities/message_filters/package.xml index 7e0d84f341..020c65bd25 100644 --- a/utilities/message_filters/package.xml +++ b/utilities/message_filters/package.xml @@ -1,6 +1,6 @@ message_filters - 1.12.8 + 1.12.9 A set of message filters which take in messages and may output those messages at a later time, based on the conditions that filter needs met. diff --git a/utilities/roslz4/CHANGELOG.rst b/utilities/roslz4/CHANGELOG.rst index 73a4d58e9d..ad6dbf7fd9 100644 --- a/utilities/roslz4/CHANGELOG.rst +++ b/utilities/roslz4/CHANGELOG.rst @@ -2,8 +2,8 @@ Changelog for package roslz4 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -Forthcoming ------------ +1.12.9 (2017-11-06) +------------------- 1.12.8 (2017-11-06) ------------------- diff --git a/utilities/roslz4/package.xml b/utilities/roslz4/package.xml index b5cec18662..a84c12670a 100644 --- a/utilities/roslz4/package.xml +++ b/utilities/roslz4/package.xml @@ -1,7 +1,7 @@ roslz4 - 1.12.8 + 1.12.9 A Python and C++ implementation of the LZ4 streaming format. Large data streams are split into blocks which are compressed using the very fast LZ4 diff --git a/utilities/roswtf/CHANGELOG.rst b/utilities/roswtf/CHANGELOG.rst index 3df4769019..82e48efe24 100644 --- a/utilities/roswtf/CHANGELOG.rst +++ b/utilities/roswtf/CHANGELOG.rst @@ -2,8 +2,8 @@ Changelog for package roswtf ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -Forthcoming ------------ +1.12.9 (2017-11-06) +------------------- 1.12.8 (2017-11-06) ------------------- diff --git a/utilities/roswtf/package.xml b/utilities/roswtf/package.xml index 8b6db7b7c2..070c68c85b 100644 --- a/utilities/roswtf/package.xml +++ b/utilities/roswtf/package.xml @@ -1,6 +1,6 @@ roswtf - 1.12.8 + 1.12.9 roswtf is a tool for diagnosing issues with a running ROS system. Think of it as a FAQ implemented in code. diff --git a/utilities/xmlrpcpp/CHANGELOG.rst b/utilities/xmlrpcpp/CHANGELOG.rst index 8824423052..5d51ead466 100644 --- a/utilities/xmlrpcpp/CHANGELOG.rst +++ b/utilities/xmlrpcpp/CHANGELOG.rst @@ -2,8 +2,8 @@ Changelog for package xmlrpcpp ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -Forthcoming ------------ +1.12.9 (2017-11-06) +------------------- 1.12.8 (2017-11-06) ------------------- diff --git a/utilities/xmlrpcpp/package.xml b/utilities/xmlrpcpp/package.xml index b45cc461e6..2b84122c16 100644 --- a/utilities/xmlrpcpp/package.xml +++ b/utilities/xmlrpcpp/package.xml @@ -1,6 +1,6 @@ xmlrpcpp - 1.12.8 + 1.12.9 XmlRpc++ is a C++ implementation of the XML-RPC protocol. This version is heavily modified from the package available on SourceForge in order to From 3e3712ebf20a10cf9f841336902553a4b7d46980 Mon Sep 17 00:00:00 2001 From: Dirk Thomas Date: Mon, 6 Nov 2017 16:52:26 -0800 Subject: [PATCH 63/72] backward compatibility with libconsole-bridge in Jessie (take 2) --- tools/rosbag_storage/include/rosbag/bag.h | 18 ++++++++++++------ tools/rosbag_storage/src/bag.cpp | 6 ------ 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/tools/rosbag_storage/include/rosbag/bag.h b/tools/rosbag_storage/include/rosbag/bag.h index 4df626219c..37528d5167 100644 --- a/tools/rosbag_storage/include/rosbag/bag.h +++ b/tools/rosbag_storage/include/rosbag/bag.h @@ -62,7 +62,13 @@ #include "console_bridge/console.h" #if defined logDebug -# undef logDebug +# ifdef CONSOLE_BRIDGE_logDebug +# undef logDebug +# else +// Remove this when no longer supporting platforms with libconsole-bridge-dev < 0.3.0, +// in particular Debian Jessie: https://packages.debian.org/jessie/libconsole-bridge-dev +# define CONSOLE_BRIDGE_logDebug logDebug +# endif #endif #if defined logInform # undef logInform @@ -71,13 +77,13 @@ # undef logWarn #endif #if defined logError -# undef logError -#endif - +# ifdef CONSOLE_BRIDGE_logError +# undef logError +# else // Remove this when no longer supporting platforms with libconsole-bridge-dev < 0.3.0, // in particular Debian Jessie: https://packages.debian.org/jessie/libconsole-bridge-dev -#ifndef CONSOLE_BRIDGE_logDebug - #define CONSOLE_BRIDGE_logDebug logDebug +# define CONSOLE_BRIDGE_logError logError +# endif #endif namespace rosbag { diff --git a/tools/rosbag_storage/src/bag.cpp b/tools/rosbag_storage/src/bag.cpp index a55b3cc056..b030852cfe 100644 --- a/tools/rosbag_storage/src/bag.cpp +++ b/tools/rosbag_storage/src/bag.cpp @@ -43,12 +43,6 @@ #include "console_bridge/console.h" -// Remove this when no longer supporting platforms with libconsole-bridge-dev < 0.3.0, -// in particular Debian Jessie: https://packages.debian.org/jessie/libconsole-bridge-dev -#ifndef CONSOLE_BRIDGE_logError - #define CONSOLE_BRIDGE_logError logError -#endif - #define foreach BOOST_FOREACH using std::map; From 38cc8e7d101cfc7d845a2cce453d8b5d46121642 Mon Sep 17 00:00:00 2001 From: Dirk Thomas Date: Mon, 6 Nov 2017 16:52:57 -0800 Subject: [PATCH 64/72] update changelogs --- clients/roscpp/CHANGELOG.rst | 3 +++ clients/rospy/CHANGELOG.rst | 3 +++ ros_comm/CHANGELOG.rst | 3 +++ tools/rosbag/CHANGELOG.rst | 3 +++ tools/rosbag_storage/CHANGELOG.rst | 4 ++++ tools/rosconsole/CHANGELOG.rst | 3 +++ tools/rosgraph/CHANGELOG.rst | 3 +++ tools/roslaunch/CHANGELOG.rst | 3 +++ tools/rosmaster/CHANGELOG.rst | 3 +++ tools/rosmsg/CHANGELOG.rst | 3 +++ tools/rosnode/CHANGELOG.rst | 3 +++ tools/rosout/CHANGELOG.rst | 3 +++ tools/rosparam/CHANGELOG.rst | 3 +++ tools/rosservice/CHANGELOG.rst | 3 +++ tools/rostest/CHANGELOG.rst | 3 +++ tools/rostopic/CHANGELOG.rst | 3 +++ tools/topic_tools/CHANGELOG.rst | 3 +++ utilities/message_filters/CHANGELOG.rst | 3 +++ utilities/roslz4/CHANGELOG.rst | 3 +++ utilities/roswtf/CHANGELOG.rst | 3 +++ utilities/xmlrpcpp/CHANGELOG.rst | 3 +++ 21 files changed, 64 insertions(+) diff --git a/clients/roscpp/CHANGELOG.rst b/clients/roscpp/CHANGELOG.rst index 8bedb584b7..5b88d2b009 100644 --- a/clients/roscpp/CHANGELOG.rst +++ b/clients/roscpp/CHANGELOG.rst @@ -2,6 +2,9 @@ Changelog for package roscpp ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Forthcoming +----------- + 1.12.9 (2017-11-06) ------------------- diff --git a/clients/rospy/CHANGELOG.rst b/clients/rospy/CHANGELOG.rst index e00d919f00..69f972d5fd 100644 --- a/clients/rospy/CHANGELOG.rst +++ b/clients/rospy/CHANGELOG.rst @@ -2,6 +2,9 @@ Changelog for package rospy ^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Forthcoming +----------- + 1.12.9 (2017-11-06) ------------------- diff --git a/ros_comm/CHANGELOG.rst b/ros_comm/CHANGELOG.rst index dd5eabbaa3..d9bbb601a6 100644 --- a/ros_comm/CHANGELOG.rst +++ b/ros_comm/CHANGELOG.rst @@ -2,6 +2,9 @@ Changelog for package ros_comm ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Forthcoming +----------- + 1.12.9 (2017-11-06) ------------------- diff --git a/tools/rosbag/CHANGELOG.rst b/tools/rosbag/CHANGELOG.rst index 671e93b424..476b61bb74 100644 --- a/tools/rosbag/CHANGELOG.rst +++ b/tools/rosbag/CHANGELOG.rst @@ -2,6 +2,9 @@ Changelog for package rosbag ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Forthcoming +----------- + 1.12.9 (2017-11-06) ------------------- diff --git a/tools/rosbag_storage/CHANGELOG.rst b/tools/rosbag_storage/CHANGELOG.rst index ee769b46f8..2108ff1fc0 100644 --- a/tools/rosbag_storage/CHANGELOG.rst +++ b/tools/rosbag_storage/CHANGELOG.rst @@ -2,6 +2,10 @@ Changelog for package rosbag_storage ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Forthcoming +----------- +* fix compatibility with libconsole-bridge in Jessie, take 2 + 1.12.9 (2017-11-06) ------------------- * fix compatibility with libconsole-bridge in Jessie (`#1219 `_, regression from 1.12.8) diff --git a/tools/rosconsole/CHANGELOG.rst b/tools/rosconsole/CHANGELOG.rst index 92d3594dc1..4a4389b9c4 100644 --- a/tools/rosconsole/CHANGELOG.rst +++ b/tools/rosconsole/CHANGELOG.rst @@ -2,6 +2,9 @@ Changelog for package rosconsole ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Forthcoming +----------- + 1.12.9 (2017-11-06) ------------------- diff --git a/tools/rosgraph/CHANGELOG.rst b/tools/rosgraph/CHANGELOG.rst index de2a2b7193..1d9097fceb 100644 --- a/tools/rosgraph/CHANGELOG.rst +++ b/tools/rosgraph/CHANGELOG.rst @@ -2,6 +2,9 @@ Changelog for package rosgraph ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Forthcoming +----------- + 1.12.9 (2017-11-06) ------------------- diff --git a/tools/roslaunch/CHANGELOG.rst b/tools/roslaunch/CHANGELOG.rst index 45806e2314..46c2265783 100644 --- a/tools/roslaunch/CHANGELOG.rst +++ b/tools/roslaunch/CHANGELOG.rst @@ -2,6 +2,9 @@ Changelog for package roslaunch ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Forthcoming +----------- + 1.12.9 (2017-11-06) ------------------- diff --git a/tools/rosmaster/CHANGELOG.rst b/tools/rosmaster/CHANGELOG.rst index 79d84c4798..49bdf45446 100644 --- a/tools/rosmaster/CHANGELOG.rst +++ b/tools/rosmaster/CHANGELOG.rst @@ -2,6 +2,9 @@ Changelog for package rosmaster ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Forthcoming +----------- + 1.12.9 (2017-11-06) ------------------- diff --git a/tools/rosmsg/CHANGELOG.rst b/tools/rosmsg/CHANGELOG.rst index d91bce205d..0a2a72b51e 100644 --- a/tools/rosmsg/CHANGELOG.rst +++ b/tools/rosmsg/CHANGELOG.rst @@ -2,6 +2,9 @@ Changelog for package rosmsg ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Forthcoming +----------- + 1.12.9 (2017-11-06) ------------------- diff --git a/tools/rosnode/CHANGELOG.rst b/tools/rosnode/CHANGELOG.rst index 06bfd879ff..4b4d3972d4 100644 --- a/tools/rosnode/CHANGELOG.rst +++ b/tools/rosnode/CHANGELOG.rst @@ -2,6 +2,9 @@ Changelog for package rosnode ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Forthcoming +----------- + 1.12.9 (2017-11-06) ------------------- diff --git a/tools/rosout/CHANGELOG.rst b/tools/rosout/CHANGELOG.rst index 258a6a23f6..48372079ed 100644 --- a/tools/rosout/CHANGELOG.rst +++ b/tools/rosout/CHANGELOG.rst @@ -2,6 +2,9 @@ Changelog for package rosout ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Forthcoming +----------- + 1.12.9 (2017-11-06) ------------------- diff --git a/tools/rosparam/CHANGELOG.rst b/tools/rosparam/CHANGELOG.rst index b0b96da5aa..7c62f26e8b 100644 --- a/tools/rosparam/CHANGELOG.rst +++ b/tools/rosparam/CHANGELOG.rst @@ -2,6 +2,9 @@ Changelog for package rosparam ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Forthcoming +----------- + 1.12.9 (2017-11-06) ------------------- diff --git a/tools/rosservice/CHANGELOG.rst b/tools/rosservice/CHANGELOG.rst index ef21c7df75..ba5ccaa7ae 100644 --- a/tools/rosservice/CHANGELOG.rst +++ b/tools/rosservice/CHANGELOG.rst @@ -2,6 +2,9 @@ Changelog for package rosservice ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Forthcoming +----------- + 1.12.9 (2017-11-06) ------------------- diff --git a/tools/rostest/CHANGELOG.rst b/tools/rostest/CHANGELOG.rst index f80ce91bcd..fa27162b3f 100644 --- a/tools/rostest/CHANGELOG.rst +++ b/tools/rostest/CHANGELOG.rst @@ -2,6 +2,9 @@ Changelog for package rostest ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Forthcoming +----------- + 1.12.9 (2017-11-06) ------------------- diff --git a/tools/rostopic/CHANGELOG.rst b/tools/rostopic/CHANGELOG.rst index bc76d730cc..506fcb7297 100644 --- a/tools/rostopic/CHANGELOG.rst +++ b/tools/rostopic/CHANGELOG.rst @@ -2,6 +2,9 @@ Changelog for package rostopic ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Forthcoming +----------- + 1.12.9 (2017-11-06) ------------------- diff --git a/tools/topic_tools/CHANGELOG.rst b/tools/topic_tools/CHANGELOG.rst index 51cc53d57f..eb44474076 100644 --- a/tools/topic_tools/CHANGELOG.rst +++ b/tools/topic_tools/CHANGELOG.rst @@ -2,6 +2,9 @@ Changelog for package topic_tools ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Forthcoming +----------- + 1.12.9 (2017-11-06) ------------------- diff --git a/utilities/message_filters/CHANGELOG.rst b/utilities/message_filters/CHANGELOG.rst index 513cdbb0fe..9767884f29 100644 --- a/utilities/message_filters/CHANGELOG.rst +++ b/utilities/message_filters/CHANGELOG.rst @@ -2,6 +2,9 @@ Changelog for package message_filters ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Forthcoming +----------- + 1.12.9 (2017-11-06) ------------------- diff --git a/utilities/roslz4/CHANGELOG.rst b/utilities/roslz4/CHANGELOG.rst index ad6dbf7fd9..2ae0b7c680 100644 --- a/utilities/roslz4/CHANGELOG.rst +++ b/utilities/roslz4/CHANGELOG.rst @@ -2,6 +2,9 @@ Changelog for package roslz4 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Forthcoming +----------- + 1.12.9 (2017-11-06) ------------------- diff --git a/utilities/roswtf/CHANGELOG.rst b/utilities/roswtf/CHANGELOG.rst index 82e48efe24..cdcce6d877 100644 --- a/utilities/roswtf/CHANGELOG.rst +++ b/utilities/roswtf/CHANGELOG.rst @@ -2,6 +2,9 @@ Changelog for package roswtf ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Forthcoming +----------- + 1.12.9 (2017-11-06) ------------------- diff --git a/utilities/xmlrpcpp/CHANGELOG.rst b/utilities/xmlrpcpp/CHANGELOG.rst index 5d51ead466..e685747cb3 100644 --- a/utilities/xmlrpcpp/CHANGELOG.rst +++ b/utilities/xmlrpcpp/CHANGELOG.rst @@ -2,6 +2,9 @@ Changelog for package xmlrpcpp ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Forthcoming +----------- + 1.12.9 (2017-11-06) ------------------- From 4b0232cb7e4e8f30775b2dd1bb209c6b871f0f8c Mon Sep 17 00:00:00 2001 From: Dirk Thomas Date: Mon, 6 Nov 2017 16:53:16 -0800 Subject: [PATCH 65/72] 1.12.10 --- clients/roscpp/CHANGELOG.rst | 4 ++-- clients/roscpp/package.xml | 2 +- clients/rospy/CHANGELOG.rst | 4 ++-- clients/rospy/package.xml | 2 +- ros_comm/CHANGELOG.rst | 4 ++-- ros_comm/package.xml | 2 +- test/test_rosbag/package.xml | 2 +- test/test_rosbag_storage/package.xml | 2 +- test/test_roscpp/package.xml | 2 +- test/test_rosgraph/package.xml | 2 +- test/test_roslaunch/package.xml | 2 +- test/test_roslib_comm/package.xml | 2 +- test/test_rosmaster/package.xml | 2 +- test/test_rosparam/package.xml | 2 +- test/test_rospy/package.xml | 2 +- test/test_rosservice/package.xml | 2 +- test/test_rostopic/package.xml | 2 +- tools/rosbag/CHANGELOG.rst | 4 ++-- tools/rosbag/package.xml | 2 +- tools/rosbag_storage/CHANGELOG.rst | 4 ++-- tools/rosbag_storage/package.xml | 2 +- tools/rosconsole/CHANGELOG.rst | 4 ++-- tools/rosconsole/package.xml | 2 +- tools/rosgraph/CHANGELOG.rst | 4 ++-- tools/rosgraph/package.xml | 2 +- tools/roslaunch/CHANGELOG.rst | 4 ++-- tools/roslaunch/package.xml | 2 +- tools/rosmaster/CHANGELOG.rst | 4 ++-- tools/rosmaster/package.xml | 2 +- tools/rosmsg/CHANGELOG.rst | 4 ++-- tools/rosmsg/package.xml | 2 +- tools/rosnode/CHANGELOG.rst | 4 ++-- tools/rosnode/package.xml | 2 +- tools/rosout/CHANGELOG.rst | 4 ++-- tools/rosout/package.xml | 2 +- tools/rosparam/CHANGELOG.rst | 4 ++-- tools/rosparam/package.xml | 2 +- tools/rosservice/CHANGELOG.rst | 4 ++-- tools/rosservice/package.xml | 2 +- tools/rostest/CHANGELOG.rst | 4 ++-- tools/rostest/package.xml | 2 +- tools/rostopic/CHANGELOG.rst | 4 ++-- tools/rostopic/package.xml | 2 +- tools/topic_tools/CHANGELOG.rst | 4 ++-- tools/topic_tools/package.xml | 2 +- utilities/message_filters/CHANGELOG.rst | 4 ++-- utilities/message_filters/package.xml | 2 +- utilities/roslz4/CHANGELOG.rst | 4 ++-- utilities/roslz4/package.xml | 2 +- utilities/roswtf/CHANGELOG.rst | 4 ++-- utilities/roswtf/package.xml | 2 +- utilities/xmlrpcpp/CHANGELOG.rst | 4 ++-- utilities/xmlrpcpp/package.xml | 2 +- 53 files changed, 74 insertions(+), 74 deletions(-) diff --git a/clients/roscpp/CHANGELOG.rst b/clients/roscpp/CHANGELOG.rst index 5b88d2b009..32558b0df5 100644 --- a/clients/roscpp/CHANGELOG.rst +++ b/clients/roscpp/CHANGELOG.rst @@ -2,8 +2,8 @@ Changelog for package roscpp ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -Forthcoming ------------ +1.12.10 (2017-11-06) +-------------------- 1.12.9 (2017-11-06) ------------------- diff --git a/clients/roscpp/package.xml b/clients/roscpp/package.xml index 2b2b2f6049..3566b84924 100644 --- a/clients/roscpp/package.xml +++ b/clients/roscpp/package.xml @@ -1,6 +1,6 @@ roscpp - 1.12.9 + 1.12.10 roscpp is a C++ implementation of ROS. It provides a client diff --git a/clients/rospy/CHANGELOG.rst b/clients/rospy/CHANGELOG.rst index 69f972d5fd..ef2a32c38a 100644 --- a/clients/rospy/CHANGELOG.rst +++ b/clients/rospy/CHANGELOG.rst @@ -2,8 +2,8 @@ Changelog for package rospy ^^^^^^^^^^^^^^^^^^^^^^^^^^^ -Forthcoming ------------ +1.12.10 (2017-11-06) +-------------------- 1.12.9 (2017-11-06) ------------------- diff --git a/clients/rospy/package.xml b/clients/rospy/package.xml index 1282bf0966..655f42b485 100644 --- a/clients/rospy/package.xml +++ b/clients/rospy/package.xml @@ -1,6 +1,6 @@ rospy - 1.12.9 + 1.12.10 rospy is a pure Python client library for ROS. The rospy client API enables Python programmers to quickly interface with ROS ros_comm - 1.12.9 + 1.12.10 ROS communications-related packages, including core client libraries (roscpp, rospy) and graph introspection tools (rostopic, rosnode, rosservice, rosparam). diff --git a/test/test_rosbag/package.xml b/test/test_rosbag/package.xml index 87050a203f..e163f8e7dd 100644 --- a/test/test_rosbag/package.xml +++ b/test/test_rosbag/package.xml @@ -1,6 +1,6 @@ test_rosbag - 1.12.9 + 1.12.10 A package containing the unit tests for rosbag. diff --git a/test/test_rosbag_storage/package.xml b/test/test_rosbag_storage/package.xml index d70a8d92e3..70f51d75a0 100644 --- a/test/test_rosbag_storage/package.xml +++ b/test/test_rosbag_storage/package.xml @@ -1,6 +1,6 @@ test_rosbag_storage - 1.12.9 + 1.12.10 A package containing the unit tests for rosbag_storage. diff --git a/test/test_roscpp/package.xml b/test/test_roscpp/package.xml index 6b0bac9c5e..f8420b5e3e 100644 --- a/test/test_roscpp/package.xml +++ b/test/test_roscpp/package.xml @@ -1,6 +1,6 @@ test_roscpp - 1.12.9 + 1.12.10 Tests for roscpp which depend on rostest. diff --git a/test/test_rosgraph/package.xml b/test/test_rosgraph/package.xml index ee34378f9a..b545bd0fc8 100644 --- a/test/test_rosgraph/package.xml +++ b/test/test_rosgraph/package.xml @@ -1,6 +1,6 @@ test_rosgraph - 1.12.9 + 1.12.10 Tests for rosgraph which depend on rostest. diff --git a/test/test_roslaunch/package.xml b/test/test_roslaunch/package.xml index ad7be1c47e..4d0cc9a3a2 100644 --- a/test/test_roslaunch/package.xml +++ b/test/test_roslaunch/package.xml @@ -1,6 +1,6 @@ test_roslaunch - 1.12.9 + 1.12.10 Tests for roslaunch which depend on rostest. diff --git a/test/test_roslib_comm/package.xml b/test/test_roslib_comm/package.xml index 3f28be367f..cbde5b49b4 100644 --- a/test/test_roslib_comm/package.xml +++ b/test/test_roslib_comm/package.xml @@ -1,6 +1,6 @@ test_roslib_comm - 1.12.9 + 1.12.10 Unit tests verifying that roslib is operating as expected. diff --git a/test/test_rosmaster/package.xml b/test/test_rosmaster/package.xml index 5112a976ac..a69f329e3c 100644 --- a/test/test_rosmaster/package.xml +++ b/test/test_rosmaster/package.xml @@ -1,6 +1,6 @@ test_rosmaster - 1.12.9 + 1.12.10 Tests for rosmaster which depend on rostest. diff --git a/test/test_rosparam/package.xml b/test/test_rosparam/package.xml index 2422d558ad..c7bd5ee70f 100644 --- a/test/test_rosparam/package.xml +++ b/test/test_rosparam/package.xml @@ -1,6 +1,6 @@ test_rosparam - 1.12.9 + 1.12.10 A package containing the unit tests for rosparam. diff --git a/test/test_rospy/package.xml b/test/test_rospy/package.xml index 37c37ef913..d23ccbe775 100644 --- a/test/test_rospy/package.xml +++ b/test/test_rospy/package.xml @@ -1,6 +1,6 @@ test_rospy - 1.12.9 + 1.12.10 rospy unit and integration test framework. diff --git a/test/test_rosservice/package.xml b/test/test_rosservice/package.xml index 30b87f5274..9733c9fd76 100644 --- a/test/test_rosservice/package.xml +++ b/test/test_rosservice/package.xml @@ -1,6 +1,6 @@ test_rosservice - 1.12.9 + 1.12.10 Tests for the rosservice tool. diff --git a/test/test_rostopic/package.xml b/test/test_rostopic/package.xml index f5b0658f54..6e60e4a057 100644 --- a/test/test_rostopic/package.xml +++ b/test/test_rostopic/package.xml @@ -1,6 +1,6 @@ test_rostopic - 1.12.9 + 1.12.10 Tests for rostopic. diff --git a/tools/rosbag/CHANGELOG.rst b/tools/rosbag/CHANGELOG.rst index 476b61bb74..725fe5b0e9 100644 --- a/tools/rosbag/CHANGELOG.rst +++ b/tools/rosbag/CHANGELOG.rst @@ -2,8 +2,8 @@ Changelog for package rosbag ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -Forthcoming ------------ +1.12.10 (2017-11-06) +-------------------- 1.12.9 (2017-11-06) ------------------- diff --git a/tools/rosbag/package.xml b/tools/rosbag/package.xml index 9c9f11abb9..2fbe8e39db 100644 --- a/tools/rosbag/package.xml +++ b/tools/rosbag/package.xml @@ -1,6 +1,6 @@ rosbag - 1.12.9 + 1.12.10 This is a set of tools for recording from and playing back to ROS topics. It is intended to be high performance and avoids diff --git a/tools/rosbag_storage/CHANGELOG.rst b/tools/rosbag_storage/CHANGELOG.rst index 2108ff1fc0..4767a04150 100644 --- a/tools/rosbag_storage/CHANGELOG.rst +++ b/tools/rosbag_storage/CHANGELOG.rst @@ -2,8 +2,8 @@ Changelog for package rosbag_storage ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -Forthcoming ------------ +1.12.10 (2017-11-06) +-------------------- * fix compatibility with libconsole-bridge in Jessie, take 2 1.12.9 (2017-11-06) diff --git a/tools/rosbag_storage/package.xml b/tools/rosbag_storage/package.xml index bacf05eee0..d71479aa92 100644 --- a/tools/rosbag_storage/package.xml +++ b/tools/rosbag_storage/package.xml @@ -1,6 +1,6 @@ rosbag_storage - 1.12.9 + 1.12.10 This is a set of tools for recording from and playing back ROS message without relying on the ROS client library. diff --git a/tools/rosconsole/CHANGELOG.rst b/tools/rosconsole/CHANGELOG.rst index 4a4389b9c4..3c11878791 100644 --- a/tools/rosconsole/CHANGELOG.rst +++ b/tools/rosconsole/CHANGELOG.rst @@ -2,8 +2,8 @@ Changelog for package rosconsole ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -Forthcoming ------------ +1.12.10 (2017-11-06) +-------------------- 1.12.9 (2017-11-06) ------------------- diff --git a/tools/rosconsole/package.xml b/tools/rosconsole/package.xml index 62f91d8dc2..b3dfdca006 100644 --- a/tools/rosconsole/package.xml +++ b/tools/rosconsole/package.xml @@ -1,6 +1,6 @@ rosconsole - 1.12.9 + 1.12.10 ROS console output library. Dirk Thomas BSD diff --git a/tools/rosgraph/CHANGELOG.rst b/tools/rosgraph/CHANGELOG.rst index 1d9097fceb..371e470563 100644 --- a/tools/rosgraph/CHANGELOG.rst +++ b/tools/rosgraph/CHANGELOG.rst @@ -2,8 +2,8 @@ Changelog for package rosgraph ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -Forthcoming ------------ +1.12.10 (2017-11-06) +-------------------- 1.12.9 (2017-11-06) ------------------- diff --git a/tools/rosgraph/package.xml b/tools/rosgraph/package.xml index 8de3def648..04de586293 100644 --- a/tools/rosgraph/package.xml +++ b/tools/rosgraph/package.xml @@ -1,6 +1,6 @@ rosgraph - 1.12.9 + 1.12.10 rosgraph contains the rosgraph command-line tool, which prints information about the ROS Computation Graph. It also provides an diff --git a/tools/roslaunch/CHANGELOG.rst b/tools/roslaunch/CHANGELOG.rst index 46c2265783..8eb4d337ed 100644 --- a/tools/roslaunch/CHANGELOG.rst +++ b/tools/roslaunch/CHANGELOG.rst @@ -2,8 +2,8 @@ Changelog for package roslaunch ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -Forthcoming ------------ +1.12.10 (2017-11-06) +-------------------- 1.12.9 (2017-11-06) ------------------- diff --git a/tools/roslaunch/package.xml b/tools/roslaunch/package.xml index f05cf10132..bb99f4e308 100644 --- a/tools/roslaunch/package.xml +++ b/tools/roslaunch/package.xml @@ -1,6 +1,6 @@ roslaunch - 1.12.9 + 1.12.10 roslaunch is a tool for easily launching multiple ROS nodes locally and remotely diff --git a/tools/rosmaster/CHANGELOG.rst b/tools/rosmaster/CHANGELOG.rst index 49bdf45446..bd346fd488 100644 --- a/tools/rosmaster/CHANGELOG.rst +++ b/tools/rosmaster/CHANGELOG.rst @@ -2,8 +2,8 @@ Changelog for package rosmaster ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -Forthcoming ------------ +1.12.10 (2017-11-06) +-------------------- 1.12.9 (2017-11-06) ------------------- diff --git a/tools/rosmaster/package.xml b/tools/rosmaster/package.xml index c25269d268..eb4011bad1 100644 --- a/tools/rosmaster/package.xml +++ b/tools/rosmaster/package.xml @@ -1,6 +1,6 @@ rosmaster - 1.12.9 + 1.12.10 ROS Master implementation. diff --git a/tools/rosmsg/CHANGELOG.rst b/tools/rosmsg/CHANGELOG.rst index 0a2a72b51e..9f05fc10c1 100644 --- a/tools/rosmsg/CHANGELOG.rst +++ b/tools/rosmsg/CHANGELOG.rst @@ -2,8 +2,8 @@ Changelog for package rosmsg ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -Forthcoming ------------ +1.12.10 (2017-11-06) +-------------------- 1.12.9 (2017-11-06) ------------------- diff --git a/tools/rosmsg/package.xml b/tools/rosmsg/package.xml index f083bbed61..edc32c4bec 100644 --- a/tools/rosmsg/package.xml +++ b/tools/rosmsg/package.xml @@ -1,6 +1,6 @@ rosmsg - 1.12.9 + 1.12.10 rosmsg contains two command-line tools: rosmsg and rossrv. rosmsg is a command-line tool for diff --git a/tools/rosnode/CHANGELOG.rst b/tools/rosnode/CHANGELOG.rst index 4b4d3972d4..1008d23c77 100644 --- a/tools/rosnode/CHANGELOG.rst +++ b/tools/rosnode/CHANGELOG.rst @@ -2,8 +2,8 @@ Changelog for package rosnode ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -Forthcoming ------------ +1.12.10 (2017-11-06) +-------------------- 1.12.9 (2017-11-06) ------------------- diff --git a/tools/rosnode/package.xml b/tools/rosnode/package.xml index 29065389ef..299474a1f7 100644 --- a/tools/rosnode/package.xml +++ b/tools/rosnode/package.xml @@ -1,6 +1,6 @@ rosnode - 1.12.9 + 1.12.10 rosnode is a command-line tool for displaying debug information about ROS Nodes, diff --git a/tools/rosout/CHANGELOG.rst b/tools/rosout/CHANGELOG.rst index 48372079ed..8379b37f76 100644 --- a/tools/rosout/CHANGELOG.rst +++ b/tools/rosout/CHANGELOG.rst @@ -2,8 +2,8 @@ Changelog for package rosout ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -Forthcoming ------------ +1.12.10 (2017-11-06) +-------------------- 1.12.9 (2017-11-06) ------------------- diff --git a/tools/rosout/package.xml b/tools/rosout/package.xml index 2f8a6bcafe..ccf4c8565f 100644 --- a/tools/rosout/package.xml +++ b/tools/rosout/package.xml @@ -1,6 +1,6 @@ rosout - 1.12.9 + 1.12.10 System-wide logging mechanism for messages sent to the /rosout topic. diff --git a/tools/rosparam/CHANGELOG.rst b/tools/rosparam/CHANGELOG.rst index 7c62f26e8b..2d26e070b3 100644 --- a/tools/rosparam/CHANGELOG.rst +++ b/tools/rosparam/CHANGELOG.rst @@ -2,8 +2,8 @@ Changelog for package rosparam ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -Forthcoming ------------ +1.12.10 (2017-11-06) +-------------------- 1.12.9 (2017-11-06) ------------------- diff --git a/tools/rosparam/package.xml b/tools/rosparam/package.xml index 02b4114208..449dfd1c28 100644 --- a/tools/rosparam/package.xml +++ b/tools/rosparam/package.xml @@ -1,6 +1,6 @@ rosparam - 1.12.9 + 1.12.10 rosparam contains the rosparam command-line tool for getting and setting ROS Parameters on the rosservice - 1.12.9 + 1.12.10 rosservice contains the rosservice command-line tool for listing and querying ROS rostest - 1.12.9 + 1.12.10 Integration test suite based on roslaunch that is compatible with xUnit frameworks. diff --git a/tools/rostopic/CHANGELOG.rst b/tools/rostopic/CHANGELOG.rst index 506fcb7297..e75db5624e 100644 --- a/tools/rostopic/CHANGELOG.rst +++ b/tools/rostopic/CHANGELOG.rst @@ -2,8 +2,8 @@ Changelog for package rostopic ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -Forthcoming ------------ +1.12.10 (2017-11-06) +-------------------- 1.12.9 (2017-11-06) ------------------- diff --git a/tools/rostopic/package.xml b/tools/rostopic/package.xml index f4d84c8467..466ee25336 100644 --- a/tools/rostopic/package.xml +++ b/tools/rostopic/package.xml @@ -1,6 +1,6 @@ rostopic - 1.12.9 + 1.12.10 rostopic contains the rostopic command-line tool for displaying debug information about diff --git a/tools/topic_tools/CHANGELOG.rst b/tools/topic_tools/CHANGELOG.rst index eb44474076..870137bba5 100644 --- a/tools/topic_tools/CHANGELOG.rst +++ b/tools/topic_tools/CHANGELOG.rst @@ -2,8 +2,8 @@ Changelog for package topic_tools ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -Forthcoming ------------ +1.12.10 (2017-11-06) +-------------------- 1.12.9 (2017-11-06) ------------------- diff --git a/tools/topic_tools/package.xml b/tools/topic_tools/package.xml index 85f643387a..d30e126bbb 100644 --- a/tools/topic_tools/package.xml +++ b/tools/topic_tools/package.xml @@ -1,6 +1,6 @@ topic_tools - 1.12.9 + 1.12.10 Tools for directing, throttling, selecting, and otherwise messing with ROS topics at a meta level. None of the programs in this package actually diff --git a/utilities/message_filters/CHANGELOG.rst b/utilities/message_filters/CHANGELOG.rst index 9767884f29..042fb45fd4 100644 --- a/utilities/message_filters/CHANGELOG.rst +++ b/utilities/message_filters/CHANGELOG.rst @@ -2,8 +2,8 @@ Changelog for package message_filters ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -Forthcoming ------------ +1.12.10 (2017-11-06) +-------------------- 1.12.9 (2017-11-06) ------------------- diff --git a/utilities/message_filters/package.xml b/utilities/message_filters/package.xml index 020c65bd25..cfa241ca77 100644 --- a/utilities/message_filters/package.xml +++ b/utilities/message_filters/package.xml @@ -1,6 +1,6 @@ message_filters - 1.12.9 + 1.12.10 A set of message filters which take in messages and may output those messages at a later time, based on the conditions that filter needs met. diff --git a/utilities/roslz4/CHANGELOG.rst b/utilities/roslz4/CHANGELOG.rst index 2ae0b7c680..49bd3dc730 100644 --- a/utilities/roslz4/CHANGELOG.rst +++ b/utilities/roslz4/CHANGELOG.rst @@ -2,8 +2,8 @@ Changelog for package roslz4 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -Forthcoming ------------ +1.12.10 (2017-11-06) +-------------------- 1.12.9 (2017-11-06) ------------------- diff --git a/utilities/roslz4/package.xml b/utilities/roslz4/package.xml index a84c12670a..45492ab3ba 100644 --- a/utilities/roslz4/package.xml +++ b/utilities/roslz4/package.xml @@ -1,7 +1,7 @@ roslz4 - 1.12.9 + 1.12.10 A Python and C++ implementation of the LZ4 streaming format. Large data streams are split into blocks which are compressed using the very fast LZ4 diff --git a/utilities/roswtf/CHANGELOG.rst b/utilities/roswtf/CHANGELOG.rst index cdcce6d877..e5b8ac59fd 100644 --- a/utilities/roswtf/CHANGELOG.rst +++ b/utilities/roswtf/CHANGELOG.rst @@ -2,8 +2,8 @@ Changelog for package roswtf ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -Forthcoming ------------ +1.12.10 (2017-11-06) +-------------------- 1.12.9 (2017-11-06) ------------------- diff --git a/utilities/roswtf/package.xml b/utilities/roswtf/package.xml index 070c68c85b..006b6ee0de 100644 --- a/utilities/roswtf/package.xml +++ b/utilities/roswtf/package.xml @@ -1,6 +1,6 @@ roswtf - 1.12.9 + 1.12.10 roswtf is a tool for diagnosing issues with a running ROS system. Think of it as a FAQ implemented in code. diff --git a/utilities/xmlrpcpp/CHANGELOG.rst b/utilities/xmlrpcpp/CHANGELOG.rst index e685747cb3..a2a58f4085 100644 --- a/utilities/xmlrpcpp/CHANGELOG.rst +++ b/utilities/xmlrpcpp/CHANGELOG.rst @@ -2,8 +2,8 @@ Changelog for package xmlrpcpp ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -Forthcoming ------------ +1.12.10 (2017-11-06) +-------------------- 1.12.9 (2017-11-06) ------------------- diff --git a/utilities/xmlrpcpp/package.xml b/utilities/xmlrpcpp/package.xml index 2b84122c16..e721c41444 100644 --- a/utilities/xmlrpcpp/package.xml +++ b/utilities/xmlrpcpp/package.xml @@ -1,6 +1,6 @@ xmlrpcpp - 1.12.9 + 1.12.10 XmlRpc++ is a C++ implementation of the XML-RPC protocol. This version is heavily modified from the package available on SourceForge in order to From f5b795e1b87e6c459a4e9edfcfa4c89c4286d170 Mon Sep 17 00:00:00 2001 From: Dirk Thomas Date: Tue, 7 Nov 2017 08:36:48 -0800 Subject: [PATCH 66/72] Revert "Replaced deprecated lz4 function call" This reverts commit a31ddd0cf3df18b360fac4458ba5bbec14e885e3. --- utilities/roslz4/src/lz4s.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/utilities/roslz4/src/lz4s.c b/utilities/roslz4/src/lz4s.c index c1299b040f..05f16eabfc 100644 --- a/utilities/roslz4/src/lz4s.c +++ b/utilities/roslz4/src/lz4s.c @@ -181,10 +181,10 @@ int bufferToOutput(roslz4_stream *str) { state->buffer_offset, str->output_left); // Shrink output by 1 to detect if data is not compressible - uint32_t comp_size = LZ4_compress_default(state->buffer, - str->output_next + 4, - (int) state->buffer_offset, - (int) uncomp_size - 1); + uint32_t comp_size = LZ4_compress_limitedOutput(state->buffer, + str->output_next + 4, + (int) state->buffer_offset, + (int) uncomp_size - 1); uint32_t wrote; if (comp_size > 0) { DEBUG("bufferToOutput() Compressed to %i bytes\n", comp_size); From 4c9bf64bea92aad3a5a33221bb173bd7ef8d3987 Mon Sep 17 00:00:00 2001 From: Dirk Thomas Date: Tue, 7 Nov 2017 09:26:50 -0800 Subject: [PATCH 67/72] update changelogs --- clients/roscpp/CHANGELOG.rst | 3 +++ clients/rospy/CHANGELOG.rst | 3 +++ ros_comm/CHANGELOG.rst | 3 +++ tools/rosbag/CHANGELOG.rst | 3 +++ tools/rosbag_storage/CHANGELOG.rst | 3 +++ tools/rosconsole/CHANGELOG.rst | 3 +++ tools/rosgraph/CHANGELOG.rst | 3 +++ tools/roslaunch/CHANGELOG.rst | 3 +++ tools/rosmaster/CHANGELOG.rst | 3 +++ tools/rosmsg/CHANGELOG.rst | 3 +++ tools/rosnode/CHANGELOG.rst | 3 +++ tools/rosout/CHANGELOG.rst | 3 +++ tools/rosparam/CHANGELOG.rst | 3 +++ tools/rosservice/CHANGELOG.rst | 3 +++ tools/rostest/CHANGELOG.rst | 3 +++ tools/rostopic/CHANGELOG.rst | 3 +++ tools/topic_tools/CHANGELOG.rst | 3 +++ utilities/message_filters/CHANGELOG.rst | 3 +++ utilities/roslz4/CHANGELOG.rst | 4 ++++ utilities/roswtf/CHANGELOG.rst | 3 +++ utilities/xmlrpcpp/CHANGELOG.rst | 3 +++ 21 files changed, 64 insertions(+) diff --git a/clients/roscpp/CHANGELOG.rst b/clients/roscpp/CHANGELOG.rst index 32558b0df5..fb55e11c67 100644 --- a/clients/roscpp/CHANGELOG.rst +++ b/clients/roscpp/CHANGELOG.rst @@ -2,6 +2,9 @@ Changelog for package roscpp ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Forthcoming +----------- + 1.12.10 (2017-11-06) -------------------- diff --git a/clients/rospy/CHANGELOG.rst b/clients/rospy/CHANGELOG.rst index ef2a32c38a..dbd9227d7f 100644 --- a/clients/rospy/CHANGELOG.rst +++ b/clients/rospy/CHANGELOG.rst @@ -2,6 +2,9 @@ Changelog for package rospy ^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Forthcoming +----------- + 1.12.10 (2017-11-06) -------------------- diff --git a/ros_comm/CHANGELOG.rst b/ros_comm/CHANGELOG.rst index 17c8a53dcd..39b566ea36 100644 --- a/ros_comm/CHANGELOG.rst +++ b/ros_comm/CHANGELOG.rst @@ -2,6 +2,9 @@ Changelog for package ros_comm ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Forthcoming +----------- + 1.12.10 (2017-11-06) -------------------- diff --git a/tools/rosbag/CHANGELOG.rst b/tools/rosbag/CHANGELOG.rst index 725fe5b0e9..551e0d89c7 100644 --- a/tools/rosbag/CHANGELOG.rst +++ b/tools/rosbag/CHANGELOG.rst @@ -2,6 +2,9 @@ Changelog for package rosbag ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Forthcoming +----------- + 1.12.10 (2017-11-06) -------------------- diff --git a/tools/rosbag_storage/CHANGELOG.rst b/tools/rosbag_storage/CHANGELOG.rst index 4767a04150..44eb64f626 100644 --- a/tools/rosbag_storage/CHANGELOG.rst +++ b/tools/rosbag_storage/CHANGELOG.rst @@ -2,6 +2,9 @@ Changelog for package rosbag_storage ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Forthcoming +----------- + 1.12.10 (2017-11-06) -------------------- * fix compatibility with libconsole-bridge in Jessie, take 2 diff --git a/tools/rosconsole/CHANGELOG.rst b/tools/rosconsole/CHANGELOG.rst index 3c11878791..17562261e8 100644 --- a/tools/rosconsole/CHANGELOG.rst +++ b/tools/rosconsole/CHANGELOG.rst @@ -2,6 +2,9 @@ Changelog for package rosconsole ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Forthcoming +----------- + 1.12.10 (2017-11-06) -------------------- diff --git a/tools/rosgraph/CHANGELOG.rst b/tools/rosgraph/CHANGELOG.rst index 371e470563..3e2af33189 100644 --- a/tools/rosgraph/CHANGELOG.rst +++ b/tools/rosgraph/CHANGELOG.rst @@ -2,6 +2,9 @@ Changelog for package rosgraph ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Forthcoming +----------- + 1.12.10 (2017-11-06) -------------------- diff --git a/tools/roslaunch/CHANGELOG.rst b/tools/roslaunch/CHANGELOG.rst index 8eb4d337ed..63f28256b8 100644 --- a/tools/roslaunch/CHANGELOG.rst +++ b/tools/roslaunch/CHANGELOG.rst @@ -2,6 +2,9 @@ Changelog for package roslaunch ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Forthcoming +----------- + 1.12.10 (2017-11-06) -------------------- diff --git a/tools/rosmaster/CHANGELOG.rst b/tools/rosmaster/CHANGELOG.rst index bd346fd488..75b086b52b 100644 --- a/tools/rosmaster/CHANGELOG.rst +++ b/tools/rosmaster/CHANGELOG.rst @@ -2,6 +2,9 @@ Changelog for package rosmaster ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Forthcoming +----------- + 1.12.10 (2017-11-06) -------------------- diff --git a/tools/rosmsg/CHANGELOG.rst b/tools/rosmsg/CHANGELOG.rst index 9f05fc10c1..4e22f03345 100644 --- a/tools/rosmsg/CHANGELOG.rst +++ b/tools/rosmsg/CHANGELOG.rst @@ -2,6 +2,9 @@ Changelog for package rosmsg ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Forthcoming +----------- + 1.12.10 (2017-11-06) -------------------- diff --git a/tools/rosnode/CHANGELOG.rst b/tools/rosnode/CHANGELOG.rst index 1008d23c77..d1baf2075f 100644 --- a/tools/rosnode/CHANGELOG.rst +++ b/tools/rosnode/CHANGELOG.rst @@ -2,6 +2,9 @@ Changelog for package rosnode ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Forthcoming +----------- + 1.12.10 (2017-11-06) -------------------- diff --git a/tools/rosout/CHANGELOG.rst b/tools/rosout/CHANGELOG.rst index 8379b37f76..5de8dbd5e9 100644 --- a/tools/rosout/CHANGELOG.rst +++ b/tools/rosout/CHANGELOG.rst @@ -2,6 +2,9 @@ Changelog for package rosout ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Forthcoming +----------- + 1.12.10 (2017-11-06) -------------------- diff --git a/tools/rosparam/CHANGELOG.rst b/tools/rosparam/CHANGELOG.rst index 2d26e070b3..600d78de4e 100644 --- a/tools/rosparam/CHANGELOG.rst +++ b/tools/rosparam/CHANGELOG.rst @@ -2,6 +2,9 @@ Changelog for package rosparam ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Forthcoming +----------- + 1.12.10 (2017-11-06) -------------------- diff --git a/tools/rosservice/CHANGELOG.rst b/tools/rosservice/CHANGELOG.rst index bfb3218ad9..45c8afd4e2 100644 --- a/tools/rosservice/CHANGELOG.rst +++ b/tools/rosservice/CHANGELOG.rst @@ -2,6 +2,9 @@ Changelog for package rosservice ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Forthcoming +----------- + 1.12.10 (2017-11-06) -------------------- diff --git a/tools/rostest/CHANGELOG.rst b/tools/rostest/CHANGELOG.rst index 277654baf9..9b4ac1e465 100644 --- a/tools/rostest/CHANGELOG.rst +++ b/tools/rostest/CHANGELOG.rst @@ -2,6 +2,9 @@ Changelog for package rostest ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Forthcoming +----------- + 1.12.10 (2017-11-06) -------------------- diff --git a/tools/rostopic/CHANGELOG.rst b/tools/rostopic/CHANGELOG.rst index e75db5624e..1895187b4d 100644 --- a/tools/rostopic/CHANGELOG.rst +++ b/tools/rostopic/CHANGELOG.rst @@ -2,6 +2,9 @@ Changelog for package rostopic ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Forthcoming +----------- + 1.12.10 (2017-11-06) -------------------- diff --git a/tools/topic_tools/CHANGELOG.rst b/tools/topic_tools/CHANGELOG.rst index 870137bba5..49548ec78f 100644 --- a/tools/topic_tools/CHANGELOG.rst +++ b/tools/topic_tools/CHANGELOG.rst @@ -2,6 +2,9 @@ Changelog for package topic_tools ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Forthcoming +----------- + 1.12.10 (2017-11-06) -------------------- diff --git a/utilities/message_filters/CHANGELOG.rst b/utilities/message_filters/CHANGELOG.rst index 042fb45fd4..4a2b34f7dc 100644 --- a/utilities/message_filters/CHANGELOG.rst +++ b/utilities/message_filters/CHANGELOG.rst @@ -2,6 +2,9 @@ Changelog for package message_filters ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Forthcoming +----------- + 1.12.10 (2017-11-06) -------------------- diff --git a/utilities/roslz4/CHANGELOG.rst b/utilities/roslz4/CHANGELOG.rst index 49bd3dc730..a860a2321d 100644 --- a/utilities/roslz4/CHANGELOG.rst +++ b/utilities/roslz4/CHANGELOG.rst @@ -2,6 +2,10 @@ Changelog for package roslz4 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Forthcoming +----------- +* revert replace deprecated lz4 function call (`#1220 `_, regression from 1.12.8 on Debian Jessie) + 1.12.10 (2017-11-06) -------------------- diff --git a/utilities/roswtf/CHANGELOG.rst b/utilities/roswtf/CHANGELOG.rst index e5b8ac59fd..973ac86c16 100644 --- a/utilities/roswtf/CHANGELOG.rst +++ b/utilities/roswtf/CHANGELOG.rst @@ -2,6 +2,9 @@ Changelog for package roswtf ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Forthcoming +----------- + 1.12.10 (2017-11-06) -------------------- diff --git a/utilities/xmlrpcpp/CHANGELOG.rst b/utilities/xmlrpcpp/CHANGELOG.rst index a2a58f4085..9c5edc5db6 100644 --- a/utilities/xmlrpcpp/CHANGELOG.rst +++ b/utilities/xmlrpcpp/CHANGELOG.rst @@ -2,6 +2,9 @@ Changelog for package xmlrpcpp ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Forthcoming +----------- + 1.12.10 (2017-11-06) -------------------- From f3c4ae8c80b557dd44fac3ed8797cd73d771d0b9 Mon Sep 17 00:00:00 2001 From: Dirk Thomas Date: Tue, 7 Nov 2017 09:27:14 -0800 Subject: [PATCH 68/72] 1.12.11 --- clients/roscpp/CHANGELOG.rst | 4 ++-- clients/roscpp/package.xml | 2 +- clients/rospy/CHANGELOG.rst | 4 ++-- clients/rospy/package.xml | 2 +- ros_comm/CHANGELOG.rst | 4 ++-- ros_comm/package.xml | 2 +- test/test_rosbag/package.xml | 2 +- test/test_rosbag_storage/package.xml | 2 +- test/test_roscpp/package.xml | 2 +- test/test_rosgraph/package.xml | 2 +- test/test_roslaunch/package.xml | 2 +- test/test_roslib_comm/package.xml | 2 +- test/test_rosmaster/package.xml | 2 +- test/test_rosparam/package.xml | 2 +- test/test_rospy/package.xml | 2 +- test/test_rosservice/package.xml | 2 +- test/test_rostopic/package.xml | 2 +- tools/rosbag/CHANGELOG.rst | 4 ++-- tools/rosbag/package.xml | 2 +- tools/rosbag_storage/CHANGELOG.rst | 4 ++-- tools/rosbag_storage/package.xml | 2 +- tools/rosconsole/CHANGELOG.rst | 4 ++-- tools/rosconsole/package.xml | 2 +- tools/rosgraph/CHANGELOG.rst | 4 ++-- tools/rosgraph/package.xml | 2 +- tools/roslaunch/CHANGELOG.rst | 4 ++-- tools/roslaunch/package.xml | 2 +- tools/rosmaster/CHANGELOG.rst | 4 ++-- tools/rosmaster/package.xml | 2 +- tools/rosmsg/CHANGELOG.rst | 4 ++-- tools/rosmsg/package.xml | 2 +- tools/rosnode/CHANGELOG.rst | 4 ++-- tools/rosnode/package.xml | 2 +- tools/rosout/CHANGELOG.rst | 4 ++-- tools/rosout/package.xml | 2 +- tools/rosparam/CHANGELOG.rst | 4 ++-- tools/rosparam/package.xml | 2 +- tools/rosservice/CHANGELOG.rst | 4 ++-- tools/rosservice/package.xml | 2 +- tools/rostest/CHANGELOG.rst | 4 ++-- tools/rostest/package.xml | 2 +- tools/rostopic/CHANGELOG.rst | 4 ++-- tools/rostopic/package.xml | 2 +- tools/topic_tools/CHANGELOG.rst | 4 ++-- tools/topic_tools/package.xml | 2 +- utilities/message_filters/CHANGELOG.rst | 4 ++-- utilities/message_filters/package.xml | 2 +- utilities/roslz4/CHANGELOG.rst | 4 ++-- utilities/roslz4/package.xml | 2 +- utilities/roswtf/CHANGELOG.rst | 4 ++-- utilities/roswtf/package.xml | 2 +- utilities/xmlrpcpp/CHANGELOG.rst | 4 ++-- utilities/xmlrpcpp/package.xml | 2 +- 53 files changed, 74 insertions(+), 74 deletions(-) diff --git a/clients/roscpp/CHANGELOG.rst b/clients/roscpp/CHANGELOG.rst index fb55e11c67..5a28b778c2 100644 --- a/clients/roscpp/CHANGELOG.rst +++ b/clients/roscpp/CHANGELOG.rst @@ -2,8 +2,8 @@ Changelog for package roscpp ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -Forthcoming ------------ +1.12.11 (2017-11-07) +-------------------- 1.12.10 (2017-11-06) -------------------- diff --git a/clients/roscpp/package.xml b/clients/roscpp/package.xml index 3566b84924..2749436507 100644 --- a/clients/roscpp/package.xml +++ b/clients/roscpp/package.xml @@ -1,6 +1,6 @@ roscpp - 1.12.10 + 1.12.11 roscpp is a C++ implementation of ROS. It provides a client diff --git a/clients/rospy/CHANGELOG.rst b/clients/rospy/CHANGELOG.rst index dbd9227d7f..5e1f143d85 100644 --- a/clients/rospy/CHANGELOG.rst +++ b/clients/rospy/CHANGELOG.rst @@ -2,8 +2,8 @@ Changelog for package rospy ^^^^^^^^^^^^^^^^^^^^^^^^^^^ -Forthcoming ------------ +1.12.11 (2017-11-07) +-------------------- 1.12.10 (2017-11-06) -------------------- diff --git a/clients/rospy/package.xml b/clients/rospy/package.xml index 655f42b485..c1ddcbd212 100644 --- a/clients/rospy/package.xml +++ b/clients/rospy/package.xml @@ -1,6 +1,6 @@ rospy - 1.12.10 + 1.12.11 rospy is a pure Python client library for ROS. The rospy client API enables Python programmers to quickly interface with ROS ros_comm - 1.12.10 + 1.12.11 ROS communications-related packages, including core client libraries (roscpp, rospy) and graph introspection tools (rostopic, rosnode, rosservice, rosparam). diff --git a/test/test_rosbag/package.xml b/test/test_rosbag/package.xml index e163f8e7dd..0d86cc6e0c 100644 --- a/test/test_rosbag/package.xml +++ b/test/test_rosbag/package.xml @@ -1,6 +1,6 @@ test_rosbag - 1.12.10 + 1.12.11 A package containing the unit tests for rosbag. diff --git a/test/test_rosbag_storage/package.xml b/test/test_rosbag_storage/package.xml index 70f51d75a0..3aec6534e8 100644 --- a/test/test_rosbag_storage/package.xml +++ b/test/test_rosbag_storage/package.xml @@ -1,6 +1,6 @@ test_rosbag_storage - 1.12.10 + 1.12.11 A package containing the unit tests for rosbag_storage. diff --git a/test/test_roscpp/package.xml b/test/test_roscpp/package.xml index f8420b5e3e..73173bcdff 100644 --- a/test/test_roscpp/package.xml +++ b/test/test_roscpp/package.xml @@ -1,6 +1,6 @@ test_roscpp - 1.12.10 + 1.12.11 Tests for roscpp which depend on rostest. diff --git a/test/test_rosgraph/package.xml b/test/test_rosgraph/package.xml index b545bd0fc8..7ea060ae5f 100644 --- a/test/test_rosgraph/package.xml +++ b/test/test_rosgraph/package.xml @@ -1,6 +1,6 @@ test_rosgraph - 1.12.10 + 1.12.11 Tests for rosgraph which depend on rostest. diff --git a/test/test_roslaunch/package.xml b/test/test_roslaunch/package.xml index 4d0cc9a3a2..bf199d18d7 100644 --- a/test/test_roslaunch/package.xml +++ b/test/test_roslaunch/package.xml @@ -1,6 +1,6 @@ test_roslaunch - 1.12.10 + 1.12.11 Tests for roslaunch which depend on rostest. diff --git a/test/test_roslib_comm/package.xml b/test/test_roslib_comm/package.xml index cbde5b49b4..09d0f0b2d3 100644 --- a/test/test_roslib_comm/package.xml +++ b/test/test_roslib_comm/package.xml @@ -1,6 +1,6 @@ test_roslib_comm - 1.12.10 + 1.12.11 Unit tests verifying that roslib is operating as expected. diff --git a/test/test_rosmaster/package.xml b/test/test_rosmaster/package.xml index a69f329e3c..3fc5b0c9b8 100644 --- a/test/test_rosmaster/package.xml +++ b/test/test_rosmaster/package.xml @@ -1,6 +1,6 @@ test_rosmaster - 1.12.10 + 1.12.11 Tests for rosmaster which depend on rostest. diff --git a/test/test_rosparam/package.xml b/test/test_rosparam/package.xml index c7bd5ee70f..d2ca5a8b58 100644 --- a/test/test_rosparam/package.xml +++ b/test/test_rosparam/package.xml @@ -1,6 +1,6 @@ test_rosparam - 1.12.10 + 1.12.11 A package containing the unit tests for rosparam. diff --git a/test/test_rospy/package.xml b/test/test_rospy/package.xml index d23ccbe775..81f8e9b000 100644 --- a/test/test_rospy/package.xml +++ b/test/test_rospy/package.xml @@ -1,6 +1,6 @@ test_rospy - 1.12.10 + 1.12.11 rospy unit and integration test framework. diff --git a/test/test_rosservice/package.xml b/test/test_rosservice/package.xml index 9733c9fd76..6c424eb75d 100644 --- a/test/test_rosservice/package.xml +++ b/test/test_rosservice/package.xml @@ -1,6 +1,6 @@ test_rosservice - 1.12.10 + 1.12.11 Tests for the rosservice tool. diff --git a/test/test_rostopic/package.xml b/test/test_rostopic/package.xml index 6e60e4a057..1d6899b226 100644 --- a/test/test_rostopic/package.xml +++ b/test/test_rostopic/package.xml @@ -1,6 +1,6 @@ test_rostopic - 1.12.10 + 1.12.11 Tests for rostopic. diff --git a/tools/rosbag/CHANGELOG.rst b/tools/rosbag/CHANGELOG.rst index 551e0d89c7..0f6c60ab36 100644 --- a/tools/rosbag/CHANGELOG.rst +++ b/tools/rosbag/CHANGELOG.rst @@ -2,8 +2,8 @@ Changelog for package rosbag ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -Forthcoming ------------ +1.12.11 (2017-11-07) +-------------------- 1.12.10 (2017-11-06) -------------------- diff --git a/tools/rosbag/package.xml b/tools/rosbag/package.xml index 2fbe8e39db..5ceb775f05 100644 --- a/tools/rosbag/package.xml +++ b/tools/rosbag/package.xml @@ -1,6 +1,6 @@ rosbag - 1.12.10 + 1.12.11 This is a set of tools for recording from and playing back to ROS topics. It is intended to be high performance and avoids diff --git a/tools/rosbag_storage/CHANGELOG.rst b/tools/rosbag_storage/CHANGELOG.rst index 44eb64f626..6ce9242a5f 100644 --- a/tools/rosbag_storage/CHANGELOG.rst +++ b/tools/rosbag_storage/CHANGELOG.rst @@ -2,8 +2,8 @@ Changelog for package rosbag_storage ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -Forthcoming ------------ +1.12.11 (2017-11-07) +-------------------- 1.12.10 (2017-11-06) -------------------- diff --git a/tools/rosbag_storage/package.xml b/tools/rosbag_storage/package.xml index d71479aa92..d3f928fa0c 100644 --- a/tools/rosbag_storage/package.xml +++ b/tools/rosbag_storage/package.xml @@ -1,6 +1,6 @@ rosbag_storage - 1.12.10 + 1.12.11 This is a set of tools for recording from and playing back ROS message without relying on the ROS client library. diff --git a/tools/rosconsole/CHANGELOG.rst b/tools/rosconsole/CHANGELOG.rst index 17562261e8..3b1d250464 100644 --- a/tools/rosconsole/CHANGELOG.rst +++ b/tools/rosconsole/CHANGELOG.rst @@ -2,8 +2,8 @@ Changelog for package rosconsole ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -Forthcoming ------------ +1.12.11 (2017-11-07) +-------------------- 1.12.10 (2017-11-06) -------------------- diff --git a/tools/rosconsole/package.xml b/tools/rosconsole/package.xml index b3dfdca006..c2efc09305 100644 --- a/tools/rosconsole/package.xml +++ b/tools/rosconsole/package.xml @@ -1,6 +1,6 @@ rosconsole - 1.12.10 + 1.12.11 ROS console output library. Dirk Thomas BSD diff --git a/tools/rosgraph/CHANGELOG.rst b/tools/rosgraph/CHANGELOG.rst index 3e2af33189..c5b9585458 100644 --- a/tools/rosgraph/CHANGELOG.rst +++ b/tools/rosgraph/CHANGELOG.rst @@ -2,8 +2,8 @@ Changelog for package rosgraph ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -Forthcoming ------------ +1.12.11 (2017-11-07) +-------------------- 1.12.10 (2017-11-06) -------------------- diff --git a/tools/rosgraph/package.xml b/tools/rosgraph/package.xml index 04de586293..3e3d5226a5 100644 --- a/tools/rosgraph/package.xml +++ b/tools/rosgraph/package.xml @@ -1,6 +1,6 @@ rosgraph - 1.12.10 + 1.12.11 rosgraph contains the rosgraph command-line tool, which prints information about the ROS Computation Graph. It also provides an diff --git a/tools/roslaunch/CHANGELOG.rst b/tools/roslaunch/CHANGELOG.rst index 63f28256b8..fb07ba6a4b 100644 --- a/tools/roslaunch/CHANGELOG.rst +++ b/tools/roslaunch/CHANGELOG.rst @@ -2,8 +2,8 @@ Changelog for package roslaunch ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -Forthcoming ------------ +1.12.11 (2017-11-07) +-------------------- 1.12.10 (2017-11-06) -------------------- diff --git a/tools/roslaunch/package.xml b/tools/roslaunch/package.xml index bb99f4e308..4f9ca362e6 100644 --- a/tools/roslaunch/package.xml +++ b/tools/roslaunch/package.xml @@ -1,6 +1,6 @@ roslaunch - 1.12.10 + 1.12.11 roslaunch is a tool for easily launching multiple ROS nodes locally and remotely diff --git a/tools/rosmaster/CHANGELOG.rst b/tools/rosmaster/CHANGELOG.rst index 75b086b52b..078d24f138 100644 --- a/tools/rosmaster/CHANGELOG.rst +++ b/tools/rosmaster/CHANGELOG.rst @@ -2,8 +2,8 @@ Changelog for package rosmaster ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -Forthcoming ------------ +1.12.11 (2017-11-07) +-------------------- 1.12.10 (2017-11-06) -------------------- diff --git a/tools/rosmaster/package.xml b/tools/rosmaster/package.xml index eb4011bad1..91484b3e48 100644 --- a/tools/rosmaster/package.xml +++ b/tools/rosmaster/package.xml @@ -1,6 +1,6 @@ rosmaster - 1.12.10 + 1.12.11 ROS Master implementation. diff --git a/tools/rosmsg/CHANGELOG.rst b/tools/rosmsg/CHANGELOG.rst index 4e22f03345..925f6c02ab 100644 --- a/tools/rosmsg/CHANGELOG.rst +++ b/tools/rosmsg/CHANGELOG.rst @@ -2,8 +2,8 @@ Changelog for package rosmsg ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -Forthcoming ------------ +1.12.11 (2017-11-07) +-------------------- 1.12.10 (2017-11-06) -------------------- diff --git a/tools/rosmsg/package.xml b/tools/rosmsg/package.xml index edc32c4bec..6f174dd9c0 100644 --- a/tools/rosmsg/package.xml +++ b/tools/rosmsg/package.xml @@ -1,6 +1,6 @@ rosmsg - 1.12.10 + 1.12.11 rosmsg contains two command-line tools: rosmsg and rossrv. rosmsg is a command-line tool for diff --git a/tools/rosnode/CHANGELOG.rst b/tools/rosnode/CHANGELOG.rst index d1baf2075f..2ce7070430 100644 --- a/tools/rosnode/CHANGELOG.rst +++ b/tools/rosnode/CHANGELOG.rst @@ -2,8 +2,8 @@ Changelog for package rosnode ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -Forthcoming ------------ +1.12.11 (2017-11-07) +-------------------- 1.12.10 (2017-11-06) -------------------- diff --git a/tools/rosnode/package.xml b/tools/rosnode/package.xml index 299474a1f7..f9a9d3988e 100644 --- a/tools/rosnode/package.xml +++ b/tools/rosnode/package.xml @@ -1,6 +1,6 @@ rosnode - 1.12.10 + 1.12.11 rosnode is a command-line tool for displaying debug information about ROS Nodes, diff --git a/tools/rosout/CHANGELOG.rst b/tools/rosout/CHANGELOG.rst index 5de8dbd5e9..ac4a2e9f5d 100644 --- a/tools/rosout/CHANGELOG.rst +++ b/tools/rosout/CHANGELOG.rst @@ -2,8 +2,8 @@ Changelog for package rosout ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -Forthcoming ------------ +1.12.11 (2017-11-07) +-------------------- 1.12.10 (2017-11-06) -------------------- diff --git a/tools/rosout/package.xml b/tools/rosout/package.xml index ccf4c8565f..eb18075f41 100644 --- a/tools/rosout/package.xml +++ b/tools/rosout/package.xml @@ -1,6 +1,6 @@ rosout - 1.12.10 + 1.12.11 System-wide logging mechanism for messages sent to the /rosout topic. diff --git a/tools/rosparam/CHANGELOG.rst b/tools/rosparam/CHANGELOG.rst index 600d78de4e..5af67dca4f 100644 --- a/tools/rosparam/CHANGELOG.rst +++ b/tools/rosparam/CHANGELOG.rst @@ -2,8 +2,8 @@ Changelog for package rosparam ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -Forthcoming ------------ +1.12.11 (2017-11-07) +-------------------- 1.12.10 (2017-11-06) -------------------- diff --git a/tools/rosparam/package.xml b/tools/rosparam/package.xml index 449dfd1c28..974211e8a3 100644 --- a/tools/rosparam/package.xml +++ b/tools/rosparam/package.xml @@ -1,6 +1,6 @@ rosparam - 1.12.10 + 1.12.11 rosparam contains the rosparam command-line tool for getting and setting ROS Parameters on the rosservice - 1.12.10 + 1.12.11 rosservice contains the rosservice command-line tool for listing and querying ROS rostest - 1.12.10 + 1.12.11 Integration test suite based on roslaunch that is compatible with xUnit frameworks. diff --git a/tools/rostopic/CHANGELOG.rst b/tools/rostopic/CHANGELOG.rst index 1895187b4d..9ae8ee78f9 100644 --- a/tools/rostopic/CHANGELOG.rst +++ b/tools/rostopic/CHANGELOG.rst @@ -2,8 +2,8 @@ Changelog for package rostopic ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -Forthcoming ------------ +1.12.11 (2017-11-07) +-------------------- 1.12.10 (2017-11-06) -------------------- diff --git a/tools/rostopic/package.xml b/tools/rostopic/package.xml index 466ee25336..05d14dc0d7 100644 --- a/tools/rostopic/package.xml +++ b/tools/rostopic/package.xml @@ -1,6 +1,6 @@ rostopic - 1.12.10 + 1.12.11 rostopic contains the rostopic command-line tool for displaying debug information about diff --git a/tools/topic_tools/CHANGELOG.rst b/tools/topic_tools/CHANGELOG.rst index 49548ec78f..f32eaee7d9 100644 --- a/tools/topic_tools/CHANGELOG.rst +++ b/tools/topic_tools/CHANGELOG.rst @@ -2,8 +2,8 @@ Changelog for package topic_tools ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -Forthcoming ------------ +1.12.11 (2017-11-07) +-------------------- 1.12.10 (2017-11-06) -------------------- diff --git a/tools/topic_tools/package.xml b/tools/topic_tools/package.xml index d30e126bbb..2e59eac8c8 100644 --- a/tools/topic_tools/package.xml +++ b/tools/topic_tools/package.xml @@ -1,6 +1,6 @@ topic_tools - 1.12.10 + 1.12.11 Tools for directing, throttling, selecting, and otherwise messing with ROS topics at a meta level. None of the programs in this package actually diff --git a/utilities/message_filters/CHANGELOG.rst b/utilities/message_filters/CHANGELOG.rst index 4a2b34f7dc..9d442f522f 100644 --- a/utilities/message_filters/CHANGELOG.rst +++ b/utilities/message_filters/CHANGELOG.rst @@ -2,8 +2,8 @@ Changelog for package message_filters ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -Forthcoming ------------ +1.12.11 (2017-11-07) +-------------------- 1.12.10 (2017-11-06) -------------------- diff --git a/utilities/message_filters/package.xml b/utilities/message_filters/package.xml index cfa241ca77..7ae143ed94 100644 --- a/utilities/message_filters/package.xml +++ b/utilities/message_filters/package.xml @@ -1,6 +1,6 @@ message_filters - 1.12.10 + 1.12.11 A set of message filters which take in messages and may output those messages at a later time, based on the conditions that filter needs met. diff --git a/utilities/roslz4/CHANGELOG.rst b/utilities/roslz4/CHANGELOG.rst index a860a2321d..db69bc1fe4 100644 --- a/utilities/roslz4/CHANGELOG.rst +++ b/utilities/roslz4/CHANGELOG.rst @@ -2,8 +2,8 @@ Changelog for package roslz4 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -Forthcoming ------------ +1.12.11 (2017-11-07) +-------------------- * revert replace deprecated lz4 function call (`#1220 `_, regression from 1.12.8 on Debian Jessie) 1.12.10 (2017-11-06) diff --git a/utilities/roslz4/package.xml b/utilities/roslz4/package.xml index 45492ab3ba..990a35d1da 100644 --- a/utilities/roslz4/package.xml +++ b/utilities/roslz4/package.xml @@ -1,7 +1,7 @@ roslz4 - 1.12.10 + 1.12.11 A Python and C++ implementation of the LZ4 streaming format. Large data streams are split into blocks which are compressed using the very fast LZ4 diff --git a/utilities/roswtf/CHANGELOG.rst b/utilities/roswtf/CHANGELOG.rst index 973ac86c16..c456daf6f1 100644 --- a/utilities/roswtf/CHANGELOG.rst +++ b/utilities/roswtf/CHANGELOG.rst @@ -2,8 +2,8 @@ Changelog for package roswtf ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -Forthcoming ------------ +1.12.11 (2017-11-07) +-------------------- 1.12.10 (2017-11-06) -------------------- diff --git a/utilities/roswtf/package.xml b/utilities/roswtf/package.xml index 006b6ee0de..139d6b297f 100644 --- a/utilities/roswtf/package.xml +++ b/utilities/roswtf/package.xml @@ -1,6 +1,6 @@ roswtf - 1.12.10 + 1.12.11 roswtf is a tool for diagnosing issues with a running ROS system. Think of it as a FAQ implemented in code. diff --git a/utilities/xmlrpcpp/CHANGELOG.rst b/utilities/xmlrpcpp/CHANGELOG.rst index 9c5edc5db6..d7e7fba95d 100644 --- a/utilities/xmlrpcpp/CHANGELOG.rst +++ b/utilities/xmlrpcpp/CHANGELOG.rst @@ -2,8 +2,8 @@ Changelog for package xmlrpcpp ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -Forthcoming ------------ +1.12.11 (2017-11-07) +-------------------- 1.12.10 (2017-11-06) -------------------- diff --git a/utilities/xmlrpcpp/package.xml b/utilities/xmlrpcpp/package.xml index e721c41444..be566c78b8 100644 --- a/utilities/xmlrpcpp/package.xml +++ b/utilities/xmlrpcpp/package.xml @@ -1,6 +1,6 @@ xmlrpcpp - 1.12.10 + 1.12.11 XmlRpc++ is a C++ implementation of the XML-RPC protocol. This version is heavily modified from the package available on SourceForge in order to From 0542c4cf46df38972084229e2ae708bbe5d616dc Mon Sep 17 00:00:00 2001 From: Mikael Arguedas Date: Thu, 16 Nov 2017 15:17:55 -0800 Subject: [PATCH 69/72] backward compatibility with libconsole-bridge in Jessie (take 3) (#1235) * backward compatibility with libconsole-bridge in Jessie (take 3) * copy-n-paste error * remove fragile undef * dont rely on existence of short version of the macros, define the long with API calls instead * remove empty line --- tools/rosbag_storage/include/rosbag/bag.h | 30 +++++++++-------------- 1 file changed, 12 insertions(+), 18 deletions(-) diff --git a/tools/rosbag_storage/include/rosbag/bag.h b/tools/rosbag_storage/include/rosbag/bag.h index 37528d5167..0e4eb0e580 100644 --- a/tools/rosbag_storage/include/rosbag/bag.h +++ b/tools/rosbag_storage/include/rosbag/bag.h @@ -61,29 +61,23 @@ #include #include "console_bridge/console.h" -#if defined logDebug -# ifdef CONSOLE_BRIDGE_logDebug -# undef logDebug -# else // Remove this when no longer supporting platforms with libconsole-bridge-dev < 0.3.0, // in particular Debian Jessie: https://packages.debian.org/jessie/libconsole-bridge-dev -# define CONSOLE_BRIDGE_logDebug logDebug -# endif +#ifndef CONSOLE_BRIDGE_logDebug +# define CONSOLE_BRIDGE_logDebug(fmt, ...) \ + console_bridge::log(__FILE__, __LINE__, console_bridge::CONSOLE_BRIDGE_LOG_DEBUG, fmt, ##__VA_ARGS__) #endif -#if defined logInform -# undef logInform +#ifndef CONSOLE_BRIDGE_logInform +# define CONSOLE_BRIDGE_logInform(fmt, ...) \ + console_bridge::log(__FILE__, __LINE__, console_bridge::CONSOLE_BRIDGE_LOG_INFO, fmt, ##__VA_ARGS__) #endif -#if defined logWarn -# undef logWarn +#ifndef CONSOLE_BRIDGE_logWarn +# define CONSOLE_BRIDGE_logWarn(fmt, ...) \ + console_bridge::log(__FILE__, __LINE__, console_bridge::CONSOLE_BRIDGE_LOG_WARN, fmt, ##__VA_ARGS__) #endif -#if defined logError -# ifdef CONSOLE_BRIDGE_logError -# undef logError -# else -// Remove this when no longer supporting platforms with libconsole-bridge-dev < 0.3.0, -// in particular Debian Jessie: https://packages.debian.org/jessie/libconsole-bridge-dev -# define CONSOLE_BRIDGE_logError logError -# endif +#ifndef CONSOLE_BRIDGE_logError +# define CONSOLE_BRIDGE_logError(fmt, ...) \ + console_bridge::log(__FILE__, __LINE__, console_bridge::CONSOLE_BRIDGE_LOG_ERROR, fmt, ##__VA_ARGS__) #endif namespace rosbag { From b921029d1d4a1948b9aa33b9fd2ea1c8f546eff9 Mon Sep 17 00:00:00 2001 From: Dirk Thomas Date: Thu, 16 Nov 2017 15:19:19 -0800 Subject: [PATCH 70/72] update changelogs --- clients/roscpp/CHANGELOG.rst | 3 +++ clients/rospy/CHANGELOG.rst | 3 +++ ros_comm/CHANGELOG.rst | 3 +++ tools/rosbag/CHANGELOG.rst | 3 +++ tools/rosbag_storage/CHANGELOG.rst | 4 ++++ tools/rosconsole/CHANGELOG.rst | 3 +++ tools/rosgraph/CHANGELOG.rst | 3 +++ tools/roslaunch/CHANGELOG.rst | 3 +++ tools/rosmaster/CHANGELOG.rst | 3 +++ tools/rosmsg/CHANGELOG.rst | 3 +++ tools/rosnode/CHANGELOG.rst | 3 +++ tools/rosout/CHANGELOG.rst | 3 +++ tools/rosparam/CHANGELOG.rst | 3 +++ tools/rosservice/CHANGELOG.rst | 3 +++ tools/rostest/CHANGELOG.rst | 3 +++ tools/rostopic/CHANGELOG.rst | 3 +++ tools/topic_tools/CHANGELOG.rst | 3 +++ utilities/message_filters/CHANGELOG.rst | 3 +++ utilities/roslz4/CHANGELOG.rst | 3 +++ utilities/roswtf/CHANGELOG.rst | 3 +++ utilities/xmlrpcpp/CHANGELOG.rst | 3 +++ 21 files changed, 64 insertions(+) diff --git a/clients/roscpp/CHANGELOG.rst b/clients/roscpp/CHANGELOG.rst index 5a28b778c2..4d1573715c 100644 --- a/clients/roscpp/CHANGELOG.rst +++ b/clients/roscpp/CHANGELOG.rst @@ -2,6 +2,9 @@ Changelog for package roscpp ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Forthcoming +----------- + 1.12.11 (2017-11-07) -------------------- diff --git a/clients/rospy/CHANGELOG.rst b/clients/rospy/CHANGELOG.rst index 5e1f143d85..2b54df6149 100644 --- a/clients/rospy/CHANGELOG.rst +++ b/clients/rospy/CHANGELOG.rst @@ -2,6 +2,9 @@ Changelog for package rospy ^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Forthcoming +----------- + 1.12.11 (2017-11-07) -------------------- diff --git a/ros_comm/CHANGELOG.rst b/ros_comm/CHANGELOG.rst index 49d827ff85..865e4fb0ef 100644 --- a/ros_comm/CHANGELOG.rst +++ b/ros_comm/CHANGELOG.rst @@ -2,6 +2,9 @@ Changelog for package ros_comm ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Forthcoming +----------- + 1.12.11 (2017-11-07) -------------------- diff --git a/tools/rosbag/CHANGELOG.rst b/tools/rosbag/CHANGELOG.rst index 0f6c60ab36..0239dfb7d3 100644 --- a/tools/rosbag/CHANGELOG.rst +++ b/tools/rosbag/CHANGELOG.rst @@ -2,6 +2,9 @@ Changelog for package rosbag ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Forthcoming +----------- + 1.12.11 (2017-11-07) -------------------- diff --git a/tools/rosbag_storage/CHANGELOG.rst b/tools/rosbag_storage/CHANGELOG.rst index 6ce9242a5f..0ecaf3f76d 100644 --- a/tools/rosbag_storage/CHANGELOG.rst +++ b/tools/rosbag_storage/CHANGELOG.rst @@ -2,6 +2,10 @@ Changelog for package rosbag_storage ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Forthcoming +----------- +* backward compatibility with libconsole-bridge in Jessie (take 3) (`#1235 `_) + 1.12.11 (2017-11-07) -------------------- diff --git a/tools/rosconsole/CHANGELOG.rst b/tools/rosconsole/CHANGELOG.rst index 3b1d250464..bde87204ad 100644 --- a/tools/rosconsole/CHANGELOG.rst +++ b/tools/rosconsole/CHANGELOG.rst @@ -2,6 +2,9 @@ Changelog for package rosconsole ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Forthcoming +----------- + 1.12.11 (2017-11-07) -------------------- diff --git a/tools/rosgraph/CHANGELOG.rst b/tools/rosgraph/CHANGELOG.rst index c5b9585458..cd8f0e1633 100644 --- a/tools/rosgraph/CHANGELOG.rst +++ b/tools/rosgraph/CHANGELOG.rst @@ -2,6 +2,9 @@ Changelog for package rosgraph ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Forthcoming +----------- + 1.12.11 (2017-11-07) -------------------- diff --git a/tools/roslaunch/CHANGELOG.rst b/tools/roslaunch/CHANGELOG.rst index fb07ba6a4b..d1e040c7bd 100644 --- a/tools/roslaunch/CHANGELOG.rst +++ b/tools/roslaunch/CHANGELOG.rst @@ -2,6 +2,9 @@ Changelog for package roslaunch ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Forthcoming +----------- + 1.12.11 (2017-11-07) -------------------- diff --git a/tools/rosmaster/CHANGELOG.rst b/tools/rosmaster/CHANGELOG.rst index 078d24f138..acd7a6d92d 100644 --- a/tools/rosmaster/CHANGELOG.rst +++ b/tools/rosmaster/CHANGELOG.rst @@ -2,6 +2,9 @@ Changelog for package rosmaster ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Forthcoming +----------- + 1.12.11 (2017-11-07) -------------------- diff --git a/tools/rosmsg/CHANGELOG.rst b/tools/rosmsg/CHANGELOG.rst index 925f6c02ab..ba0f5ae23d 100644 --- a/tools/rosmsg/CHANGELOG.rst +++ b/tools/rosmsg/CHANGELOG.rst @@ -2,6 +2,9 @@ Changelog for package rosmsg ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Forthcoming +----------- + 1.12.11 (2017-11-07) -------------------- diff --git a/tools/rosnode/CHANGELOG.rst b/tools/rosnode/CHANGELOG.rst index 2ce7070430..4f63cd4803 100644 --- a/tools/rosnode/CHANGELOG.rst +++ b/tools/rosnode/CHANGELOG.rst @@ -2,6 +2,9 @@ Changelog for package rosnode ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Forthcoming +----------- + 1.12.11 (2017-11-07) -------------------- diff --git a/tools/rosout/CHANGELOG.rst b/tools/rosout/CHANGELOG.rst index ac4a2e9f5d..559bc68b17 100644 --- a/tools/rosout/CHANGELOG.rst +++ b/tools/rosout/CHANGELOG.rst @@ -2,6 +2,9 @@ Changelog for package rosout ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Forthcoming +----------- + 1.12.11 (2017-11-07) -------------------- diff --git a/tools/rosparam/CHANGELOG.rst b/tools/rosparam/CHANGELOG.rst index 5af67dca4f..2643dcb385 100644 --- a/tools/rosparam/CHANGELOG.rst +++ b/tools/rosparam/CHANGELOG.rst @@ -2,6 +2,9 @@ Changelog for package rosparam ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Forthcoming +----------- + 1.12.11 (2017-11-07) -------------------- diff --git a/tools/rosservice/CHANGELOG.rst b/tools/rosservice/CHANGELOG.rst index fa838a4e5c..8bfa07846a 100644 --- a/tools/rosservice/CHANGELOG.rst +++ b/tools/rosservice/CHANGELOG.rst @@ -2,6 +2,9 @@ Changelog for package rosservice ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Forthcoming +----------- + 1.12.11 (2017-11-07) -------------------- diff --git a/tools/rostest/CHANGELOG.rst b/tools/rostest/CHANGELOG.rst index 813192599e..b59d1fe7ee 100644 --- a/tools/rostest/CHANGELOG.rst +++ b/tools/rostest/CHANGELOG.rst @@ -2,6 +2,9 @@ Changelog for package rostest ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Forthcoming +----------- + 1.12.11 (2017-11-07) -------------------- diff --git a/tools/rostopic/CHANGELOG.rst b/tools/rostopic/CHANGELOG.rst index 9ae8ee78f9..91bb2c830c 100644 --- a/tools/rostopic/CHANGELOG.rst +++ b/tools/rostopic/CHANGELOG.rst @@ -2,6 +2,9 @@ Changelog for package rostopic ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Forthcoming +----------- + 1.12.11 (2017-11-07) -------------------- diff --git a/tools/topic_tools/CHANGELOG.rst b/tools/topic_tools/CHANGELOG.rst index f32eaee7d9..3490fc6745 100644 --- a/tools/topic_tools/CHANGELOG.rst +++ b/tools/topic_tools/CHANGELOG.rst @@ -2,6 +2,9 @@ Changelog for package topic_tools ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Forthcoming +----------- + 1.12.11 (2017-11-07) -------------------- diff --git a/utilities/message_filters/CHANGELOG.rst b/utilities/message_filters/CHANGELOG.rst index 9d442f522f..d192012410 100644 --- a/utilities/message_filters/CHANGELOG.rst +++ b/utilities/message_filters/CHANGELOG.rst @@ -2,6 +2,9 @@ Changelog for package message_filters ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Forthcoming +----------- + 1.12.11 (2017-11-07) -------------------- diff --git a/utilities/roslz4/CHANGELOG.rst b/utilities/roslz4/CHANGELOG.rst index db69bc1fe4..0d59739f7d 100644 --- a/utilities/roslz4/CHANGELOG.rst +++ b/utilities/roslz4/CHANGELOG.rst @@ -2,6 +2,9 @@ Changelog for package roslz4 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Forthcoming +----------- + 1.12.11 (2017-11-07) -------------------- * revert replace deprecated lz4 function call (`#1220 `_, regression from 1.12.8 on Debian Jessie) diff --git a/utilities/roswtf/CHANGELOG.rst b/utilities/roswtf/CHANGELOG.rst index c456daf6f1..1f984a303d 100644 --- a/utilities/roswtf/CHANGELOG.rst +++ b/utilities/roswtf/CHANGELOG.rst @@ -2,6 +2,9 @@ Changelog for package roswtf ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Forthcoming +----------- + 1.12.11 (2017-11-07) -------------------- diff --git a/utilities/xmlrpcpp/CHANGELOG.rst b/utilities/xmlrpcpp/CHANGELOG.rst index d7e7fba95d..633cac146f 100644 --- a/utilities/xmlrpcpp/CHANGELOG.rst +++ b/utilities/xmlrpcpp/CHANGELOG.rst @@ -2,6 +2,9 @@ Changelog for package xmlrpcpp ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Forthcoming +----------- + 1.12.11 (2017-11-07) -------------------- From ab76f3411e670ff2c80ec182ec84a1bb06375e25 Mon Sep 17 00:00:00 2001 From: Dirk Thomas Date: Thu, 16 Nov 2017 15:19:46 -0800 Subject: [PATCH 71/72] 1.12.12 --- clients/roscpp/CHANGELOG.rst | 4 ++-- clients/roscpp/package.xml | 2 +- clients/rospy/CHANGELOG.rst | 4 ++-- clients/rospy/package.xml | 2 +- ros_comm/CHANGELOG.rst | 4 ++-- ros_comm/package.xml | 2 +- test/test_rosbag/package.xml | 2 +- test/test_rosbag_storage/package.xml | 2 +- test/test_roscpp/package.xml | 2 +- test/test_rosgraph/package.xml | 2 +- test/test_roslaunch/package.xml | 2 +- test/test_roslib_comm/package.xml | 2 +- test/test_rosmaster/package.xml | 2 +- test/test_rosparam/package.xml | 2 +- test/test_rospy/package.xml | 2 +- test/test_rosservice/package.xml | 2 +- test/test_rostopic/package.xml | 2 +- tools/rosbag/CHANGELOG.rst | 4 ++-- tools/rosbag/package.xml | 2 +- tools/rosbag_storage/CHANGELOG.rst | 4 ++-- tools/rosbag_storage/package.xml | 2 +- tools/rosconsole/CHANGELOG.rst | 4 ++-- tools/rosconsole/package.xml | 2 +- tools/rosgraph/CHANGELOG.rst | 4 ++-- tools/rosgraph/package.xml | 2 +- tools/roslaunch/CHANGELOG.rst | 4 ++-- tools/roslaunch/package.xml | 2 +- tools/rosmaster/CHANGELOG.rst | 4 ++-- tools/rosmaster/package.xml | 2 +- tools/rosmsg/CHANGELOG.rst | 4 ++-- tools/rosmsg/package.xml | 2 +- tools/rosnode/CHANGELOG.rst | 4 ++-- tools/rosnode/package.xml | 2 +- tools/rosout/CHANGELOG.rst | 4 ++-- tools/rosout/package.xml | 2 +- tools/rosparam/CHANGELOG.rst | 4 ++-- tools/rosparam/package.xml | 2 +- tools/rosservice/CHANGELOG.rst | 4 ++-- tools/rosservice/package.xml | 2 +- tools/rostest/CHANGELOG.rst | 4 ++-- tools/rostest/package.xml | 2 +- tools/rostopic/CHANGELOG.rst | 4 ++-- tools/rostopic/package.xml | 2 +- tools/topic_tools/CHANGELOG.rst | 4 ++-- tools/topic_tools/package.xml | 2 +- utilities/message_filters/CHANGELOG.rst | 4 ++-- utilities/message_filters/package.xml | 2 +- utilities/roslz4/CHANGELOG.rst | 4 ++-- utilities/roslz4/package.xml | 2 +- utilities/roswtf/CHANGELOG.rst | 4 ++-- utilities/roswtf/package.xml | 2 +- utilities/xmlrpcpp/CHANGELOG.rst | 4 ++-- utilities/xmlrpcpp/package.xml | 2 +- 53 files changed, 74 insertions(+), 74 deletions(-) diff --git a/clients/roscpp/CHANGELOG.rst b/clients/roscpp/CHANGELOG.rst index 4d1573715c..95dc6d2469 100644 --- a/clients/roscpp/CHANGELOG.rst +++ b/clients/roscpp/CHANGELOG.rst @@ -2,8 +2,8 @@ Changelog for package roscpp ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -Forthcoming ------------ +1.12.12 (2017-11-16) +-------------------- 1.12.11 (2017-11-07) -------------------- diff --git a/clients/roscpp/package.xml b/clients/roscpp/package.xml index 2749436507..0d7fe58702 100644 --- a/clients/roscpp/package.xml +++ b/clients/roscpp/package.xml @@ -1,6 +1,6 @@ roscpp - 1.12.11 + 1.12.12 roscpp is a C++ implementation of ROS. It provides a client diff --git a/clients/rospy/CHANGELOG.rst b/clients/rospy/CHANGELOG.rst index 2b54df6149..6f5b03f3f6 100644 --- a/clients/rospy/CHANGELOG.rst +++ b/clients/rospy/CHANGELOG.rst @@ -2,8 +2,8 @@ Changelog for package rospy ^^^^^^^^^^^^^^^^^^^^^^^^^^^ -Forthcoming ------------ +1.12.12 (2017-11-16) +-------------------- 1.12.11 (2017-11-07) -------------------- diff --git a/clients/rospy/package.xml b/clients/rospy/package.xml index c1ddcbd212..80604590bb 100644 --- a/clients/rospy/package.xml +++ b/clients/rospy/package.xml @@ -1,6 +1,6 @@ rospy - 1.12.11 + 1.12.12 rospy is a pure Python client library for ROS. The rospy client API enables Python programmers to quickly interface with ROS ros_comm - 1.12.11 + 1.12.12 ROS communications-related packages, including core client libraries (roscpp, rospy) and graph introspection tools (rostopic, rosnode, rosservice, rosparam). diff --git a/test/test_rosbag/package.xml b/test/test_rosbag/package.xml index 0d86cc6e0c..1f0c52883c 100644 --- a/test/test_rosbag/package.xml +++ b/test/test_rosbag/package.xml @@ -1,6 +1,6 @@ test_rosbag - 1.12.11 + 1.12.12 A package containing the unit tests for rosbag. diff --git a/test/test_rosbag_storage/package.xml b/test/test_rosbag_storage/package.xml index 3aec6534e8..7d55bbbcd1 100644 --- a/test/test_rosbag_storage/package.xml +++ b/test/test_rosbag_storage/package.xml @@ -1,6 +1,6 @@ test_rosbag_storage - 1.12.11 + 1.12.12 A package containing the unit tests for rosbag_storage. diff --git a/test/test_roscpp/package.xml b/test/test_roscpp/package.xml index 73173bcdff..0237a946de 100644 --- a/test/test_roscpp/package.xml +++ b/test/test_roscpp/package.xml @@ -1,6 +1,6 @@ test_roscpp - 1.12.11 + 1.12.12 Tests for roscpp which depend on rostest. diff --git a/test/test_rosgraph/package.xml b/test/test_rosgraph/package.xml index 7ea060ae5f..6f568db690 100644 --- a/test/test_rosgraph/package.xml +++ b/test/test_rosgraph/package.xml @@ -1,6 +1,6 @@ test_rosgraph - 1.12.11 + 1.12.12 Tests for rosgraph which depend on rostest. diff --git a/test/test_roslaunch/package.xml b/test/test_roslaunch/package.xml index bf199d18d7..1189540053 100644 --- a/test/test_roslaunch/package.xml +++ b/test/test_roslaunch/package.xml @@ -1,6 +1,6 @@ test_roslaunch - 1.12.11 + 1.12.12 Tests for roslaunch which depend on rostest. diff --git a/test/test_roslib_comm/package.xml b/test/test_roslib_comm/package.xml index 09d0f0b2d3..c8adf9d97c 100644 --- a/test/test_roslib_comm/package.xml +++ b/test/test_roslib_comm/package.xml @@ -1,6 +1,6 @@ test_roslib_comm - 1.12.11 + 1.12.12 Unit tests verifying that roslib is operating as expected. diff --git a/test/test_rosmaster/package.xml b/test/test_rosmaster/package.xml index 3fc5b0c9b8..cbdfefeef5 100644 --- a/test/test_rosmaster/package.xml +++ b/test/test_rosmaster/package.xml @@ -1,6 +1,6 @@ test_rosmaster - 1.12.11 + 1.12.12 Tests for rosmaster which depend on rostest. diff --git a/test/test_rosparam/package.xml b/test/test_rosparam/package.xml index d2ca5a8b58..57fef758f5 100644 --- a/test/test_rosparam/package.xml +++ b/test/test_rosparam/package.xml @@ -1,6 +1,6 @@ test_rosparam - 1.12.11 + 1.12.12 A package containing the unit tests for rosparam. diff --git a/test/test_rospy/package.xml b/test/test_rospy/package.xml index 81f8e9b000..4de12098a5 100644 --- a/test/test_rospy/package.xml +++ b/test/test_rospy/package.xml @@ -1,6 +1,6 @@ test_rospy - 1.12.11 + 1.12.12 rospy unit and integration test framework. diff --git a/test/test_rosservice/package.xml b/test/test_rosservice/package.xml index 6c424eb75d..67942aa579 100644 --- a/test/test_rosservice/package.xml +++ b/test/test_rosservice/package.xml @@ -1,6 +1,6 @@ test_rosservice - 1.12.11 + 1.12.12 Tests for the rosservice tool. diff --git a/test/test_rostopic/package.xml b/test/test_rostopic/package.xml index 1d6899b226..50dd116123 100644 --- a/test/test_rostopic/package.xml +++ b/test/test_rostopic/package.xml @@ -1,6 +1,6 @@ test_rostopic - 1.12.11 + 1.12.12 Tests for rostopic. diff --git a/tools/rosbag/CHANGELOG.rst b/tools/rosbag/CHANGELOG.rst index 0239dfb7d3..649879a263 100644 --- a/tools/rosbag/CHANGELOG.rst +++ b/tools/rosbag/CHANGELOG.rst @@ -2,8 +2,8 @@ Changelog for package rosbag ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -Forthcoming ------------ +1.12.12 (2017-11-16) +-------------------- 1.12.11 (2017-11-07) -------------------- diff --git a/tools/rosbag/package.xml b/tools/rosbag/package.xml index 5ceb775f05..534cec7937 100644 --- a/tools/rosbag/package.xml +++ b/tools/rosbag/package.xml @@ -1,6 +1,6 @@ rosbag - 1.12.11 + 1.12.12 This is a set of tools for recording from and playing back to ROS topics. It is intended to be high performance and avoids diff --git a/tools/rosbag_storage/CHANGELOG.rst b/tools/rosbag_storage/CHANGELOG.rst index 0ecaf3f76d..572b35ae2f 100644 --- a/tools/rosbag_storage/CHANGELOG.rst +++ b/tools/rosbag_storage/CHANGELOG.rst @@ -2,8 +2,8 @@ Changelog for package rosbag_storage ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -Forthcoming ------------ +1.12.12 (2017-11-16) +-------------------- * backward compatibility with libconsole-bridge in Jessie (take 3) (`#1235 `_) 1.12.11 (2017-11-07) diff --git a/tools/rosbag_storage/package.xml b/tools/rosbag_storage/package.xml index d3f928fa0c..f4715cf92a 100644 --- a/tools/rosbag_storage/package.xml +++ b/tools/rosbag_storage/package.xml @@ -1,6 +1,6 @@ rosbag_storage - 1.12.11 + 1.12.12 This is a set of tools for recording from and playing back ROS message without relying on the ROS client library. diff --git a/tools/rosconsole/CHANGELOG.rst b/tools/rosconsole/CHANGELOG.rst index bde87204ad..2352409547 100644 --- a/tools/rosconsole/CHANGELOG.rst +++ b/tools/rosconsole/CHANGELOG.rst @@ -2,8 +2,8 @@ Changelog for package rosconsole ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -Forthcoming ------------ +1.12.12 (2017-11-16) +-------------------- 1.12.11 (2017-11-07) -------------------- diff --git a/tools/rosconsole/package.xml b/tools/rosconsole/package.xml index c2efc09305..b4c1ec157c 100644 --- a/tools/rosconsole/package.xml +++ b/tools/rosconsole/package.xml @@ -1,6 +1,6 @@ rosconsole - 1.12.11 + 1.12.12 ROS console output library. Dirk Thomas BSD diff --git a/tools/rosgraph/CHANGELOG.rst b/tools/rosgraph/CHANGELOG.rst index cd8f0e1633..acdf66ba45 100644 --- a/tools/rosgraph/CHANGELOG.rst +++ b/tools/rosgraph/CHANGELOG.rst @@ -2,8 +2,8 @@ Changelog for package rosgraph ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -Forthcoming ------------ +1.12.12 (2017-11-16) +-------------------- 1.12.11 (2017-11-07) -------------------- diff --git a/tools/rosgraph/package.xml b/tools/rosgraph/package.xml index 3e3d5226a5..51aac65f23 100644 --- a/tools/rosgraph/package.xml +++ b/tools/rosgraph/package.xml @@ -1,6 +1,6 @@ rosgraph - 1.12.11 + 1.12.12 rosgraph contains the rosgraph command-line tool, which prints information about the ROS Computation Graph. It also provides an diff --git a/tools/roslaunch/CHANGELOG.rst b/tools/roslaunch/CHANGELOG.rst index d1e040c7bd..f1c79f9b28 100644 --- a/tools/roslaunch/CHANGELOG.rst +++ b/tools/roslaunch/CHANGELOG.rst @@ -2,8 +2,8 @@ Changelog for package roslaunch ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -Forthcoming ------------ +1.12.12 (2017-11-16) +-------------------- 1.12.11 (2017-11-07) -------------------- diff --git a/tools/roslaunch/package.xml b/tools/roslaunch/package.xml index 4f9ca362e6..12197dcbb6 100644 --- a/tools/roslaunch/package.xml +++ b/tools/roslaunch/package.xml @@ -1,6 +1,6 @@ roslaunch - 1.12.11 + 1.12.12 roslaunch is a tool for easily launching multiple ROS nodes locally and remotely diff --git a/tools/rosmaster/CHANGELOG.rst b/tools/rosmaster/CHANGELOG.rst index acd7a6d92d..ef9446edd3 100644 --- a/tools/rosmaster/CHANGELOG.rst +++ b/tools/rosmaster/CHANGELOG.rst @@ -2,8 +2,8 @@ Changelog for package rosmaster ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -Forthcoming ------------ +1.12.12 (2017-11-16) +-------------------- 1.12.11 (2017-11-07) -------------------- diff --git a/tools/rosmaster/package.xml b/tools/rosmaster/package.xml index 91484b3e48..8f5203771e 100644 --- a/tools/rosmaster/package.xml +++ b/tools/rosmaster/package.xml @@ -1,6 +1,6 @@ rosmaster - 1.12.11 + 1.12.12 ROS Master implementation. diff --git a/tools/rosmsg/CHANGELOG.rst b/tools/rosmsg/CHANGELOG.rst index ba0f5ae23d..3a3b2cb314 100644 --- a/tools/rosmsg/CHANGELOG.rst +++ b/tools/rosmsg/CHANGELOG.rst @@ -2,8 +2,8 @@ Changelog for package rosmsg ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -Forthcoming ------------ +1.12.12 (2017-11-16) +-------------------- 1.12.11 (2017-11-07) -------------------- diff --git a/tools/rosmsg/package.xml b/tools/rosmsg/package.xml index 6f174dd9c0..3d9d136b78 100644 --- a/tools/rosmsg/package.xml +++ b/tools/rosmsg/package.xml @@ -1,6 +1,6 @@ rosmsg - 1.12.11 + 1.12.12 rosmsg contains two command-line tools: rosmsg and rossrv. rosmsg is a command-line tool for diff --git a/tools/rosnode/CHANGELOG.rst b/tools/rosnode/CHANGELOG.rst index 4f63cd4803..aeadd6d543 100644 --- a/tools/rosnode/CHANGELOG.rst +++ b/tools/rosnode/CHANGELOG.rst @@ -2,8 +2,8 @@ Changelog for package rosnode ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -Forthcoming ------------ +1.12.12 (2017-11-16) +-------------------- 1.12.11 (2017-11-07) -------------------- diff --git a/tools/rosnode/package.xml b/tools/rosnode/package.xml index f9a9d3988e..cc172d85e3 100644 --- a/tools/rosnode/package.xml +++ b/tools/rosnode/package.xml @@ -1,6 +1,6 @@ rosnode - 1.12.11 + 1.12.12 rosnode is a command-line tool for displaying debug information about ROS Nodes, diff --git a/tools/rosout/CHANGELOG.rst b/tools/rosout/CHANGELOG.rst index 559bc68b17..38f68e33aa 100644 --- a/tools/rosout/CHANGELOG.rst +++ b/tools/rosout/CHANGELOG.rst @@ -2,8 +2,8 @@ Changelog for package rosout ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -Forthcoming ------------ +1.12.12 (2017-11-16) +-------------------- 1.12.11 (2017-11-07) -------------------- diff --git a/tools/rosout/package.xml b/tools/rosout/package.xml index eb18075f41..16b13435aa 100644 --- a/tools/rosout/package.xml +++ b/tools/rosout/package.xml @@ -1,6 +1,6 @@ rosout - 1.12.11 + 1.12.12 System-wide logging mechanism for messages sent to the /rosout topic. diff --git a/tools/rosparam/CHANGELOG.rst b/tools/rosparam/CHANGELOG.rst index 2643dcb385..27f3ea3ea5 100644 --- a/tools/rosparam/CHANGELOG.rst +++ b/tools/rosparam/CHANGELOG.rst @@ -2,8 +2,8 @@ Changelog for package rosparam ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -Forthcoming ------------ +1.12.12 (2017-11-16) +-------------------- 1.12.11 (2017-11-07) -------------------- diff --git a/tools/rosparam/package.xml b/tools/rosparam/package.xml index 974211e8a3..00ce67cfbf 100644 --- a/tools/rosparam/package.xml +++ b/tools/rosparam/package.xml @@ -1,6 +1,6 @@ rosparam - 1.12.11 + 1.12.12 rosparam contains the rosparam command-line tool for getting and setting ROS Parameters on the rosservice - 1.12.11 + 1.12.12 rosservice contains the rosservice command-line tool for listing and querying ROS rostest - 1.12.11 + 1.12.12 Integration test suite based on roslaunch that is compatible with xUnit frameworks. diff --git a/tools/rostopic/CHANGELOG.rst b/tools/rostopic/CHANGELOG.rst index 91bb2c830c..2def9c3aaa 100644 --- a/tools/rostopic/CHANGELOG.rst +++ b/tools/rostopic/CHANGELOG.rst @@ -2,8 +2,8 @@ Changelog for package rostopic ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -Forthcoming ------------ +1.12.12 (2017-11-16) +-------------------- 1.12.11 (2017-11-07) -------------------- diff --git a/tools/rostopic/package.xml b/tools/rostopic/package.xml index 05d14dc0d7..73150461d1 100644 --- a/tools/rostopic/package.xml +++ b/tools/rostopic/package.xml @@ -1,6 +1,6 @@ rostopic - 1.12.11 + 1.12.12 rostopic contains the rostopic command-line tool for displaying debug information about diff --git a/tools/topic_tools/CHANGELOG.rst b/tools/topic_tools/CHANGELOG.rst index 3490fc6745..8e42e23869 100644 --- a/tools/topic_tools/CHANGELOG.rst +++ b/tools/topic_tools/CHANGELOG.rst @@ -2,8 +2,8 @@ Changelog for package topic_tools ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -Forthcoming ------------ +1.12.12 (2017-11-16) +-------------------- 1.12.11 (2017-11-07) -------------------- diff --git a/tools/topic_tools/package.xml b/tools/topic_tools/package.xml index 2e59eac8c8..91eb4b3182 100644 --- a/tools/topic_tools/package.xml +++ b/tools/topic_tools/package.xml @@ -1,6 +1,6 @@ topic_tools - 1.12.11 + 1.12.12 Tools for directing, throttling, selecting, and otherwise messing with ROS topics at a meta level. None of the programs in this package actually diff --git a/utilities/message_filters/CHANGELOG.rst b/utilities/message_filters/CHANGELOG.rst index d192012410..96379772f6 100644 --- a/utilities/message_filters/CHANGELOG.rst +++ b/utilities/message_filters/CHANGELOG.rst @@ -2,8 +2,8 @@ Changelog for package message_filters ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -Forthcoming ------------ +1.12.12 (2017-11-16) +-------------------- 1.12.11 (2017-11-07) -------------------- diff --git a/utilities/message_filters/package.xml b/utilities/message_filters/package.xml index 7ae143ed94..23a986b0dd 100644 --- a/utilities/message_filters/package.xml +++ b/utilities/message_filters/package.xml @@ -1,6 +1,6 @@ message_filters - 1.12.11 + 1.12.12 A set of message filters which take in messages and may output those messages at a later time, based on the conditions that filter needs met. diff --git a/utilities/roslz4/CHANGELOG.rst b/utilities/roslz4/CHANGELOG.rst index 0d59739f7d..58fbe496d5 100644 --- a/utilities/roslz4/CHANGELOG.rst +++ b/utilities/roslz4/CHANGELOG.rst @@ -2,8 +2,8 @@ Changelog for package roslz4 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -Forthcoming ------------ +1.12.12 (2017-11-16) +-------------------- 1.12.11 (2017-11-07) -------------------- diff --git a/utilities/roslz4/package.xml b/utilities/roslz4/package.xml index 990a35d1da..80e5fa6cdd 100644 --- a/utilities/roslz4/package.xml +++ b/utilities/roslz4/package.xml @@ -1,7 +1,7 @@ roslz4 - 1.12.11 + 1.12.12 A Python and C++ implementation of the LZ4 streaming format. Large data streams are split into blocks which are compressed using the very fast LZ4 diff --git a/utilities/roswtf/CHANGELOG.rst b/utilities/roswtf/CHANGELOG.rst index 1f984a303d..53466e6bf4 100644 --- a/utilities/roswtf/CHANGELOG.rst +++ b/utilities/roswtf/CHANGELOG.rst @@ -2,8 +2,8 @@ Changelog for package roswtf ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -Forthcoming ------------ +1.12.12 (2017-11-16) +-------------------- 1.12.11 (2017-11-07) -------------------- diff --git a/utilities/roswtf/package.xml b/utilities/roswtf/package.xml index 139d6b297f..c9532fccef 100644 --- a/utilities/roswtf/package.xml +++ b/utilities/roswtf/package.xml @@ -1,6 +1,6 @@ roswtf - 1.12.11 + 1.12.12 roswtf is a tool for diagnosing issues with a running ROS system. Think of it as a FAQ implemented in code. diff --git a/utilities/xmlrpcpp/CHANGELOG.rst b/utilities/xmlrpcpp/CHANGELOG.rst index 633cac146f..052c3c6d1c 100644 --- a/utilities/xmlrpcpp/CHANGELOG.rst +++ b/utilities/xmlrpcpp/CHANGELOG.rst @@ -2,8 +2,8 @@ Changelog for package xmlrpcpp ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -Forthcoming ------------ +1.12.12 (2017-11-16) +-------------------- 1.12.11 (2017-11-07) -------------------- diff --git a/utilities/xmlrpcpp/package.xml b/utilities/xmlrpcpp/package.xml index be566c78b8..160f0e35e8 100644 --- a/utilities/xmlrpcpp/package.xml +++ b/utilities/xmlrpcpp/package.xml @@ -1,6 +1,6 @@ xmlrpcpp - 1.12.11 + 1.12.12 XmlRpc++ is a C++ implementation of the XML-RPC protocol. This version is heavily modified from the package available on SourceForge in order to From 078481c0c113ae8c1c01947e2425e4f8a0ec62d0 Mon Sep 17 00:00:00 2001 From: Mikael Arguedas Date: Tue, 19 Dec 2017 10:24:54 +0100 Subject: [PATCH 72/72] place console_bridge macros definition in header and use it everywhere console_bridge is included (#1238) --- tools/rosbag_storage/include/rosbag/bag.h | 19 +----- .../rosbag/console_bridge_compatibility.h | 62 +++++++++++++++++++ tools/rosbag_storage/src/bag.cpp | 3 + tools/rosbag_storage/src/bz2_stream.cpp | 6 +- tools/rosbag_storage/src/lz4_stream.cpp | 6 +- 5 files changed, 77 insertions(+), 19 deletions(-) create mode 100644 tools/rosbag_storage/include/rosbag/console_bridge_compatibility.h diff --git a/tools/rosbag_storage/include/rosbag/bag.h b/tools/rosbag_storage/include/rosbag/bag.h index 0e4eb0e580..8635cc1ce8 100644 --- a/tools/rosbag_storage/include/rosbag/bag.h +++ b/tools/rosbag_storage/include/rosbag/bag.h @@ -61,24 +61,9 @@ #include #include "console_bridge/console.h" -// Remove this when no longer supporting platforms with libconsole-bridge-dev < 0.3.0, +// Remove this include when no longer supporting platforms with libconsole-bridge-dev < 0.3.0, // in particular Debian Jessie: https://packages.debian.org/jessie/libconsole-bridge-dev -#ifndef CONSOLE_BRIDGE_logDebug -# define CONSOLE_BRIDGE_logDebug(fmt, ...) \ - console_bridge::log(__FILE__, __LINE__, console_bridge::CONSOLE_BRIDGE_LOG_DEBUG, fmt, ##__VA_ARGS__) -#endif -#ifndef CONSOLE_BRIDGE_logInform -# define CONSOLE_BRIDGE_logInform(fmt, ...) \ - console_bridge::log(__FILE__, __LINE__, console_bridge::CONSOLE_BRIDGE_LOG_INFO, fmt, ##__VA_ARGS__) -#endif -#ifndef CONSOLE_BRIDGE_logWarn -# define CONSOLE_BRIDGE_logWarn(fmt, ...) \ - console_bridge::log(__FILE__, __LINE__, console_bridge::CONSOLE_BRIDGE_LOG_WARN, fmt, ##__VA_ARGS__) -#endif -#ifndef CONSOLE_BRIDGE_logError -# define CONSOLE_BRIDGE_logError(fmt, ...) \ - console_bridge::log(__FILE__, __LINE__, console_bridge::CONSOLE_BRIDGE_LOG_ERROR, fmt, ##__VA_ARGS__) -#endif +#include "rosbag/console_bridge_compatibility.h" namespace rosbag { diff --git a/tools/rosbag_storage/include/rosbag/console_bridge_compatibility.h b/tools/rosbag_storage/include/rosbag/console_bridge_compatibility.h new file mode 100644 index 0000000000..558ef6a6ae --- /dev/null +++ b/tools/rosbag_storage/include/rosbag/console_bridge_compatibility.h @@ -0,0 +1,62 @@ +/* + * Copyright (c) 2017, Open Source Robotics Foundation, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of the Open Source Robotics Foundation, Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef ROSBAG__CONSOLE_BRIDGE_COMPATIBILITY_H_ +#define ROSBAG__CONSOLE_BRIDGE_COMPATIBILITY_H_ + +#include + +// Remove this file and it's inclusions when no longer supporting platforms with +// libconsole-bridge-dev < 0.3.0, +// in particular Debian Jessie: https://packages.debian.org/jessie/libconsole-bridge-dev +#ifndef CONSOLE_BRIDGE_logError +# define CONSOLE_BRIDGE_logError(fmt, ...) \ + console_bridge::log( \ + __FILE__, __LINE__, console_bridge::CONSOLE_BRIDGE_LOG_ERROR, fmt, ##__VA_ARGS__) +#endif + +#ifndef CONSOLE_BRIDGE_logWarn +# define CONSOLE_BRIDGE_logWarn(fmt, ...) \ + console_bridge::log( \ + __FILE__, __LINE__, console_bridge::CONSOLE_BRIDGE_LOG_WARN, fmt, ##__VA_ARGS__) +#endif + +#ifndef CONSOLE_BRIDGE_logInform +# define CONSOLE_BRIDGE_logInform(fmt, ...) \ + console_bridge::log( \ + __FILE__, __LINE__, console_bridge::CONSOLE_BRIDGE_LOG_INFO, fmt, ##__VA_ARGS__) +#endif + +#ifndef CONSOLE_BRIDGE_logDebug +# define CONSOLE_BRIDGE_logDebug(fmt, ...) \ + console_bridge::log( \ + __FILE__, __LINE__, console_bridge::CONSOLE_BRIDGE_LOG_DEBUG, fmt, ##__VA_ARGS__) +#endif + +#endif // ROSBAG__CONSOLE_BRIDGE_COMPATIBILITY_H_ diff --git a/tools/rosbag_storage/src/bag.cpp b/tools/rosbag_storage/src/bag.cpp index b030852cfe..19772f4706 100644 --- a/tools/rosbag_storage/src/bag.cpp +++ b/tools/rosbag_storage/src/bag.cpp @@ -42,6 +42,9 @@ #include #include "console_bridge/console.h" +// Remove this include when no longer supporting platforms with libconsole-bridge-dev < 0.3.0, +// in particular Debian Jessie: https://packages.debian.org/jessie/libconsole-bridge-dev +#include "rosbag/console_bridge_compatibility.h" #define foreach BOOST_FOREACH diff --git a/tools/rosbag_storage/src/bz2_stream.cpp b/tools/rosbag_storage/src/bz2_stream.cpp index 78e175381e..f722c80331 100644 --- a/tools/rosbag_storage/src/bz2_stream.cpp +++ b/tools/rosbag_storage/src/bz2_stream.cpp @@ -38,6 +38,10 @@ #include #include "console_bridge/console.h" +// Remove this include when no longer supporting platforms with libconsole-bridge-dev < 0.3.0, +// in particular Debian Jessie: https://packages.debian.org/jessie/libconsole-bridge-dev +#include "rosbag/console_bridge_compatibility.h" + using std::string; namespace rosbag { @@ -127,7 +131,7 @@ void BZ2Stream::read(void* ptr, size_t size) { case BZ_OK: return; case BZ_STREAM_END: if (getUnused() || getUnusedLength() > 0) - logError("unused data already available"); + CONSOLE_BRIDGE_logError("unused data already available"); else { char* unused; int nUnused; diff --git a/tools/rosbag_storage/src/lz4_stream.cpp b/tools/rosbag_storage/src/lz4_stream.cpp index 297bcf7b33..ec4a940c85 100644 --- a/tools/rosbag_storage/src/lz4_stream.cpp +++ b/tools/rosbag_storage/src/lz4_stream.cpp @@ -38,6 +38,10 @@ #include #include "console_bridge/console.h" +// Remove this include when no longer supporting platforms with libconsole-bridge-dev < 0.3.0, +// in particular Debian Jessie: https://packages.debian.org/jessie/libconsole-bridge-dev +#include "rosbag/console_bridge_compatibility.h" + using std::string; namespace rosbag { @@ -176,7 +180,7 @@ void LZ4Stream::read(void* ptr, size_t size) { case ROSLZ4_OK: break; case ROSLZ4_STREAM_END: if (getUnused() || getUnusedLength() > 0) - logError("unused data already available"); + CONSOLE_BRIDGE_logError("unused data already available"); else { setUnused(lz4s_.input_next); setUnusedLength(lz4s_.input_left);