@@ -60,10 +60,13 @@ void TransferPool::disableSubmission()
60
60
61
61
void TransferPool::deallocate ()
62
62
{
63
+ idle_transfers_lock_.lock ();
63
64
for (TransferQueue::iterator it = idle_transfers_.begin (); it != idle_transfers_.end (); ++it)
64
65
{
65
66
libusb_free_transfer (*it);
66
67
}
68
+ idle_transfers_lock_.unlock ();
69
+
67
70
idle_transfers_.clear ();
68
71
69
72
if (buffer_ != 0 )
@@ -86,6 +89,7 @@ void TransferPool::submit(size_t num_parallel_transfers)
86
89
{
87
90
std::cerr << " [TransferPool::submit] too few idle transfers!" << std::endl;
88
91
}
92
+ pending_transfers_lock_.lock ();
89
93
90
94
for (size_t i = 0 ; i < num_parallel_transfers; ++i)
91
95
{
@@ -105,10 +109,14 @@ void TransferPool::submit(size_t num_parallel_transfers)
105
109
std::cerr << " [TransferPool::submit] failed to submit transfer" << std::endl;
106
110
}
107
111
}
112
+
113
+ pending_transfers_lock_.unlock ();
108
114
}
109
115
110
116
void TransferPool::cancel ()
111
117
{
118
+ pending_transfers_lock_.lock ();
119
+
112
120
for (TransferQueue::iterator it = pending_transfers_.begin (); it != pending_transfers_.end (); ++it)
113
121
{
114
122
int r = libusb_cancel_transfer (*it);
@@ -119,6 +127,8 @@ void TransferPool::cancel()
119
127
}
120
128
}
121
129
130
+ pending_transfers_lock_.unlock ();
131
+
122
132
// idle_transfers_.insert(idle_transfers_.end(), pending_transfers_.begin(), pending_transfers_.end());
123
133
}
124
134
@@ -160,6 +170,7 @@ void TransferPool::onTransferCompleteStatic(libusb_transfer* transfer)
160
170
161
171
void TransferPool::onTransferComplete (libusb_transfer* transfer)
162
172
{
173
+ pending_transfers_lock_.lock ();
163
174
// remove transfer from pending queue - should be fast as it is somewhere at the front
164
175
TransferQueue::iterator it = std::find (pending_transfers_.begin (), pending_transfers_.end (), transfer);
165
176
@@ -170,6 +181,8 @@ void TransferPool::onTransferComplete(libusb_transfer* transfer)
170
181
171
182
pending_transfers_.erase (it);
172
183
184
+ pending_transfers_lock_.unlock ();
185
+
173
186
// process data
174
187
processTransfer (transfer);
175
188
0 commit comments