Merge "QProcess/Win: implement async closing of write channel"
This commit is contained in:
commit
4b92dc14d9
@ -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();
|
||||
}
|
||||
|
||||
|
@ -365,7 +365,6 @@ public:
|
||||
STARTUPINFOW createStartupInfo();
|
||||
bool callCreateProcess(QProcess::CreateProcessArguments *cpargs);
|
||||
bool drainOutputPipes();
|
||||
void flushPipeWriter();
|
||||
qint64 pipeWriterBytesToWrite() const;
|
||||
#endif
|
||||
|
||||
|
@ -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);
|
||||
|
@ -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.
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
||||
|
@ -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.
|
||||
|
@ -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
|
||||
|
||||
|
@ -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
|
||||
|
@ -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.
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user