| Index: components/usb_service/usb_context.cc
|
| diff --git a/components/usb_service/usb_context.cc b/components/usb_service/usb_context.cc
|
| deleted file mode 100644
|
| index 963986a09636b9101d6e2eb3aee3a06f4523852d..0000000000000000000000000000000000000000
|
| --- a/components/usb_service/usb_context.cc
|
| +++ /dev/null
|
| @@ -1,81 +0,0 @@
|
| -// Copyright 2014 The Chromium Authors. All rights reserved.
|
| -// Use of this source code is governed by a BSD-style license that can be
|
| -// found in the LICENSE file.
|
| -
|
| -#include "components/usb_service/usb_context.h"
|
| -
|
| -#include "base/atomicops.h"
|
| -#include "base/logging.h"
|
| -#include "base/synchronization/waitable_event.h"
|
| -#include "base/threading/platform_thread.h"
|
| -#include "components/usb_service/usb_error.h"
|
| -#include "third_party/libusb/src/libusb/interrupt.h"
|
| -#include "third_party/libusb/src/libusb/libusb.h"
|
| -
|
| -namespace usb_service {
|
| -
|
| -// The UsbEventHandler works around a design flaw in the libusb interface. There
|
| -// is currently no way to signal to libusb that any caller into one of the event
|
| -// handler calls should return without handling any events.
|
| -class UsbContext::UsbEventHandler : public base::PlatformThread::Delegate {
|
| - public:
|
| - explicit UsbEventHandler(libusb_context* context);
|
| - virtual ~UsbEventHandler();
|
| -
|
| - // base::PlatformThread::Delegate
|
| - virtual void ThreadMain() OVERRIDE;
|
| -
|
| - private:
|
| - base::subtle::Atomic32 running_;
|
| - libusb_context* context_;
|
| - base::PlatformThreadHandle thread_handle_;
|
| - base::WaitableEvent start_polling_;
|
| - DISALLOW_COPY_AND_ASSIGN(UsbEventHandler);
|
| -};
|
| -
|
| -UsbContext::UsbEventHandler::UsbEventHandler(libusb_context* context)
|
| - : context_(context),
|
| - thread_handle_(0),
|
| - start_polling_(false, false) {
|
| - base::subtle::Release_Store(&running_, 1);
|
| - bool success = base::PlatformThread::Create(0, this, &thread_handle_);
|
| - DCHECK(success) << "Failed to create USB IO handling thread.";
|
| - start_polling_.Wait();
|
| -}
|
| -
|
| -UsbContext::UsbEventHandler::~UsbEventHandler() {
|
| - base::subtle::Release_Store(&running_, 0);
|
| - libusb_interrupt_handle_event(context_);
|
| - base::PlatformThread::Join(thread_handle_);
|
| -}
|
| -
|
| -void UsbContext::UsbEventHandler::ThreadMain() {
|
| - base::PlatformThread::SetName("UsbEventHandler");
|
| - VLOG(1) << "UsbEventHandler started.";
|
| -
|
| - if (base::subtle::Acquire_Load(&running_)) {
|
| - start_polling_.Signal();
|
| - }
|
| - while (base::subtle::Acquire_Load(&running_)) {
|
| - const int rv = libusb_handle_events(context_);
|
| - if (rv != LIBUSB_SUCCESS) {
|
| - VLOG(1) << "Failed to handle events: " << ConvertErrorToString(rv);
|
| - }
|
| - }
|
| - VLOG(1) << "UsbEventHandler shutting down.";
|
| -}
|
| -
|
| -UsbContext::UsbContext(PlatformUsbContext context) : context_(context) {
|
| - DCHECK(thread_checker_.CalledOnValidThread());
|
| - event_handler_ = new UsbEventHandler(context_);
|
| -}
|
| -
|
| -UsbContext::~UsbContext() {
|
| - // destruction of UsbEventHandler is a blocking operation.
|
| - DCHECK(thread_checker_.CalledOnValidThread());
|
| - delete event_handler_;
|
| - event_handler_ = NULL;
|
| - libusb_exit(context_);
|
| -}
|
| -
|
| -} // namespace usb_service
|
|
|