summaryrefslogtreecommitdiffstats
path: root/ipc/chromium/src/chrome/common
diff options
context:
space:
mode:
Diffstat (limited to 'ipc/chromium/src/chrome/common')
-rw-r--r--ipc/chromium/src/chrome/common/ipc_channel_posix.cc11
-rw-r--r--ipc/chromium/src/chrome/common/transport_dib.h8
2 files changed, 14 insertions, 5 deletions
diff --git a/ipc/chromium/src/chrome/common/ipc_channel_posix.cc b/ipc/chromium/src/chrome/common/ipc_channel_posix.cc
index 0d3a2b16c..9a8858656 100644
--- a/ipc/chromium/src/chrome/common/ipc_channel_posix.cc
+++ b/ipc/chromium/src/chrome/common/ipc_channel_posix.cc
@@ -8,6 +8,7 @@
#include <errno.h>
#include <fcntl.h>
+#include <limits.h>
#if defined(OS_MACOSX)
#include <sched.h>
#endif
@@ -39,8 +40,16 @@
#include "mozilla/ipc/Faulty.h"
#endif
-// Work around possible OS limitations.
+// Use OS specific iovec array limit where it's possible
+#if defined(IOV_MAX)
+static const size_t kMaxIOVecSize = IOV_MAX;
+// IOV_MAX isn't defined on Android, but the hard-coded 256 works well.
+#elif defined(ANDROID)
static const size_t kMaxIOVecSize = 256;
+// On all other platforms, fallback to 16 (_XOPEN_IOV_MAX) as a safe bet.
+#else
+static const size_t kMaxIOVecSize = 16;
+#endif
#ifdef MOZ_TASK_TRACER
#include "GeckoTaskTracerImpl.h"
diff --git a/ipc/chromium/src/chrome/common/transport_dib.h b/ipc/chromium/src/chrome/common/transport_dib.h
index b1e5c0fab..f40a97d17 100644
--- a/ipc/chromium/src/chrome/common/transport_dib.h
+++ b/ipc/chromium/src/chrome/common/transport_dib.h
@@ -15,7 +15,7 @@
#if defined(OS_WIN)
#include <windows.h>
-#elif defined(OS_LINUX)
+#elif defined(OS_LINUX) || defined(OS_SOLARIS)
#include "chrome/common/x11_util.h"
#endif
@@ -68,7 +68,7 @@ class TransportDIB {
typedef base::SharedMemoryHandle Handle;
// On Mac, the inode number of the backing file is used as an id.
typedef base::SharedMemoryId Id;
-#elif defined(OS_LINUX)
+#elif defined(OS_LINUX) || defined(OS_SOLARIS)
typedef int Handle; // These two ints are SysV IPC shared memory keys
typedef int Id;
#endif
@@ -98,7 +98,7 @@ class TransportDIB {
// wire to give this transport DIB to another process.
Handle handle() const;
-#if defined(OS_LINUX)
+#if defined(OS_LINUX) || defined(OS_SOLARIS)
// Map the shared memory into the X server and return an id for the shared
// segment.
XID MapToX(Display* connection);
@@ -109,7 +109,7 @@ class TransportDIB {
#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_BSD)
explicit TransportDIB(base::SharedMemoryHandle dib);
base::SharedMemory shared_memory_;
-#elif defined(OS_LINUX)
+#elif defined(OS_LINUX) || defined(OS_SOLARIS)
int key_; // SysV shared memory id
void* address_; // mapped address
XID x_shm_; // X id for the shared segment