| 116 | } |
| 117 | |
| 118 | void TransferPool::cancel() |
| 119 | { |
| 120 | for(TransferQueue::iterator it = transfers_.begin(); it != transfers_.end(); ++it) |
| 121 | { |
| 122 | int r = libusb_cancel_transfer(it->transfer); |
| 123 | |
| 124 | if(r != LIBUSB_SUCCESS && r != LIBUSB_ERROR_NOT_FOUND) |
| 125 | { |
| 126 | LOG_ERROR << "failed to cancel transfer: " << WRITE_LIBUSB_ERROR(r); |
| 127 | } |
| 128 | } |
| 129 | |
| 130 | for(;;) |
| 131 | { |
| 132 | libfreenect2::this_thread::sleep_for(libfreenect2::chrono::milliseconds(100)); |
| 133 | size_t stopped_transfers = 0; |
| 134 | for(TransferQueue::iterator it = transfers_.begin(); it != transfers_.end(); ++it) |
| 135 | stopped_transfers += it->getStopped(); |
| 136 | if (stopped_transfers == transfers_.size()) |
| 137 | break; |
| 138 | LOG_INFO << "waiting for transfer cancellation"; |
| 139 | libfreenect2::this_thread::sleep_for(libfreenect2::chrono::milliseconds(1000)); |
| 140 | } |
| 141 | } |
| 142 | |
| 143 | void TransferPool::setCallback(DataCallback *callback) |
| 144 | { |