summaryrefslogtreecommitdiffstats
path: root/src/client/qwaylanddatasource.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/client/qwaylanddatasource.cpp')
-rw-r--r--src/client/qwaylanddatasource.cpp10
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);
}