diff options
author | Justin Dickow <jjdickow@gmail.com> | 2015-01-26 11:15:48 -0500 |
---|---|---|
committer | Justin Dickow <jjdickow@gmail.com> | 2015-01-26 11:15:48 -0500 |
commit | 46ed776c537131e72747538488b213cf45f23e22 (patch) | |
tree | 4cad1abf411addfd72ab591c93edeb5d225d9a39 /src/components/transport_manager/src/usb/qnx/usb_connection.cc | |
parent | a24079cb8de5563376dcf782cdb9fe3cae063841 (diff) | |
download | sdl_core-46ed776c537131e72747538488b213cf45f23e22.tar.gz |
Latest internal release - last bulk merge before pull request and gitflow!?
Smoke tested on Ubuntu 12.04
Signed-off-by: Justin Dickow <jjdickow@gmail.com>
Diffstat (limited to 'src/components/transport_manager/src/usb/qnx/usb_connection.cc')
-rw-r--r-- | src/components/transport_manager/src/usb/qnx/usb_connection.cc | 15 |
1 files changed, 10 insertions, 5 deletions
diff --git a/src/components/transport_manager/src/usb/qnx/usb_connection.cc b/src/components/transport_manager/src/usb/qnx/usb_connection.cc index a3844b2e04..db3cac014d 100644 --- a/src/components/transport_manager/src/usb/qnx/usb_connection.cc +++ b/src/components/transport_manager/src/usb/qnx/usb_connection.cc @@ -50,7 +50,7 @@ CREATE_LOGGERPTR_GLOBAL(logger_, "TransportManager") UsbConnection::UsbConnection(const DeviceUID& device_uid, const ApplicationHandle& app_handle, TransportAdapterController* controller, - const UsbHandlerSptr libusb_handler, + const UsbHandlerSptr& libusb_handler, PlatformUsbDevice* device) : device_uid_(device_uid), app_handle_(app_handle), @@ -60,7 +60,6 @@ UsbConnection::UsbConnection(const DeviceUID& device_uid, in_pipe_(NULL), out_pipe_(NULL), in_buffer_(NULL), - out_buffer_(NULL), in_urb_(NULL), out_urb_(NULL), out_messages_(), @@ -70,6 +69,7 @@ UsbConnection::UsbConnection(const DeviceUID& device_uid, disconnecting_(false), pending_in_transfer_(false), pending_out_transfer_(false) { + pthread_mutex_init(&out_messages_mutex_, 0); } UsbConnection::~UsbConnection() { @@ -89,6 +89,8 @@ UsbConnection::~UsbConnection() { LOG4CXX_ERROR(logger_, "Failed to close pipe: " << close_pipe_rc); } } + + pthread_mutex_destroy(&out_messages_mutex_); } void InTransferCallback(usbd_urb* urb, usbd_pipe*, void* data) { @@ -210,7 +212,7 @@ void UsbConnection::OnOutTransfer(usbd_urb* urb) { } } - sync_primitives::AutoLock locker(out_messages_mutex_); + pthread_mutex_lock(&out_messages_mutex_); if (error) { LOG4CXX_ERROR(logger_, "USB out transfer failed"); @@ -232,13 +234,14 @@ void UsbConnection::OnOutTransfer(usbd_urb* urb) { } else { pending_out_transfer_ = false; } + pthread_mutex_unlock(&out_messages_mutex_); } TransportAdapter::Error UsbConnection::SendData(::protocol_handler::RawMessagePtr message) { if (disconnecting_) { return TransportAdapter::BAD_STATE; } - sync_primitives::AutoLock locker(out_messages_mutex_); + pthread_mutex_lock(&out_messages_mutex_); if (current_out_message_.valid()) { out_messages_.push_back(message); } else { @@ -248,12 +251,13 @@ TransportAdapter::Error UsbConnection::SendData(::protocol_handler::RawMessagePt DataSendError()); } } + pthread_mutex_unlock(&out_messages_mutex_); return TransportAdapter::OK; } void UsbConnection::Finalise() { LOG4CXX_INFO(logger_, "Finalising"); - sync_primitives::AutoLock locker(out_messages_mutex_); + pthread_mutex_lock(&out_messages_mutex_); disconnecting_ = true; usbd_abort_pipe(in_pipe_); usbd_abort_pipe(out_pipe_); @@ -261,6 +265,7 @@ void UsbConnection::Finalise() { it != out_messages_.end(); it = out_messages_.erase(it)) { controller_->DataSendFailed(device_uid_, app_handle_, *it, DataSendError()); } + pthread_mutex_unlock(&out_messages_mutex_); while (pending_in_transfer_ || pending_out_transfer_) sched_yield(); } |