Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Patch for missing exception handling when using netifaces in rosgraph/network.py #211

Closed
wants to merge 3 commits into from
Closed

Conversation

francoisferland
Copy link

We encountered a small bug when using the current ros_comm version in groovy. When netifaces.ifaddresses(...) is used on one of our CAN bus network interfaces, it throws an unhandled exception. This might actually be the driver's fault, but we cannot do anything about it right now.

This occurred when roscore was launched, and it meant we couldn't launch anything on our robot. I tracked the source of the problem to a recent addition in rosgraph/network.py, and I simply added some exception handling/ignoring. Similar exception handling was done with netifaces in a different condition a few lines ahead of that addition. Unfortunately, I cannot test the change with many different configurations.

fferland and others added 2 commits April 8, 2013 17:30
…dresses for some interfaces resulted in an unhandled exception and crashed roscore at startup.
@dirk-thomas
Copy link
Member

The patch looks bogus as it iterates twice over "ifaces":

  • once in the outer for loop
  • once in the list comprehension

@francoisferland
Copy link
Author

You're right ... I admit I wrote it pretty fast, and I'm not that well versed in Python list comprehensions. I will look into it further.

@francoisferland
Copy link
Author

This should be better.

@dirk-thomas
Copy link
Member

You mentioned that the same exception is also handled "above". Do you mean the this line: https://github.com/ros/ros_comm/blob/groovy-devel/tools/rosgraph/src/rosgraph/network.py#L207
It is catching a KeyError while your patch catches a ValueError. Can you please describe which function raised what exception in your case?

@francoisferland
Copy link
Author

Yes, that's where I saw it. This condition doesn't seem to get run however, since _use_netifaces is forced to False (see line 73 and 84). But the _is_unix_like_platform() case ignores it and use netifaces anyway.

The problematic call is on netifaces.ifaddresses(). In our case, it throws a ValueError exception with message "You must specify a valid interface name". Our interface name is correctly enumerated in netifaces.interfaces() and it's a valid network interface, just not from ifaddresses() point of view. I guess the KeyError catch at line 207 is there to avoid cases where the 'addr' field isn't present in ifaddresses() output, but it wouldn't catch the same error.

I've looked for similar (not related to ROS) cases, and I found this old, still active bug report: https://bugs.launchpad.net/ubuntu/+source/netifaces/+bug/753009. This is pretty much the same problem we have, but it looks like it might take a while before it gets patched.

dirk-thomas added a commit that referenced this pull request Apr 9, 2013
@dirk-thomas
Copy link
Member

