diff options
author | Andrew Chambers <achamber@gmail.com> | 2014-07-02 11:18:30 -0700 |
---|---|---|
committer | Andrew Chambers <achamber@gmail.com> | 2014-07-02 11:18:30 -0700 |
commit | 29c997f0dabc08520596b57c54c18cdba920a595 (patch) | |
tree | e82f6a175ffcb24eee49cb8e8ef52808301bf3c6 /src/modules/uavcan/uavcan_main.cpp | |
parent | 6c6de9395818717916bbc1077fecd51c4db87936 (diff) | |
download | px4-firmware-29c997f0dabc08520596b57c54c18cdba920a595.tar.gz px4-firmware-29c997f0dabc08520596b57c54c18cdba920a595.tar.bz2 px4-firmware-29c997f0dabc08520596b57c54c18cdba920a595.zip |
Fixed bug with zero-sized covariance arrays
Diffstat (limited to 'src/modules/uavcan/uavcan_main.cpp')
-rw-r--r-- | src/modules/uavcan/uavcan_main.cpp | 23 |
1 files changed, 12 insertions, 11 deletions
diff --git a/src/modules/uavcan/uavcan_main.cpp b/src/modules/uavcan/uavcan_main.cpp index 5bc437670..c0c07be53 100644 --- a/src/modules/uavcan/uavcan_main.cpp +++ b/src/modules/uavcan/uavcan_main.cpp @@ -243,21 +243,22 @@ int UavcanNode::run() _node.setStatusOk(); + /* + * This event is needed to wake up the thread on CAN bus activity (RX/TX/Error). + * Please note that with such multiplexing it is no longer possible to rely only on + * the value returned from poll() to detect whether actuator control has timed out or not. + * Instead, all ORB events need to be checked individually (see below). + */ + _poll_fds[_poll_fds_num] = ::pollfd(); + _poll_fds[_poll_fds_num].fd = busevent_fd; + _poll_fds[_poll_fds_num].events = POLLIN; + _poll_fds_num += 1; + while (!_task_should_exit) { if (_groups_subscribed != _groups_required) { subscribe(); _groups_subscribed = _groups_required; - /* - * This event is needed to wake up the thread on CAN bus activity (RX/TX/Error). - * Please note that with such multiplexing it is no longer possible to rely only on - * the value returned from poll() to detect whether actuator control has timed out or not. - * Instead, all ORB events need to be checked individually (see below). - */ - _poll_fds[_poll_fds_num] = ::pollfd(); - _poll_fds[_poll_fds_num].fd = busevent_fd; - _poll_fds[_poll_fds_num].events = POLLIN; - _poll_fds_num += 1; } const int poll_ret = ::poll(_poll_fds, _poll_fds_num, PollTimeoutMs); @@ -271,7 +272,7 @@ int UavcanNode::run() } else { // get controls for required topics bool controls_updated = false; - unsigned poll_id = 0; + unsigned poll_id = 1; for (unsigned i = 0; i < NUM_ACTUATOR_CONTROL_GROUPS; i++) { if (_control_subs[i] > 0) { if (_poll_fds[poll_id].revents & POLLIN) { |