Merge "QProcess/Win: implement async closing of write channel"

This commit is contained in:
Alex Trotsenko 2021-03-07 14:44:23 +02:00 committed by Qt CI Bot
commit 4b92dc14d9
10 changed files with 27 additions and 32 deletions

View File

@ -1097,8 +1097,13 @@ bool QProcessPrivate::_q_canReadStandardError()
bool QProcessPrivate::_q_canWrite()
{
if (writeBuffer.isEmpty()) {
#ifdef Q_OS_WIN
if (stdinChannel.closed && pipeWriterBytesToWrite() == 0)
closeWriteChannel();
#else
if (stdinChannel.notifier)
stdinChannel.notifier->setEnabled(false);
#endif
#if defined QPROCESS_DEBUG
qDebug("QProcessPrivate::canWrite(), not writing anything (empty write buffer).");
#endif
@ -1107,10 +1112,12 @@ bool QProcessPrivate::_q_canWrite()
const bool writeSucceeded = writeToStdin();
#ifdef Q_OS_UNIX
if (writeBuffer.isEmpty() && stdinChannel.closed)
closeWriteChannel();
else if (stdinChannel.notifier)
stdinChannel.notifier->setEnabled(!writeBuffer.isEmpty());
#endif
return writeSucceeded;
}
@ -1211,11 +1218,6 @@ void QProcessPrivate::closeWriteChannel()
qDebug("QProcessPrivate::closeWriteChannel()");
#endif
#ifdef Q_OS_WIN
// ### Find a better fix, feeding the process little by little
// instead.
flushPipeWriter();
#endif
closeChannel(&stdinChannel);
}
@ -1373,7 +1375,7 @@ void QProcess::closeWriteChannel()
{
Q_D(QProcess);
d->stdinChannel.closed = true; // closing
if (d->writeBuffer.isEmpty())
if (bytesToWrite() == 0)
d->closeWriteChannel();
}

View File

@ -365,7 +365,6 @@ public:
STARTUPINFOW createStartupInfo();
bool callCreateProcess(QProcess::CreateProcessArguments *cpargs);
bool drainOutputPipes();
void flushPipeWriter();
qint64 pipeWriterBytesToWrite() const;
#endif

View File

@ -796,12 +796,6 @@ void QProcessPrivate::findExitCode()
}
}
void QProcessPrivate::flushPipeWriter()
{
if (stdinChannel.writer && stdinChannel.writer->bytesToWrite() > 0)
stdinChannel.writer->waitForWrite(ULONG_MAX);
}
qint64 QProcessPrivate::pipeWriterBytesToWrite() const
{
return stdinChannel.writer ? stdinChannel.writer->bytesToWrite() : qint64(0);

View File

@ -46,22 +46,22 @@
The QtDBus module has undergone some basic consolidation and
cleanup. There should be minimal porting effort to be able to switch to Qt6.
\section2 QDBusMessage
\section2 The QDBusMessage class
The QDBusMessage::call() and QDBusMessage::asyncCall() methods with a fixed
size of arguments have been removed in Qt6.
\section2 QDBusArgument
\section2 The QDBusArgument class
The QDBusArgument::operator<<() specializations for QHash, QMap and QList
have been unified into common specializations for associative containers.
\section2 QDBusConnection
\section2 The QDBusConnection class
The QDBusConnection::sender() function has been removed in Qt6.
\section2 QDBusMessage
\section2 The QDBusMessage class
The QDBusMessage::createErrorReply() function now takes the QString \c name
argument by const reference instead of taking by value.
\section2 QDBusPendingReply
\section2 The QDBusPendingReply class
QDBusPendingReply has been changed to be a variadic template class in order
to support more than 8 template parameters now. The template parameters
are the types that will be used to extract the contents of the reply's data.

View File

@ -43,18 +43,18 @@
\section1 Kernel classes
\section2 QBitmap
\section2 The QBitmap class
Implicit construction of a QBitmap from a QPixmap is no longer supported.
The constructor and assignment operator have been made explicit and marked as
deprecated. Use the new static factory function \l{QBitmap::}{fromPixmap} instead.
\section2 QCursor
\section2 The QCursor class
Implicit construction of a QCursor from a QPixmap is no longer supported, the
constructor has been made explicit.
\section2 QKeyCombination
\section2 The QKeyCombination class
QKeyCombination is a new class for storing a combination of a key with an
optional modifier. It should be used as a replacement for combining values from
@ -70,7 +70,7 @@
\section1 Text classes
\section2 QFontDatabase
\section2 The QFontDatabase class
The QFontDatabase class has now only static member functions. The constructor
has been deprecated. Instead of e.g.
@ -85,7 +85,7 @@
const QStringList fontFamilies = QFontDatabase::families();
\endcode
\section2 QFont
\section2 The QFont class
The numerical values of the QFont::Weight enumerator have been changed to
be in line with OpenType weight values. QFont::setWeight() expects an enum value
@ -117,7 +117,7 @@
In addition, the class \l QOpenGLWidget has been moved to a new module, named
Qt OpenGL Widgets.
\section2 QOpenGLContext
\section2 The QOpenGLContext class
The QOpenGLContext::versionFunctions() function is replaced by
QOpenGLVersionFunctionsFactory::get(). QOpenGLVersionFunctionsFactory is a public

View File

@ -115,8 +115,8 @@
\li QNetworkRequest::HTTP2WasUsedAttribute (use QNetworkRequest::Http2WasUsedAttribute).
\endlist
QNetworkRequest::FollowRedirectsAttribute is removed in Qt 6, see the section
about redirects handling below.
QNetworkRequest::FollowRedirectsAttribute is removed in Qt 6, see
\l {Redirect policies}{the section about redirects handling} below.
\section2 Configuring QSslSocket

View File

@ -67,7 +67,7 @@
\note A notable exception is \l QOpenGLContext, which still resides in
Qt Gui.
\section1 QOpenGLWidgets
\section1 The QOpenGLWidgets class
Another exception is the \l QOpenGLWidget class. This has been moved to a new
module named \c{Qt OpenGL Widgets} and should be included from there.

View File

@ -41,7 +41,7 @@
In this topic we summarize those changes in Qt SQL, and provide guidance
to handle them.
\section1 QSqlQuery
\section1 The QSqlQuery class
\section2 boundValues() Signature

View File

@ -43,7 +43,7 @@
\section1 Touch-related functionality
\section2 QTouchEventSequence
\section2 The QTouchEventSequence class
QTest::QTouchEventSequence functions taking a QWidget parameter has been moved
to a new class: QTest::QTouchEventWidgetSequence. The list of affected

View File

@ -43,7 +43,7 @@
\section1 Kernel classes
\section2 QWidget
\section2 The QWidget class
The virtual QWidget::enterEvent() handler now receives a QEnterEvent*
parameter which has information about the pointer position, rather than
@ -71,12 +71,12 @@
\section1 Widgets
\section2 QAbstractButton
\section2 The QAbstractButton class
The default timeout parameter for QAbstractButton::animateClick() is
removed to allow modern connection syntax without the need for qOverload.
\section2 QComboBox
\section2 The QComboBox class
The QComboBox::setModel() function is now virtual.