Don't queue empty work items.

This commit is contained in:
px4dev
2014-06-07 14:46:46 -07:00
parent 99dfef357b
commit e890661900
2 changed files with 20 additions and 16 deletions
+8 -5
View File
@@ -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
+12 -11
View File
@@ -144,19 +144,18 @@ private:
dq_entry_t entry;
work_s work;
};
mavlink_channel_t channel;
void decode(mavlink_channel_t fromChannel, mavlink_message_t *fromMessage) {
switch (fromMessage->msgid) {
case MAVLINK_MSG_ID_ENCAPSULATED_DATA:
channel = fromChannel;
mavlink_msg_encapsulated_data_decode(fromMessage, &_message);
warnx("got enc data");
break;
default:
warnx("unknown msg");
bool decode(mavlink_message_t *fromMessage, mavlink_channel_t fromChannel) {
if (fromMessage->msgid == MAVLINK_MSG_ID_ENCAPSULATED_DATA) {
_channel = fromChannel;
mavlink_msg_encapsulated_data_decode(fromMessage, &_message);
return true;
}
return false;
}
void reply() {
mavlink_msg_encapsulated_data_send(_channel, sequence(), rawData());
}
uint8_t *rawData() { return &_message.data[0]; }
@@ -164,10 +163,12 @@ private:
uint8_t *requestData() { return &(header()->data[0]); }
unsigned dataSize() { return header()->size + sizeof(RequestHeader); }
uint16_t sequence() const { return _message.seqnr; }
mavlink_channel_t &channel() { return _channel; }
char *dataAsCString();
private:
mavlink_channel_t _channel;
mavlink_encapsulated_data_t _message;
};