Remove the exception notifier handling for *nix
authorDenis Shienkov <denis.shienkov@gmail.com>
Sat, 7 Jun 2014 23:22:19 +0000 (23:22 +0000)
committerThe Qt Project <gerrit-noreply@qt-project.org>
Thu, 12 Jun 2014 14:21:09 +0000 (16:21 +0200)
commit450f79d2a1a38fd3d24df951758404cbcce158a8
treeb17070301396402a4c5c470e6c81a6cb04836a64
parentedc0605ff92ada693323d995b27534d327224f6f
Remove the exception notifier handling for *nix

The exception notifier does not do any useful operation while processing
I/O but only complicates error handling. It has been thoughtlessly
introduced at beginning in hope that in the future it can it is useful,
but the practice showed that it not so.

Problem is that in case of ejection of an open USB device from a host
there is the infinite triggering of the exception notifier that leads to
program hangup. We could stop an exception notifier in this case, but it
not rationally because after the exception notifier is triggered the read
notifier which also enters the infinite loop.

Thus the read notifier anyway duplicates the exception notifier, as for
functionality and as for an error code. Therefore more rationally to
completely remove the exception notifier. So in case of the ResourceError
we need just to stop of the read notifier, because it is a critical
error. Then an user will be notified on the ResourceError appearance and
must to close the device himself.

Though work was checked only on Linux, but we can do not worry, and to
refuse from this notifier in MacOSX also. Because anyway in MacOSX this
type of notifier is not supported, at least from the Qt 5.1 and above:

https://qt.gitorious.org/qt/qtbase/source/982fdd4ef556f63ba77384a0dbe97928e610091b:src/platformsupport/cfsocketnotifier/qcfsocketnotifier.cpp#L210

Besides in documentation on QSocketNotifier is recommended do not
use the Exception mode:

http://qt-project.org/doc/qt-5/qsocketnotifier.html#Type-enum

Tested on ArchLinux 64 bit with the USB PL2303 device, ZTE modem,
Android serial port using Qt4 and then Qt5.

Task-number: QTBUG-36727
Task-number: QTBUG-35829
Change-Id: I4ea6db2a1c7f10c096d57817c00edefc4f0595ff
Reviewed-by: Rafael Roquetto <rafael.roquetto@kdab.com>
Reviewed-by: Peter K├╝mmel <syntheticpp@gmx.net>
Reviewed-by: Sergey Belyashov <Sergey.Belyashov@gmail.com>
src/serialport/qserialport_unix.cpp
src/serialport/qserialport_unix_p.h