Thanks for providing the patch.
I have created an updated pull request (#213) based on your feedback which cleans up some legacy code and makes the exception handling a bit more explicit. I will mark this pull request as closed in favor of #213.

@dirk-thomas dirk-thomas closed this Apr 9, 2013
@jspricke
Copy link
Member

I've had the same problem on Ubuntu 12.04 and fixed it by installing python-netifaces from Ubuntu 12.10.

PierrickKoch pushed a commit to PierrickKoch/robotpkg that referenced this pull request Feb 21, 2014
Changes since 1.8.15:

1.9.46 (2013-06-18)
-------------------

* add dependency on roslisp
  (`#240 <https://github.com/ros/ros_comm/issues/240>`_)
* fix crash in bag migration
  (`#239 <https://github.com/ros/ros_comm/issues/239>`_)
* add CMake function roslaunch_add_file_check()
  (`#241 <https://github.com/ros/ros_comm/issues/241>`_)
* fix rosnode_ping to check if new node uri is valid before using it
  (`#235 <https://github.com/ros/ros_comm/issues/235>`_)

1.9.45 (2013-06-06)
-------------------
* improve handling of UDP transport, when fragmented packets are lost or arive
  out-of-order the connection is not dropped anymore, onle a single message is
  lost (`#226 <https://github.com/ros/ros_comm/issues/226>`_)
* fix missing generation of constant definitions for services
  (`ros/gencpp#2 <https://github.com/ros/gencpp/issues/2>`_)
* fix restoring thread context when callback throws an exception
  (`#219 <https://github.com/ros/ros_comm/issues/219>`_)
* fix calling PollManager::shutdown() repeatedly
  (`#217 <https://github.com/ros/ros_comm/issues/217>`_)
* add missing run_depend on python-yaml
* allow configuration of ports for XML RPCs and TCP ROS
* fix race condition where rospy subscribers do not connect to all publisher
* fix closing and deregistering connection when connect fails
  (`#128 <https://github.com/ros/ros_comm/issues/128>`_)
* fix log level of RosOutHandler
  (`#210 <https://github.com/ros/ros_comm/issues/210>`_)
* added option '--duration' to 'rosbag play'
  (`#121 <https://github.com/ros/ros_comm/issues/121>`_)
* fix missing newlines in rosbag error messages
  (`#237 <https://github.com/ros/ros_comm/issues/237>`_)
* fix flushing for tools like 'rosbag compress'
  (`#237 <https://github.com/ros/ros_comm/issues/237>`_)
* add warnings for obviously wrong environment variables ROS_HOSTNAME and
  ROS_IP (`#134 <https://github.com/ros/ros_comm/issues/134>`_)
* fix exception on netifaces.ifaddresses()
  (`#211 <https://github.com/ros/ros_comm/issues/211>`_,
  `#213 <https://github.com/ros/ros_comm/issues/213>`_)
  (regression from 1.9.42)
* modify rosnode_ping to check for changed node uri if connection is refused
  (`#221 <https://github.com/ros/ros_comm/issues/221>`_)
* allow passing arguments to add_rostest(ARGS ...)
 (`#232 <https://github.com/ros/ros_comm/issues/232>`_)
* modified roslaunch $(find PKG) to consider path behind it for resolve
  strategy (`#233 <https://github.com/ros/ros_comm/pull/233>`_)
* add boolean attribute 'subst_value' to rosparam tag in launch files
  (`#218 <https://github.com/ros/ros_comm/issues/218>`_)
* add command line parameter to print out launch args
* fix missing import in arg_dump.py
* fix template syntax for signal_.template addCallback() to work with Intel
  compiler

1.9.44 (2013-03-21)
-------------------
* fix install destination for dll's under Windows
* fix various issues on Windows
  (`#189 <https://github.com/ros/ros_comm/issues/189>`_)
* fix 'roslaunch --files' with non-unique anononymous ids
  (`#186 <https://github.com/ros/ros_comm/issues/186>`_)
* fix ROS_MASTER_URI for Windows

1.9.43 (2013-03-13)
-------------------
* implement process killer for Windows
* fix exports of message filter symbols for Windows

1.9.42 (2013-03-08)
-------------------
* improve speed of message generation in dry packages
  (`#183 <https://github.com/ros/ros_comm/issues/183>`_)
* fix roscpp service call deadlock
  (`#149 <https://github.com/ros/ros_comm/issues/149>`_)
* fix freezing service calls when returning false
  (`#168 <https://github.com/ros/ros_comm/issues/168>`_)
* fix error message publishing wrong message type
  (`#178 <https://github.com/ros/ros_comm/issues/178>`_)
* fix missing explicit dependency on pthread
  (`#135 <https://github.com/ros/ros_comm/issues/135>`_)
* fix compiler warning about wrong comparison of message md5 hashes
  (`#165 <https://github.com/ros/ros_comm/issues/165>`_)
* make dependencies on rospy optional by refactoring RosStreamHandler to
  rosgraph (`#179 <https://github.com/ros/ros_comm/issues/179>`_)
* added option '--duration' to 'rosrun rosbag play'
  (`#121 <https://github.com/ros/ros_comm/issues/121>`_)
* add error message to rosbag when using same in and out file
  (`#171 <https://github.com/ros/ros_comm/issues/171>`_)
* fix handling spaces in folder names
  (`ros/catkin#375 <https://github.com/ros/catkin/issues/375>`_)
* replace custom code with Python module netifaces
  (`#130 <https://github.com/ros/ros_comm/issues/130>`_)
* make dependencies on rospy optional by refactoring RosStreamHandler to
  rosgraph (`#179 <https://github.com/ros/ros_comm/issues/179>`_)
* add option --skip-log-check
  (`#133 <https://github.com/ros/ros_comm/issues/133>`_)
* update API doc to list raised exceptions in config.py
* fix invocation of Python scripts under Windows
  (`#54 <https://github.com/ros/ros_comm/issues/54>`_)
* fix usage of rosservice from within a launch file
* fix missing run_depend on rosbag
  (`#179 <https://github.com/ros/ros_comm/issues/179>`_)

1.9.41 (2013-01-24)
-------------------
* allow sending data exceeding 2GB in chunks
  (`#4049 <https://code.ros.org/trac/ros/ticket/4049>`_)
* update getParam() doc
  (`#1460 <https://code.ros.org/trac/ros/ticket/1460>`_)
* add param::get(float)
  (`#3754 <https://code.ros.org/trac/ros/ticket/3754>`_)
* update inactive assert when publishing message with md5sum *, update related
  tests (`#3714 <https://code.ros.org/trac/ros/ticket/3714>`_)
* fix ros master retry timeout
  (`#4024 <https://code.ros.org/trac/ros/ticket/4024>`_)
* fix inactive assert when publishing message with wrong type
  (`#3714 <https://code.ros.org/trac/ros/ticket/3714>`_)
* improve performance of $(find ...)

1.9.40 (2013-01-13)
-------------------
* add colorization for rospy log output
  (`#3691 <https://code.ros.org/trac/ros/ticket/3691>`_)
* fix socket polling under Windows
  (`#3959 <https://code.ros.org/trac/ros/ticket/3959>`_)
* fix bagsort script (`#42 <https://github.com/ros/ros_comm/issues/42>`_)
* fix dependent packages by pass LOG4CXX include dirs and libraries along
* fix usage of variable arguments in vFormatToBuffer() function
* add colorization for rospy log output
  (`#3691 <https://code.ros.org/trac/ros/ticket/3691>`_)
* fix 'roslaunch --pid=' when pointing to ROS_HOME but folder does not exist
  (`#43 <https://github.com/ros/ros_comm/issues/43>`_)
* fix 'roslaunch --pid=' to use shell expansion for the pid value
  (`#44 <https://github.com/ros/ros_comm/issues/44>`_)
* fix output of 'rossrv --help'
  (`#3979 <https://code.ros.org/trac/ros/ticket/3979>`_)
* add support for boolean in 'rostopic -p'
  (`#3948 <https://code.ros.org/trac/ros/ticket/3948>`_)
* add checks for pip packages and rosdep
* fix check for catkin_pkg
* fix for thread race condition causes incorrect graph connectivity analysis
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

3 participants