File tree Expand file tree Collapse file tree 2 files changed +8
-0
lines changed Expand file tree Collapse file tree 2 files changed +8
-0
lines changed Original file line number Diff line number Diff line change 29
29
30
30
#include < deque>
31
31
#include < libusb.h>
32
+ #include < mutex>
32
33
33
34
#include < libfreenect2/data_callback.h>
34
35
@@ -70,6 +71,7 @@ class TransferPool
70
71
libusb_device_handle *device_handle_;
71
72
unsigned char device_endpoint_;
72
73
74
+ std::mutex pending_transfers_lock_;
73
75
TransferQueue idle_transfers_, pending_transfers_;
74
76
unsigned char *buffer_;
75
77
size_t buffer_size_;
Original file line number Diff line number Diff line change @@ -86,6 +86,7 @@ void TransferPool::submit(size_t num_parallel_transfers)
86
86
{
87
87
std::cerr << " [TransferPool::submit] too few idle transfers!" << std::endl;
88
88
}
89
+ pending_transfers_lock_.lock ();
89
90
90
91
for (size_t i = 0 ; i < num_parallel_transfers; ++i)
91
92
{
@@ -105,6 +106,8 @@ void TransferPool::submit(size_t num_parallel_transfers)
105
106
std::cerr << " [TransferPool::submit] failed to submit transfer" << std::endl;
106
107
}
107
108
}
109
+
110
+ pending_transfers_lock_.unlock ();
108
111
}
109
112
110
113
void TransferPool::cancel ()
@@ -160,6 +163,7 @@ void TransferPool::onTransferCompleteStatic(libusb_transfer* transfer)
160
163
161
164
void TransferPool::onTransferComplete (libusb_transfer* transfer)
162
165
{
166
+ pending_transfers_lock_.lock ();
163
167
// remove transfer from pending queue - should be fast as it is somewhere at the front
164
168
TransferQueue::iterator it = std::find (pending_transfers_.begin (), pending_transfers_.end (), transfer);
165
169
@@ -170,6 +174,8 @@ void TransferPool::onTransferComplete(libusb_transfer* transfer)
170
174
171
175
pending_transfers_.erase (it);
172
176
177
+ pending_transfers_lock_.unlock ();
178
+
173
179
// process data
174
180
processTransfer (transfer);
175
181
You can’t perform that action at this time.
0 commit comments