diff options
-rw-r--r-- | src/client/qwaylanddatasource.cpp | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/src/client/qwaylanddatasource.cpp b/src/client/qwaylanddatasource.cpp index 036bd0d86..c61de181b 100644 --- a/src/client/qwaylanddatasource.cpp +++ b/src/client/qwaylanddatasource.cpp @@ -48,6 +48,7 @@ #include <QtCore/QDebug> #include <unistd.h> +#include <signal.h> #if QT_CONFIG(draganddrop) @@ -85,7 +86,16 @@ void QWaylandDataSource::data_source_send(const QString &mime_type, int32_t fd) { QByteArray content = QWaylandMimeHelper::getByteArray(m_mime_data, mime_type); if (!content.isEmpty()) { + // Create a sigpipe handler that does nothing, or clients may be forced to terminate + // if the pipe is closed in the other end. + struct sigaction action, oldAction; + action.sa_handler = SIG_IGN; + sigemptyset (&action.sa_mask); + action.sa_flags = 0; + + sigaction(SIGPIPE, &action, &oldAction); write(fd, content.constData(), content.size()); + sigaction(SIGPIPE, &oldAction, nullptr); } close(fd); } |