Commit 5516761
committed
Fix PTZ action commands getting ignored
Switching to the prochandler API broke the action source because the
proc handler lambdas were ignoring all calls from threads other than the
GUI thread. This was done because the calldata structure usually lives
on the callers stack, and if a call was queued on the correct thread,
e.g. by calling QMetaObject::invokeMethod(), then the calldata would be
gone by the time the method ran. However, the action source triggers
don't come from the UI thread.
To fix this, rework the proc handlers to extract the calldata arguments
in the callers thread, and then use invokeMethod() to call the device
method, using the default Qt::AutoConnection mode so that calls from the
GUI thread are direct, but calls from other threads get queued. For most
methods this works fine because the calls are commands to the device.
The one exception is the ::get() method which needs to return data to
the caller. This is the one proc handler method that still needs to be
called by the GUI thread, and it gets ignored if it is not. This perhaps
could be fixed by using a BlockingQueued connection, but it is unclear
if it is needed and that change can be done in another patch.
Signed-off-by: Grant Likely <grant.likely@secretlab.ca>1 parent 29c80a6 commit 5516761
2 files changed
Lines changed: 20 additions & 21 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
35 | 35 | | |
36 | 36 | | |
37 | 37 | | |
38 | | - | |
39 | | - | |
40 | | - | |
41 | | - | |
42 | 38 | | |
43 | 39 | | |
44 | 40 | | |
| |||
172 | 168 | | |
173 | 169 | | |
174 | 170 | | |
175 | | - | |
| 171 | + | |
176 | 172 | | |
177 | 173 | | |
178 | | - | |
| 174 | + | |
179 | 175 | | |
180 | 176 | | |
181 | | - | |
| 177 | + | |
182 | 178 | | |
183 | 179 | | |
184 | 180 | | |
185 | 181 | | |
186 | 182 | | |
187 | 183 | | |
188 | 184 | | |
189 | | - | |
| 185 | + | |
190 | 186 | | |
191 | 187 | | |
192 | | - | |
| 188 | + | |
193 | 189 | | |
194 | 190 | | |
195 | | - | |
| 191 | + | |
196 | 192 | | |
197 | 193 | | |
198 | 194 | | |
199 | 195 | | |
200 | 196 | | |
201 | 197 | | |
202 | 198 | | |
203 | | - | |
| 199 | + | |
204 | 200 | | |
205 | 201 | | |
206 | 202 | | |
207 | 203 | | |
| 204 | + | |
| 205 | + | |
| 206 | + | |
| 207 | + | |
208 | 208 | | |
209 | 209 | | |
210 | 210 | | |
| |||
217 | 217 | | |
218 | 218 | | |
219 | 219 | | |
220 | | - | |
| 220 | + | |
221 | 221 | | |
222 | 222 | | |
223 | | - | |
| 223 | + | |
224 | 224 | | |
225 | 225 | | |
226 | 226 | | |
227 | 227 | | |
228 | 228 | | |
229 | 229 | | |
230 | | - | |
| 230 | + | |
231 | 231 | | |
232 | 232 | | |
233 | 233 | | |
234 | 234 | | |
235 | 235 | | |
236 | 236 | | |
237 | | - | |
| 237 | + | |
238 | 238 | | |
239 | 239 | | |
240 | 240 | | |
241 | 241 | | |
242 | 242 | | |
243 | 243 | | |
244 | | - | |
| 244 | + | |
245 | 245 | | |
246 | 246 | | |
247 | 247 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
109 | 109 | | |
110 | 110 | | |
111 | 111 | | |
112 | | - | |
| 112 | + | |
113 | 113 | | |
114 | 114 | | |
115 | 115 | | |
| |||
142 | 142 | | |
143 | 143 | | |
144 | 144 | | |
145 | | - | |
146 | | - | |
147 | | - | |
148 | | - | |
| 145 | + | |
| 146 | + | |
| 147 | + | |
149 | 148 | | |
150 | 149 | | |
151 | 150 | | |
| |||
0 commit comments