diff options
author | px4dev <px4@purgatory.org> | 2014-06-07 14:46:46 -0700 |
---|---|---|
committer | px4dev <px4@purgatory.org> | 2014-06-07 14:46:46 -0700 |
commit | e8906619005a09d98fe68b04f2867c537f0895a8 (patch) | |
tree | f741b94b694af35f709f149c725e68b24755afb1 /src/modules/mavlink/mavlink_ftp.cpp | |
parent | 99dfef357b2f9228df54f0f26481c37204afa591 (diff) | |
download | px4-firmware-e8906619005a09d98fe68b04f2867c537f0895a8.tar.gz px4-firmware-e8906619005a09d98fe68b04f2867c537f0895a8.tar.bz2 px4-firmware-e8906619005a09d98fe68b04f2867c537f0895a8.zip |
Don't queue empty work items.
Diffstat (limited to 'src/modules/mavlink/mavlink_ftp.cpp')
-rw-r--r-- | src/modules/mavlink/mavlink_ftp.cpp | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/src/modules/mavlink/mavlink_ftp.cpp b/src/modules/mavlink/mavlink_ftp.cpp index 7a72835cc..d4d659d91 100644 --- a/src/modules/mavlink/mavlink_ftp.cpp +++ b/src/modules/mavlink/mavlink_ftp.cpp @@ -73,10 +73,13 @@ MavlinkFTP::handle_message(mavlink_message_t *msg, mavlink_channel_t channel) if (req != nullptr) { // decode the request - req->decode(channel, msg); + if (req->decode(msg, channel)) { - // and queue it for the worker - work_queue(LPWORK, &req->work, &MavlinkFTP::_workerTrampoline, req, 0); + // and queue it for the worker + work_queue(LPWORK, &req->work, &MavlinkFTP::_workerTrampoline, req, 0); + } else { + _qFree(req); + } } } @@ -112,7 +115,7 @@ MavlinkFTP::_worker(Request *req) printf("ftp: bad crc\n"); } - printf("ftp: opc %u size %u offset %u\n", hdr->opcode, hdr->size, hdr->offset); + printf("ftp: channel %u opc %u size %u offset %u\n", req->channel(), hdr->opcode, hdr->size, hdr->offset); switch (hdr->opcode) { case kCmdNone: @@ -186,7 +189,7 @@ MavlinkFTP::_reply(Request *req) hdr->crc32 = crc32(req->rawData(), req->dataSize()); // then pack and send the reply back to the request source - mavlink_msg_encapsulated_data_send(req->channel, req->sequence(), req->rawData()); + req->reply(); } MavlinkFTP::ErrorCode |