Absolute File Name: | /home/qt/qt5_coco/qt5/qtbase/src/corelib/kernel/qeventdispatcher_unix.cpp |
Switch to Source code | Preprocessed file |
Line | Source | Count | ||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
1 | - | |||||||||||||||||||
2 | - | |||||||||||||||||||
3 | - | |||||||||||||||||||
4 | - | |||||||||||||||||||
5 | - | |||||||||||||||||||
6 | - | |||||||||||||||||||
7 | - | |||||||||||||||||||
8 | - | |||||||||||||||||||
9 | - | |||||||||||||||||||
10 | - | |||||||||||||||||||
11 | - | |||||||||||||||||||
12 | static const char *socketType(QSocketNotifier::Type type) | - | ||||||||||||||||||
13 | { | - | ||||||||||||||||||
14 | switch (type) { | - | ||||||||||||||||||
15 | case never executed: QSocketNotifier::Read:case QSocketNotifier::Read: never executed: case QSocketNotifier::Read: | 0 | ||||||||||||||||||
16 | return never executed: "Read";return "Read"; never executed: return "Read"; | 0 | ||||||||||||||||||
17 | case never executed: QSocketNotifier::Write:case QSocketNotifier::Write: never executed: case QSocketNotifier::Write: | 0 | ||||||||||||||||||
18 | return never executed: "Write";return "Write"; never executed: return "Write"; | 0 | ||||||||||||||||||
19 | case never executed: QSocketNotifier::Exception:case QSocketNotifier::Exception: never executed: case QSocketNotifier::Exception: | 0 | ||||||||||||||||||
20 | return never executed: "Exception";return "Exception"; never executed: return "Exception"; | 0 | ||||||||||||||||||
21 | } | - | ||||||||||||||||||
22 | - | |||||||||||||||||||
23 | do { ((!(false)) ? qt_assert_x("Q_UNREACHABLE()", "Q_UNREACHABLE was reached",__FILE__,89) : qt_noop()); __builtin_unreachable(); } while (0); | - | ||||||||||||||||||
24 | } never executed: end of block | 0 | ||||||||||||||||||
25 | - | |||||||||||||||||||
26 | QThreadPipe::QThreadPipe() | - | ||||||||||||||||||
27 | { | - | ||||||||||||||||||
28 | fds[0] = -1; | - | ||||||||||||||||||
29 | fds[1] = -1; | - | ||||||||||||||||||
30 | - | |||||||||||||||||||
31 | - | |||||||||||||||||||
32 | - | |||||||||||||||||||
33 | } never executed: end of block | 0 | ||||||||||||||||||
34 | - | |||||||||||||||||||
35 | QThreadPipe::~QThreadPipe() | - | ||||||||||||||||||
36 | { | - | ||||||||||||||||||
37 | if (fds[0] >= 0
| 0 | ||||||||||||||||||
38 | close(fds[0]); never executed: close(fds[0]); | 0 | ||||||||||||||||||
39 | - | |||||||||||||||||||
40 | if (fds[1] >= 0
| 0 | ||||||||||||||||||
41 | close(fds[1]); never executed: close(fds[1]); | 0 | ||||||||||||||||||
42 | - | |||||||||||||||||||
43 | - | |||||||||||||||||||
44 | - | |||||||||||||||||||
45 | - | |||||||||||||||||||
46 | } never executed: end of block | 0 | ||||||||||||||||||
47 | bool QThreadPipe::init() | - | ||||||||||||||||||
48 | { | - | ||||||||||||||||||
49 | if ((
| 0 | ||||||||||||||||||
50 | return never executed: true;return true; never executed: return true; | 0 | ||||||||||||||||||
51 | - | |||||||||||||||||||
52 | if (qt_safe_pipe(fds, 04000) == -1
| 0 | ||||||||||||||||||
53 | perror("QThreadPipe: Unable to create pipe"); | - | ||||||||||||||||||
54 | return never executed: false;return false; never executed: return false; | 0 | ||||||||||||||||||
55 | } | - | ||||||||||||||||||
56 | - | |||||||||||||||||||
57 | - | |||||||||||||||||||
58 | return never executed: true;return true; never executed: return true; | 0 | ||||||||||||||||||
59 | } | - | ||||||||||||||||||
60 | - | |||||||||||||||||||
61 | pollfd QThreadPipe::prepare() const | - | ||||||||||||||||||
62 | { | - | ||||||||||||||||||
63 | return never executed: qt_make_pollfd(fds[0], 0x001);return qt_make_pollfd(fds[0], 0x001); never executed: return qt_make_pollfd(fds[0], 0x001); | 0 | ||||||||||||||||||
64 | } | - | ||||||||||||||||||
65 | - | |||||||||||||||||||
66 | void QThreadPipe::wakeUp() | - | ||||||||||||||||||
67 | { | - | ||||||||||||||||||
68 | if (wakeUps.testAndSetAcquire(0, 1)
| 0 | ||||||||||||||||||
69 | - | |||||||||||||||||||
70 | if (fds[1] == -1
| 0 | ||||||||||||||||||
71 | - | |||||||||||||||||||
72 | eventfd_t value = 1; | - | ||||||||||||||||||
73 | int ret; | - | ||||||||||||||||||
74 | do { ret = eventfd_write(fds[0], value); } never executed: while (ret == -1end of block
| 0 | ||||||||||||||||||
75 | return; never executed: return; | 0 | ||||||||||||||||||
76 | } | - | ||||||||||||||||||
77 | - | |||||||||||||||||||
78 | char c = 0; | - | ||||||||||||||||||
79 | qt_safe_write(fds[1], &c, 1); | - | ||||||||||||||||||
80 | } never executed: end of block | 0 | ||||||||||||||||||
81 | } never executed: end of block | 0 | ||||||||||||||||||
82 | - | |||||||||||||||||||
83 | int QThreadPipe::check(const pollfd &pfd) | - | ||||||||||||||||||
84 | { | - | ||||||||||||||||||
85 | ((!(pfd.fd == fds[0])) ? qt_assert("pfd.fd == fds[0]",__FILE__,192) : qt_noop()); | - | ||||||||||||||||||
86 | - | |||||||||||||||||||
87 | char c[16]; | - | ||||||||||||||||||
88 | const int readyread = pfd.revents & 0x001; | - | ||||||||||||||||||
89 | - | |||||||||||||||||||
90 | if (readyread
| 0 | ||||||||||||||||||
91 | - | |||||||||||||||||||
92 | - | |||||||||||||||||||
93 | - | |||||||||||||||||||
94 | - | |||||||||||||||||||
95 | - | |||||||||||||||||||
96 | - | |||||||||||||||||||
97 | - | |||||||||||||||||||
98 | if (fds[1] == -1
| 0 | ||||||||||||||||||
99 | - | |||||||||||||||||||
100 | eventfd_t value; | - | ||||||||||||||||||
101 | eventfd_read(fds[0], &value); | - | ||||||||||||||||||
102 | } never executed: elseend of block | 0 | ||||||||||||||||||
103 | - | |||||||||||||||||||
104 | { | - | ||||||||||||||||||
105 | while (::
never executed: end of block | 0 | ||||||||||||||||||
106 | } never executed: end of block | 0 | ||||||||||||||||||
107 | - | |||||||||||||||||||
108 | - | |||||||||||||||||||
109 | if (!wakeUps.testAndSetRelease(1, 0)
| 0 | ||||||||||||||||||
110 | - | |||||||||||||||||||
111 | QMessageLogger(__FILE__, 218, __PRETTY_FUNCTION__).warning("QThreadPipe: internal error, wakeUps.testAndSetRelease(1, 0) failed!"); | - | ||||||||||||||||||
112 | } never executed: end of block | 0 | ||||||||||||||||||
113 | } never executed: end of block | 0 | ||||||||||||||||||
114 | - | |||||||||||||||||||
115 | return never executed: readyread;return readyread; never executed: return readyread; | 0 | ||||||||||||||||||
116 | } | - | ||||||||||||||||||
117 | - | |||||||||||||||||||
118 | QEventDispatcherUNIXPrivate::QEventDispatcherUNIXPrivate() | - | ||||||||||||||||||
119 | { | - | ||||||||||||||||||
120 | if (__builtin_expect(!!(threadPipe.init() == false), false)
| 0 | ||||||||||||||||||
121 | QMessageLogger(__FILE__, 228, __PRETTY_FUNCTION__).fatal("QEventDispatcherUNIXPrivate(): Can not continue without a thread pipe"); never executed: QMessageLogger(__FILE__, 228, __PRETTY_FUNCTION__).fatal("QEventDispatcherUNIXPrivate(): Can not continue without a thread pipe"); | 0 | ||||||||||||||||||
122 | } never executed: end of block | 0 | ||||||||||||||||||
123 | - | |||||||||||||||||||
124 | QEventDispatcherUNIXPrivate::~QEventDispatcherUNIXPrivate() | - | ||||||||||||||||||
125 | { | - | ||||||||||||||||||
126 | - | |||||||||||||||||||
127 | qDeleteAll(timerList); | - | ||||||||||||||||||
128 | } never executed: end of block | 0 | ||||||||||||||||||
129 | - | |||||||||||||||||||
130 | void QEventDispatcherUNIXPrivate::setSocketNotifierPending(QSocketNotifier *notifier) | - | ||||||||||||||||||
131 | { | - | ||||||||||||||||||
132 | ((!(notifier)) ? qt_assert("notifier",__FILE__,239) : qt_noop()); | - | ||||||||||||||||||
133 | - | |||||||||||||||||||
134 | if (pendingNotifiers.contains(notifier)
| 0 | ||||||||||||||||||
135 | return; never executed: return; | 0 | ||||||||||||||||||
136 | - | |||||||||||||||||||
137 | pendingNotifiers << notifier; | - | ||||||||||||||||||
138 | } never executed: end of block | 0 | ||||||||||||||||||
139 | - | |||||||||||||||||||
140 | int QEventDispatcherUNIXPrivate::activateTimers() | - | ||||||||||||||||||
141 | { | - | ||||||||||||||||||
142 | return never executed: timerList.activateTimers();return timerList.activateTimers(); never executed: return timerList.activateTimers(); | 0 | ||||||||||||||||||
143 | } | - | ||||||||||||||||||
144 | - | |||||||||||||||||||
145 | void QEventDispatcherUNIXPrivate::markPendingSocketNotifiers() | - | ||||||||||||||||||
146 | { | - | ||||||||||||||||||
147 | for (const pollfd &pfd : qAsConst(pollfds)) { | - | ||||||||||||||||||
148 | if (pfd.fd < 0
| 0 | ||||||||||||||||||
149 | continue; never executed: continue; | 0 | ||||||||||||||||||
150 | - | |||||||||||||||||||
151 | auto it = socketNotifiers.find(pfd.fd); | - | ||||||||||||||||||
152 | ((!(it != socketNotifiers.end())) ? qt_assert("it != socketNotifiers.end()",__FILE__,259) : qt_noop()); | - | ||||||||||||||||||
153 | - | |||||||||||||||||||
154 | const QSocketNotifierSetUNIX &sn_set = it.value(); | - | ||||||||||||||||||
155 | - | |||||||||||||||||||
156 | static const struct { | - | ||||||||||||||||||
157 | QSocketNotifier::Type type; | - | ||||||||||||||||||
158 | short flags; | - | ||||||||||||||||||
159 | } notifiers[] = { | - | ||||||||||||||||||
160 | { QSocketNotifier::Read, 0x001 | 0x010 | 0x008 }, | - | ||||||||||||||||||
161 | { QSocketNotifier::Write, 0x004 | 0x010 | 0x008 }, | - | ||||||||||||||||||
162 | { QSocketNotifier::Exception, 0x002 | 0x010 | 0x008 } | - | ||||||||||||||||||
163 | }; | - | ||||||||||||||||||
164 | - | |||||||||||||||||||
165 | for (const auto &n : notifiers) { | - | ||||||||||||||||||
166 | QSocketNotifier *notifier = sn_set.notifiers[n.type]; | - | ||||||||||||||||||
167 | - | |||||||||||||||||||
168 | if (!notifier
| 0 | ||||||||||||||||||
169 | continue; never executed: continue; | 0 | ||||||||||||||||||
170 | - | |||||||||||||||||||
171 | if (pfd.revents & 0x020
| 0 | ||||||||||||||||||
172 | QMessageLogger(__FILE__, 279, __PRETTY_FUNCTION__).warning("QSocketNotifier: Invalid socket %d with type %s, disabling...", | - | ||||||||||||||||||
173 | it.key(), socketType(n.type)); | - | ||||||||||||||||||
174 | notifier->setEnabled(false); | - | ||||||||||||||||||
175 | } never executed: end of block | 0 | ||||||||||||||||||
176 | - | |||||||||||||||||||
177 | if (pfd.revents & n.flags
| 0 | ||||||||||||||||||
178 | setSocketNotifierPending(notifier); never executed: setSocketNotifierPending(notifier); | 0 | ||||||||||||||||||
179 | } never executed: end of block | 0 | ||||||||||||||||||
180 | } never executed: end of block | 0 | ||||||||||||||||||
181 | - | |||||||||||||||||||
182 | pollfds.clear(); | - | ||||||||||||||||||
183 | } never executed: end of block | 0 | ||||||||||||||||||
184 | - | |||||||||||||||||||
185 | int QEventDispatcherUNIXPrivate::activateSocketNotifiers() | - | ||||||||||||||||||
186 | { | - | ||||||||||||||||||
187 | markPendingSocketNotifiers(); | - | ||||||||||||||||||
188 | - | |||||||||||||||||||
189 | if (pendingNotifiers.isEmpty()
| 0 | ||||||||||||||||||
190 | return never executed: 0;return 0; never executed: return 0; | 0 | ||||||||||||||||||
191 | - | |||||||||||||||||||
192 | int n_activated = 0; | - | ||||||||||||||||||
193 | QEvent event(QEvent::SockAct); | - | ||||||||||||||||||
194 | - | |||||||||||||||||||
195 | while (!pendingNotifiers.isEmpty()
| 0 | ||||||||||||||||||
196 | QSocketNotifier *notifier = pendingNotifiers.takeFirst(); | - | ||||||||||||||||||
197 | QCoreApplication::sendEvent(notifier, &event); | - | ||||||||||||||||||
198 | ++n_activated; | - | ||||||||||||||||||
199 | } never executed: end of block | 0 | ||||||||||||||||||
200 | - | |||||||||||||||||||
201 | return never executed: n_activated;return n_activated; never executed: return n_activated; | 0 | ||||||||||||||||||
202 | } | - | ||||||||||||||||||
203 | - | |||||||||||||||||||
204 | QEventDispatcherUNIX::QEventDispatcherUNIX(QObject *parent) | - | ||||||||||||||||||
205 | : QAbstractEventDispatcher(*new QEventDispatcherUNIXPrivate, parent) | - | ||||||||||||||||||
206 | { } never executed: end of block | 0 | ||||||||||||||||||
207 | - | |||||||||||||||||||
208 | QEventDispatcherUNIX::QEventDispatcherUNIX(QEventDispatcherUNIXPrivate &dd, QObject *parent) | - | ||||||||||||||||||
209 | : QAbstractEventDispatcher(dd, parent) | - | ||||||||||||||||||
210 | { } never executed: end of block | 0 | ||||||||||||||||||
211 | - | |||||||||||||||||||
212 | QEventDispatcherUNIX::~QEventDispatcherUNIX() | - | ||||||||||||||||||
213 | { } | - | ||||||||||||||||||
214 | - | |||||||||||||||||||
215 | - | |||||||||||||||||||
216 | - | |||||||||||||||||||
217 | - | |||||||||||||||||||
218 | void QEventDispatcherUNIX::registerTimer(int timerId, int interval, Qt::TimerType timerType, QObject *obj) | - | ||||||||||||||||||
219 | { | - | ||||||||||||||||||
220 | - | |||||||||||||||||||
221 | if (timerId < 1
| 0 | ||||||||||||||||||
222 | QMessageLogger(__FILE__, 329, __PRETTY_FUNCTION__).warning("QEventDispatcherUNIX::registerTimer: invalid arguments"); | - | ||||||||||||||||||
223 | return; never executed: return; | 0 | ||||||||||||||||||
224 | } else if (obj->thread() != thread()
| 0 | ||||||||||||||||||
225 | QMessageLogger(__FILE__, 332, __PRETTY_FUNCTION__).warning("QEventDispatcherUNIX::registerTimer: timers cannot be started from another thread"); | - | ||||||||||||||||||
226 | return; never executed: return; | 0 | ||||||||||||||||||
227 | } | - | ||||||||||||||||||
228 | - | |||||||||||||||||||
229 | - | |||||||||||||||||||
230 | QEventDispatcherUNIXPrivate * const d = d_func(); | - | ||||||||||||||||||
231 | d->timerList.registerTimer(timerId, interval, timerType, obj); | - | ||||||||||||||||||
232 | } never executed: end of block | 0 | ||||||||||||||||||
233 | - | |||||||||||||||||||
234 | - | |||||||||||||||||||
235 | - | |||||||||||||||||||
236 | - | |||||||||||||||||||
237 | bool QEventDispatcherUNIX::unregisterTimer(int timerId) | - | ||||||||||||||||||
238 | { | - | ||||||||||||||||||
239 | - | |||||||||||||||||||
240 | if (timerId < 1
| 0 | ||||||||||||||||||
241 | QMessageLogger(__FILE__, 348, __PRETTY_FUNCTION__).warning("QEventDispatcherUNIX::unregisterTimer: invalid argument"); | - | ||||||||||||||||||
242 | return never executed: false;return false; never executed: return false; | 0 | ||||||||||||||||||
243 | } else if (thread() != QThread::currentThread()
| 0 | ||||||||||||||||||
244 | QMessageLogger(__FILE__, 351, __PRETTY_FUNCTION__).warning("QEventDispatcherUNIX::unregisterTimer: timers cannot be stopped from another thread"); | - | ||||||||||||||||||
245 | return never executed: false;return false; never executed: return false; | 0 | ||||||||||||||||||
246 | } | - | ||||||||||||||||||
247 | - | |||||||||||||||||||
248 | - | |||||||||||||||||||
249 | QEventDispatcherUNIXPrivate * const d = d_func(); | - | ||||||||||||||||||
250 | return never executed: d->timerList.unregisterTimer(timerId);return d->timerList.unregisterTimer(timerId); never executed: return d->timerList.unregisterTimer(timerId); | 0 | ||||||||||||||||||
251 | } | - | ||||||||||||||||||
252 | - | |||||||||||||||||||
253 | - | |||||||||||||||||||
254 | - | |||||||||||||||||||
255 | - | |||||||||||||||||||
256 | bool QEventDispatcherUNIX::unregisterTimers(QObject *object) | - | ||||||||||||||||||
257 | { | - | ||||||||||||||||||
258 | - | |||||||||||||||||||
259 | if (!object
| 0 | ||||||||||||||||||
260 | QMessageLogger(__FILE__, 367, __PRETTY_FUNCTION__).warning("QEventDispatcherUNIX::unregisterTimers: invalid argument"); | - | ||||||||||||||||||
261 | return never executed: false;return false; never executed: return false; | 0 | ||||||||||||||||||
262 | } else if (object->thread() != thread()
| 0 | ||||||||||||||||||
263 | QMessageLogger(__FILE__, 370, __PRETTY_FUNCTION__).warning("QEventDispatcherUNIX::unregisterTimers: timers cannot be stopped from another thread"); | - | ||||||||||||||||||
264 | return never executed: false;return false; never executed: return false; | 0 | ||||||||||||||||||
265 | } | - | ||||||||||||||||||
266 | - | |||||||||||||||||||
267 | - | |||||||||||||||||||
268 | QEventDispatcherUNIXPrivate * const d = d_func(); | - | ||||||||||||||||||
269 | return never executed: d->timerList.unregisterTimers(object);return d->timerList.unregisterTimers(object); never executed: return d->timerList.unregisterTimers(object); | 0 | ||||||||||||||||||
270 | } | - | ||||||||||||||||||
271 | - | |||||||||||||||||||
272 | QList<QEventDispatcherUNIX::TimerInfo> | - | ||||||||||||||||||
273 | QEventDispatcherUNIX::registeredTimers(QObject *object) const | - | ||||||||||||||||||
274 | { | - | ||||||||||||||||||
275 | if (!object
| 0 | ||||||||||||||||||
276 | QMessageLogger(__FILE__, 383, __PRETTY_FUNCTION__).warning("QEventDispatcherUNIX:registeredTimers: invalid argument"); | - | ||||||||||||||||||
277 | return never executed: QList<TimerInfo>();return QList<TimerInfo>(); never executed: return QList<TimerInfo>(); | 0 | ||||||||||||||||||
278 | } | - | ||||||||||||||||||
279 | - | |||||||||||||||||||
280 | const QEventDispatcherUNIXPrivate * const d = d_func(); | - | ||||||||||||||||||
281 | return never executed: d->timerList.registeredTimers(object);return d->timerList.registeredTimers(object); never executed: return d->timerList.registeredTimers(object); | 0 | ||||||||||||||||||
282 | } | - | ||||||||||||||||||
283 | - | |||||||||||||||||||
284 | - | |||||||||||||||||||
285 | - | |||||||||||||||||||
286 | - | |||||||||||||||||||
287 | - | |||||||||||||||||||
288 | void QEventDispatcherUNIX::registerSocketNotifier(QSocketNotifier *notifier) | - | ||||||||||||||||||
289 | { | - | ||||||||||||||||||
290 | ((!(notifier)) ? qt_assert("notifier",__FILE__,397) : qt_noop()); | - | ||||||||||||||||||
291 | int sockfd = notifier->socket(); | - | ||||||||||||||||||
292 | QSocketNotifier::Type type = notifier->type(); | - | ||||||||||||||||||
293 | - | |||||||||||||||||||
294 | if (notifier->thread() != thread()
| 0 | ||||||||||||||||||
295 | QMessageLogger(__FILE__, 402, __PRETTY_FUNCTION__).warning("QSocketNotifier: socket notifiers cannot be enabled from another thread"); | - | ||||||||||||||||||
296 | return; never executed: return; | 0 | ||||||||||||||||||
297 | } | - | ||||||||||||||||||
298 | - | |||||||||||||||||||
299 | - | |||||||||||||||||||
300 | QEventDispatcherUNIXPrivate * const d = d_func(); | - | ||||||||||||||||||
301 | QSocketNotifierSetUNIX &sn_set = d->socketNotifiers[sockfd]; | - | ||||||||||||||||||
302 | - | |||||||||||||||||||
303 | if (sn_set.notifiers[type]
| 0 | ||||||||||||||||||
304 | QMessageLogger(__FILE__, 411, __PRETTY_FUNCTION__).warning("%s: Multiple socket notifiers for same socket %d and type %s", never executed: QMessageLogger(__FILE__, 411, __PRETTY_FUNCTION__).warning("%s: Multiple socket notifiers for same socket %d and type %s", __PRETTY_FUNCTION__, sockfd, socketType(type)); | 0 | ||||||||||||||||||
305 | __PRETTY_FUNCTION__, sockfd, socketType(type)); never executed: QMessageLogger(__FILE__, 411, __PRETTY_FUNCTION__).warning("%s: Multiple socket notifiers for same socket %d and type %s", __PRETTY_FUNCTION__, sockfd, socketType(type)); | 0 | ||||||||||||||||||
306 | - | |||||||||||||||||||
307 | sn_set.notifiers[type] = notifier; | - | ||||||||||||||||||
308 | } never executed: end of block | 0 | ||||||||||||||||||
309 | - | |||||||||||||||||||
310 | void QEventDispatcherUNIX::unregisterSocketNotifier(QSocketNotifier *notifier) | - | ||||||||||||||||||
311 | { | - | ||||||||||||||||||
312 | ((!(notifier)) ? qt_assert("notifier",__FILE__,419) : qt_noop()); | - | ||||||||||||||||||
313 | int sockfd = notifier->socket(); | - | ||||||||||||||||||
314 | QSocketNotifier::Type type = notifier->type(); | - | ||||||||||||||||||
315 | - | |||||||||||||||||||
316 | if (notifier->thread() != thread()
| 0 | ||||||||||||||||||
317 | QMessageLogger(__FILE__, 424, __PRETTY_FUNCTION__).warning("QSocketNotifier: socket notifier (fd %d) cannot be disabled from another thread.\n" | - | ||||||||||||||||||
318 | "(Notifier's thread is %s(%p), event dispatcher's thread is %s(%p), current thread is %s(%p))", | - | ||||||||||||||||||
319 | sockfd, | - | ||||||||||||||||||
320 | notifier->thread() ? notifier->thread()->metaObject()->className() : "QThread", notifier->thread(), | - | ||||||||||||||||||
321 | thread() ? thread()->metaObject()->className() : "QThread", thread(), | - | ||||||||||||||||||
322 | QThread::currentThread() ? QThread::currentThread()->metaObject()->className() : "QThread", QThread::currentThread()); | - | ||||||||||||||||||
323 | return; never executed: return; | 0 | ||||||||||||||||||
324 | } | - | ||||||||||||||||||
325 | - | |||||||||||||||||||
326 | - | |||||||||||||||||||
327 | QEventDispatcherUNIXPrivate * const d = d_func(); | - | ||||||||||||||||||
328 | - | |||||||||||||||||||
329 | d->pendingNotifiers.removeOne(notifier); | - | ||||||||||||||||||
330 | - | |||||||||||||||||||
331 | auto i = d->socketNotifiers.find(sockfd); | - | ||||||||||||||||||
332 | if (i == d->socketNotifiers.end()
| 0 | ||||||||||||||||||
333 | return; never executed: return; | 0 | ||||||||||||||||||
334 | - | |||||||||||||||||||
335 | QSocketNotifierSetUNIX &sn_set = i.value(); | - | ||||||||||||||||||
336 | - | |||||||||||||||||||
337 | if (sn_set.notifiers[type] == nullptr
| 0 | ||||||||||||||||||
338 | return; never executed: return; | 0 | ||||||||||||||||||
339 | - | |||||||||||||||||||
340 | if (sn_set.notifiers[type] != notifier
| 0 | ||||||||||||||||||
341 | QMessageLogger(__FILE__, 448, __PRETTY_FUNCTION__).warning("%s: Multiple socket notifiers for same socket %d and type %s", | - | ||||||||||||||||||
342 | __PRETTY_FUNCTION__, sockfd, socketType(type)); | - | ||||||||||||||||||
343 | return; never executed: return; | 0 | ||||||||||||||||||
344 | } | - | ||||||||||||||||||
345 | - | |||||||||||||||||||
346 | sn_set.notifiers[type] = nullptr; | - | ||||||||||||||||||
347 | - | |||||||||||||||||||
348 | if (sn_set.isEmpty()
| 0 | ||||||||||||||||||
349 | d->socketNotifiers.erase(i); never executed: d->socketNotifiers.erase(i); | 0 | ||||||||||||||||||
350 | } never executed: end of block | 0 | ||||||||||||||||||
351 | - | |||||||||||||||||||
352 | bool QEventDispatcherUNIX::processEvents(QEventLoop::ProcessEventsFlags flags) | - | ||||||||||||||||||
353 | { | - | ||||||||||||||||||
354 | QEventDispatcherUNIXPrivate * const d = d_func(); | - | ||||||||||||||||||
355 | d->interrupt.store(0); | - | ||||||||||||||||||
356 | - | |||||||||||||||||||
357 | - | |||||||||||||||||||
358 | awake(); | - | ||||||||||||||||||
359 | QCoreApplicationPrivate::sendPostedEvents(0, 0, d->threadData); | - | ||||||||||||||||||
360 | - | |||||||||||||||||||
361 | const bool include_timers = (flags & QEventLoop::X11ExcludeTimers) == 0; | - | ||||||||||||||||||
362 | const bool include_notifiers = (flags & QEventLoop::ExcludeSocketNotifiers) == 0; | - | ||||||||||||||||||
363 | const bool wait_for_events = flags & QEventLoop::WaitForMoreEvents; | - | ||||||||||||||||||
364 | - | |||||||||||||||||||
365 | const bool canWait = (d->threadData->canWaitLocked()
| 0 | ||||||||||||||||||
366 | && !d->interrupt.load()
| 0 | ||||||||||||||||||
367 | && wait_for_events
| 0 | ||||||||||||||||||
368 | - | |||||||||||||||||||
369 | if (canWait
| 0 | ||||||||||||||||||
370 | aboutToBlock(); never executed: aboutToBlock(); | 0 | ||||||||||||||||||
371 | - | |||||||||||||||||||
372 | if (d->interrupt.load()
| 0 | ||||||||||||||||||
373 | return never executed: false;return false; never executed: return false; | 0 | ||||||||||||||||||
374 | - | |||||||||||||||||||
375 | timespec *tm = nullptr; | - | ||||||||||||||||||
376 | timespec wait_tm = { 0, 0 }; | - | ||||||||||||||||||
377 | - | |||||||||||||||||||
378 | if (!canWait
| 0 | ||||||||||||||||||
379 | tm = &wait_tm; never executed: tm = &wait_tm; | 0 | ||||||||||||||||||
380 | - | |||||||||||||||||||
381 | d->pollfds.clear(); | - | ||||||||||||||||||
382 | d->pollfds.reserve(1 + (include_notifiers ? d->socketNotifiers.size() : 0)); | - | ||||||||||||||||||
383 | - | |||||||||||||||||||
384 | if (include_notifiers
| 0 | ||||||||||||||||||
385 | for (auto it = d->socketNotifiers.cbegin(); it != d->socketNotifiers.cend()
| 0 | ||||||||||||||||||
386 | d->pollfds.append(qt_make_pollfd(it.key(), it.value().events())); never executed: d->pollfds.append(qt_make_pollfd(it.key(), it.value().events())); | 0 | ||||||||||||||||||
387 | - | |||||||||||||||||||
388 | - | |||||||||||||||||||
389 | d->pollfds.append(d->threadPipe.prepare()); | - | ||||||||||||||||||
390 | - | |||||||||||||||||||
391 | int nevents = 0; | - | ||||||||||||||||||
392 | - | |||||||||||||||||||
393 | switch (qt_safe_poll(d->pollfds.data(), d->pollfds.size(), tm)) { | - | ||||||||||||||||||
394 | case never executed: -1:case -1: never executed: case -1: | 0 | ||||||||||||||||||
395 | perror("qt_safe_poll"); | - | ||||||||||||||||||
396 | break; never executed: break; | 0 | ||||||||||||||||||
397 | case never executed: 0:case 0: never executed: case 0: | 0 | ||||||||||||||||||
398 | break; never executed: break; | 0 | ||||||||||||||||||
399 | default never executed: :default: never executed: default: | 0 | ||||||||||||||||||
400 | nevents += d->threadPipe.check(d->pollfds.takeLast()); | - | ||||||||||||||||||
401 | if (include_notifiers
| 0 | ||||||||||||||||||
402 | nevents += d->activateSocketNotifiers(); never executed: nevents += d->activateSocketNotifiers(); | 0 | ||||||||||||||||||
403 | break; never executed: break; | 0 | ||||||||||||||||||
404 | } | - | ||||||||||||||||||
405 | - | |||||||||||||||||||
406 | if (include_timers
| 0 | ||||||||||||||||||
407 | nevents += d->activateTimers(); never executed: nevents += d->activateTimers(); | 0 | ||||||||||||||||||
408 | - | |||||||||||||||||||
409 | - | |||||||||||||||||||
410 | return never executed: (nevents > 0);return (nevents > 0); never executed: return (nevents > 0); | 0 | ||||||||||||||||||
411 | } | - | ||||||||||||||||||
412 | - | |||||||||||||||||||
413 | bool QEventDispatcherUNIX::hasPendingEvents() | - | ||||||||||||||||||
414 | { | - | ||||||||||||||||||
415 | extern uint qGlobalPostedEventsCount(); | - | ||||||||||||||||||
416 | return never executed: qGlobalPostedEventsCount();return qGlobalPostedEventsCount(); never executed: return qGlobalPostedEventsCount(); | 0 | ||||||||||||||||||
417 | } | - | ||||||||||||||||||
418 | - | |||||||||||||||||||
419 | int QEventDispatcherUNIX::remainingTime(int timerId) | - | ||||||||||||||||||
420 | { | - | ||||||||||||||||||
421 | - | |||||||||||||||||||
422 | if (timerId < 1
| 0 | ||||||||||||||||||
423 | QMessageLogger(__FILE__, 530, __PRETTY_FUNCTION__).warning("QEventDispatcherUNIX::remainingTime: invalid argument"); | - | ||||||||||||||||||
424 | return never executed: -1;return -1; never executed: return -1; | 0 | ||||||||||||||||||
425 | } | - | ||||||||||||||||||
426 | - | |||||||||||||||||||
427 | - | |||||||||||||||||||
428 | QEventDispatcherUNIXPrivate * const d = d_func(); | - | ||||||||||||||||||
429 | return never executed: d->timerList.timerRemainingTime(timerId);return d->timerList.timerRemainingTime(timerId); never executed: return d->timerList.timerRemainingTime(timerId); | 0 | ||||||||||||||||||
430 | } | - | ||||||||||||||||||
431 | - | |||||||||||||||||||
432 | void QEventDispatcherUNIX::wakeUp() | - | ||||||||||||||||||
433 | { | - | ||||||||||||||||||
434 | QEventDispatcherUNIXPrivate * const d = d_func(); | - | ||||||||||||||||||
435 | d->threadPipe.wakeUp(); | - | ||||||||||||||||||
436 | } never executed: end of block | 0 | ||||||||||||||||||
437 | - | |||||||||||||||||||
438 | void QEventDispatcherUNIX::interrupt() | - | ||||||||||||||||||
439 | { | - | ||||||||||||||||||
440 | QEventDispatcherUNIXPrivate * const d = d_func(); | - | ||||||||||||||||||
441 | d->interrupt.store(1); | - | ||||||||||||||||||
442 | wakeUp(); | - | ||||||||||||||||||
443 | } never executed: end of block | 0 | ||||||||||||||||||
444 | - | |||||||||||||||||||
445 | void QEventDispatcherUNIX::flush() | - | ||||||||||||||||||
446 | { } | - | ||||||||||||||||||
447 | - | |||||||||||||||||||
448 | - | |||||||||||||||||||
Switch to Source code | Preprocessed file |