<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[183189] trunk/Source/WebKit2</title>
</head>
<body>

<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt;  }
#msg dl a { font-weight: bold}
#msg dl a:link    { color:#fc3; }
#msg dl a:active  { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff  {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta">
<dt>Revision</dt> <dd><a href="http://trac.webkit.org/projects/webkit/changeset/183189">183189</a></dd>
<dt>Author</dt> <dd>carlosgc@webkit.org</dd>
<dt>Date</dt> <dd>2015-04-23 09:53:05 -0700 (Thu, 23 Apr 2015)</dd>
</dl>

<h3>Log Message</h3>
<pre>[UNIX] Do not allow copies of IPC::Attachment
https://bugs.webkit.org/show_bug.cgi?id=144096

Reviewed by Darin Adler.

It ensures that the file descriptor ownership is always correctly
transferred. This way we can remove the dispose() method to
explicitly close the file descriptor and always close it in the
Attachment destructor (unless explicitly transferred to
IPC::Connection or SharedMemory). It simplifies the code and
ensure we don't leak file descriptors.

* Platform/IPC/ArgumentDecoder.cpp:
(IPC::ArgumentDecoder::~ArgumentDecoder): Remove the code to
explicitly dispose attachments.
(IPC::ArgumentDecoder::removeAttachment): Use WTF::move().
* Platform/IPC/ArgumentEncoder.cpp:
(IPC::ArgumentEncoder::~ArgumentEncoder): Remove the code to
explicitly dispose attachments.
(IPC::ArgumentEncoder::addAttachment): Use WTF::move().
(IPC::ArgumentEncoder::releaseAttachments): Simplify by using WTF::move().
* Platform/IPC/ArgumentEncoder.h:
* Platform/IPC/Attachment.cpp:
(IPC::Attachment::encode): Move a copy of the attachment, and
reset the file descriptor, since the ownership is passed to the encoder.
* Platform/IPC/Attachment.h: Make copy constructor and assignment
private to not allow public copies. The only copy allowed is done
by Attachment::encode(). Make m_fileDescriptor mutable so that we
can reset it in Attachment::encode() after passing the ownership
to the encoder.
* Platform/IPC/unix/AttachmentUnix.cpp:
(IPC::Attachment::~Attachment): Close the file descriptor if it
hasn't been released explicitly.
(IPC::Attachment::dispose): Deleted.
* Platform/IPC/unix/ConnectionUnix.cpp:
(IPC::Connection::processMessage): Do not use AttachmentResourceGuard.
(IPC::Connection::sendOutgoingMessage): Ditto.
(IPC::AttachmentResourceGuard::AttachmentResourceGuard): Deleted.
(IPC::AttachmentResourceGuard::~AttachmentResourceGuard): Deleted.
* Platform/unix/SharedMemoryUnix.cpp:
(WebKit::SharedMemory::Handle::~Handle): Do not call clear().
(WebKit::SharedMemory::Handle::clear): Reset the attachment.
* UIProcess/WebInspectorProxy.cpp:
(WebKit::WebInspectorProxy::createInspectorPage): Use WTF::move().
* WebProcess/Plugins/PluginProcessConnectionManager.cpp:
(WebKit::PluginProcessConnectionManager::getPluginProcessConnection):
Call releaseFileDescriptor() instead of fileDescritpro() since the
ownership is passed to the connection.</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkSourceWebKit2ChangeLog">trunk/Source/WebKit2/ChangeLog</a></li>
<li><a href="#trunkSourceWebKit2PlatformIPCArgumentDecodercpp">trunk/Source/WebKit2/Platform/IPC/ArgumentDecoder.cpp</a></li>
<li><a href="#trunkSourceWebKit2PlatformIPCArgumentEncodercpp">trunk/Source/WebKit2/Platform/IPC/ArgumentEncoder.cpp</a></li>
<li><a href="#trunkSourceWebKit2PlatformIPCArgumentEncoderh">trunk/Source/WebKit2/Platform/IPC/ArgumentEncoder.h</a></li>
<li><a href="#trunkSourceWebKit2PlatformIPCAttachmentcpp">trunk/Source/WebKit2/Platform/IPC/Attachment.cpp</a></li>
<li><a href="#trunkSourceWebKit2PlatformIPCAttachmenth">trunk/Source/WebKit2/Platform/IPC/Attachment.h</a></li>
<li><a href="#trunkSourceWebKit2PlatformIPCunixAttachmentUnixcpp">trunk/Source/WebKit2/Platform/IPC/unix/AttachmentUnix.cpp</a></li>
<li><a href="#trunkSourceWebKit2PlatformIPCunixConnectionUnixcpp">trunk/Source/WebKit2/Platform/IPC/unix/ConnectionUnix.cpp</a></li>
<li><a href="#trunkSourceWebKit2PlatformunixSharedMemoryUnixcpp">trunk/Source/WebKit2/Platform/unix/SharedMemoryUnix.cpp</a></li>
<li><a href="#trunkSourceWebKit2UIProcessWebInspectorProxycpp">trunk/Source/WebKit2/UIProcess/WebInspectorProxy.cpp</a></li>
<li><a href="#trunkSourceWebKit2WebProcessPluginsPluginProcessConnectionManagercpp">trunk/Source/WebKit2/WebProcess/Plugins/PluginProcessConnectionManager.cpp</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkSourceWebKit2ChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/ChangeLog (183188 => 183189)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/ChangeLog        2015-04-23 16:08:43 UTC (rev 183188)
+++ trunk/Source/WebKit2/ChangeLog        2015-04-23 16:53:05 UTC (rev 183189)
</span><span class="lines">@@ -1,3 +1,54 @@
</span><ins>+2015-04-23  Carlos Garcia Campos  &lt;cgarcia@igalia.com&gt;
+
+        [UNIX] Do not allow copies of IPC::Attachment
+        https://bugs.webkit.org/show_bug.cgi?id=144096
+
+        Reviewed by Darin Adler.
+
+        It ensures that the file descriptor ownership is always correctly
+        transferred. This way we can remove the dispose() method to
+        explicitly close the file descriptor and always close it in the
+        Attachment destructor (unless explicitly transferred to
+        IPC::Connection or SharedMemory). It simplifies the code and
+        ensure we don't leak file descriptors.
+
+        * Platform/IPC/ArgumentDecoder.cpp:
+        (IPC::ArgumentDecoder::~ArgumentDecoder): Remove the code to
+        explicitly dispose attachments.
+        (IPC::ArgumentDecoder::removeAttachment): Use WTF::move().
+        * Platform/IPC/ArgumentEncoder.cpp:
+        (IPC::ArgumentEncoder::~ArgumentEncoder): Remove the code to
+        explicitly dispose attachments.
+        (IPC::ArgumentEncoder::addAttachment): Use WTF::move().
+        (IPC::ArgumentEncoder::releaseAttachments): Simplify by using WTF::move().
+        * Platform/IPC/ArgumentEncoder.h:
+        * Platform/IPC/Attachment.cpp:
+        (IPC::Attachment::encode): Move a copy of the attachment, and
+        reset the file descriptor, since the ownership is passed to the encoder.
+        * Platform/IPC/Attachment.h: Make copy constructor and assignment
+        private to not allow public copies. The only copy allowed is done
+        by Attachment::encode(). Make m_fileDescriptor mutable so that we
+        can reset it in Attachment::encode() after passing the ownership
+        to the encoder.
+        * Platform/IPC/unix/AttachmentUnix.cpp:
+        (IPC::Attachment::~Attachment): Close the file descriptor if it
+        hasn't been released explicitly.
+        (IPC::Attachment::dispose): Deleted.
+        * Platform/IPC/unix/ConnectionUnix.cpp:
+        (IPC::Connection::processMessage): Do not use AttachmentResourceGuard.
+        (IPC::Connection::sendOutgoingMessage): Ditto.
+        (IPC::AttachmentResourceGuard::AttachmentResourceGuard): Deleted.
+        (IPC::AttachmentResourceGuard::~AttachmentResourceGuard): Deleted.
+        * Platform/unix/SharedMemoryUnix.cpp:
+        (WebKit::SharedMemory::Handle::~Handle): Do not call clear().
+        (WebKit::SharedMemory::Handle::clear): Reset the attachment.
+        * UIProcess/WebInspectorProxy.cpp:
+        (WebKit::WebInspectorProxy::createInspectorPage): Use WTF::move().
+        * WebProcess/Plugins/PluginProcessConnectionManager.cpp:
+        (WebKit::PluginProcessConnectionManager::getPluginProcessConnection):
+        Call releaseFileDescriptor() instead of fileDescritpro() since the
+        ownership is passed to the connection.
+
</ins><span class="cx"> 2015-04-23  Alexey Proskuryakov  &lt;ap@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Build fix.
</span></span></pre></div>
<a id="trunkSourceWebKit2PlatformIPCArgumentDecodercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/Platform/IPC/ArgumentDecoder.cpp (183188 => 183189)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/Platform/IPC/ArgumentDecoder.cpp        2015-04-23 16:08:43 UTC (rev 183188)
+++ trunk/Source/WebKit2/Platform/IPC/ArgumentDecoder.cpp        2015-04-23 16:53:05 UTC (rev 183189)
</span><span class="lines">@@ -47,13 +47,7 @@
</span><span class="cx"> {
</span><span class="cx">     ASSERT(m_buffer);
</span><span class="cx">     free(m_buffer);
</span><del>-#if !USE(UNIX_DOMAIN_SOCKETS)
</del><span class="cx">     // FIXME: We need to dispose of the mach ports in cases of failure.
</span><del>-#else
-    Vector&lt;Attachment&gt;::iterator end = m_attachments.end();
-    for (Vector&lt;Attachment&gt;::iterator it = m_attachments.begin(); it != end; ++it)
-        it-&gt;dispose();
-#endif
</del><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> static inline uint8_t* roundUpToAlignment(uint8_t* ptr, unsigned alignment)
</span><span class="lines">@@ -219,8 +213,7 @@
</span><span class="cx">     if (m_attachments.isEmpty())
</span><span class="cx">         return false;
</span><span class="cx"> 
</span><del>-    attachment = m_attachments.last();
-    m_attachments.removeLast();
</del><ins>+    attachment = m_attachments.takeLast();
</ins><span class="cx">     return true;
</span><span class="cx"> }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebKit2PlatformIPCArgumentEncodercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/Platform/IPC/ArgumentEncoder.cpp (183188 => 183189)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/Platform/IPC/ArgumentEncoder.cpp        2015-04-23 16:08:43 UTC (rev 183188)
+++ trunk/Source/WebKit2/Platform/IPC/ArgumentEncoder.cpp        2015-04-23 16:53:05 UTC (rev 183189)
</span><span class="lines">@@ -70,13 +70,7 @@
</span><span class="cx"> {
</span><span class="cx">     if (m_buffer != m_inlineBuffer)
</span><span class="cx">         freeBuffer(m_buffer, m_bufferCapacity);
</span><del>-
-#if !USE(UNIX_DOMAIN_SOCKETS)
</del><span class="cx">     // FIXME: We need to dispose of the attachments in cases of failure.
</span><del>-#else
-    for (size_t i = 0; i &lt; m_attachments.size(); ++i)
-        m_attachments[i].dispose();
-#endif
</del><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> static inline size_t roundUpToAlignment(size_t value, unsigned alignment)
</span><span class="lines">@@ -191,16 +185,14 @@
</span><span class="cx">     copyValueToBuffer(n, buffer);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void ArgumentEncoder::addAttachment(const Attachment&amp; attachment)
</del><ins>+void ArgumentEncoder::addAttachment(Attachment&amp;&amp; attachment)
</ins><span class="cx"> {
</span><del>-    m_attachments.append(attachment);
</del><ins>+    m_attachments.append(WTF::move(attachment));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> Vector&lt;Attachment&gt; ArgumentEncoder::releaseAttachments()
</span><span class="cx"> {
</span><del>-    Vector&lt;Attachment&gt; newList;
-    newList.swap(m_attachments);
-    return newList;
</del><ins>+    return WTF::move(m_attachments);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> } // namespace IPC
</span></span></pre></div>
<a id="trunkSourceWebKit2PlatformIPCArgumentEncoderh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/Platform/IPC/ArgumentEncoder.h (183188 => 183189)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/Platform/IPC/ArgumentEncoder.h        2015-04-23 16:08:43 UTC (rev 183188)
+++ trunk/Source/WebKit2/Platform/IPC/ArgumentEncoder.h        2015-04-23 16:53:05 UTC (rev 183189)
</span><span class="lines">@@ -65,7 +65,7 @@
</span><span class="cx">     uint8_t* buffer() const { return m_buffer; }
</span><span class="cx">     size_t bufferSize() const { return m_bufferSize; }
</span><span class="cx"> 
</span><del>-    void addAttachment(const Attachment&amp;);
</del><ins>+    void addAttachment(Attachment&amp;&amp;);
</ins><span class="cx">     Vector&lt;Attachment&gt; releaseAttachments();
</span><span class="cx">     void reserve(size_t);
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebKit2PlatformIPCAttachmentcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/Platform/IPC/Attachment.cpp (183188 => 183189)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/Platform/IPC/Attachment.cpp        2015-04-23 16:08:43 UTC (rev 183188)
+++ trunk/Source/WebKit2/Platform/IPC/Attachment.cpp        2015-04-23 16:53:05 UTC (rev 183189)
</span><span class="lines">@@ -52,7 +52,7 @@
</span><span class="cx"> 
</span><span class="cx"> void Attachment::encode(ArgumentEncoder&amp; encoder) const
</span><span class="cx"> {
</span><del>-    encoder.addAttachment(*this);
</del><ins>+    encoder.addAttachment(WTF::move(*const_cast&lt;Attachment*&gt;(this)));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> bool Attachment::decode(ArgumentDecoder&amp; decoder, Attachment&amp; attachment)
</span></span></pre></div>
<a id="trunkSourceWebKit2PlatformIPCAttachmenth"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/Platform/IPC/Attachment.h (183188 => 183189)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/Platform/IPC/Attachment.h        2015-04-23 16:08:43 UTC (rev 183188)
+++ trunk/Source/WebKit2/Platform/IPC/Attachment.h        2015-04-23 16:53:05 UTC (rev 183189)
</span><span class="lines">@@ -55,10 +55,9 @@
</span><span class="cx"> #elif USE(UNIX_DOMAIN_SOCKETS)
</span><span class="cx">     Attachment(Attachment&amp;&amp;);
</span><span class="cx">     Attachment&amp; operator=(Attachment&amp;&amp;);
</span><del>-    Attachment(const Attachment&amp;) = default;
-    Attachment&amp; operator=(Attachment&amp;) = default;
</del><span class="cx">     Attachment(int fileDescriptor, size_t);
</span><span class="cx">     Attachment(int fileDescriptor);
</span><ins>+    ~Attachment();
</ins><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="cx">     Type type() const { return m_type; }
</span><span class="lines">@@ -75,8 +74,6 @@
</span><span class="cx"> 
</span><span class="cx">     int releaseFileDescriptor() { int temp = m_fileDescriptor; m_fileDescriptor = -1; return temp; }
</span><span class="cx">     int fileDescriptor() const { return m_fileDescriptor; }
</span><del>-
-    void dispose();
</del><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="cx">     void encode(ArgumentEncoder&amp;) const;
</span></span></pre></div>
<a id="trunkSourceWebKit2PlatformIPCunixAttachmentUnixcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/Platform/IPC/unix/AttachmentUnix.cpp (183188 => 183189)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/Platform/IPC/unix/AttachmentUnix.cpp        2015-04-23 16:08:43 UTC (rev 183188)
+++ trunk/Source/WebKit2/Platform/IPC/unix/AttachmentUnix.cpp        2015-04-23 16:53:05 UTC (rev 183189)
</span><span class="lines">@@ -67,13 +67,10 @@
</span><span class="cx">     return *this;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void Attachment::dispose()
</del><ins>+Attachment::~Attachment()
</ins><span class="cx"> {
</span><del>-    if (m_fileDescriptor == -1)
-        return;
-
-    closeWithRetry(m_fileDescriptor);
-    m_fileDescriptor = -1;
</del><ins>+    if (m_fileDescriptor != -1)
+        closeWithRetry(m_fileDescriptor);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> } // namespace IPC
</span></span></pre></div>
<a id="trunkSourceWebKit2PlatformIPCunixConnectionUnixcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/Platform/IPC/unix/ConnectionUnix.cpp (183188 => 183189)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/Platform/IPC/unix/ConnectionUnix.cpp        2015-04-23 16:08:43 UTC (rev 183188)
+++ trunk/Source/WebKit2/Platform/IPC/unix/ConnectionUnix.cpp        2015-04-23 16:53:05 UTC (rev 183189)
</span><span class="lines">@@ -155,23 +155,6 @@
</span><span class="cx">     m_isConnected = false;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-template&lt;class T, class iterator&gt;
-class AttachmentResourceGuard {
-public:
-    AttachmentResourceGuard(T&amp; attachments)
-        : m_attachments(attachments)
-    {
-    }
-    ~AttachmentResourceGuard()
-    {
-        iterator end = m_attachments.end();
-        for (iterator i = m_attachments.begin(); i != end; ++i)
-            i-&gt;dispose();
-    }
-private:
-    T&amp; m_attachments;
-};
-
</del><span class="cx"> bool Connection::processMessage()
</span><span class="cx"> {
</span><span class="cx">     if (m_readBufferSize &lt; sizeof(MessageInfo))
</span><span class="lines">@@ -214,7 +197,6 @@
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     Vector&lt;Attachment&gt; attachments(attachmentCount);
</span><del>-    AttachmentResourceGuard&lt;Vector&lt;Attachment&gt;, Vector&lt;Attachment&gt;::iterator&gt; attachementDisposer(attachments);
</del><span class="cx">     RefPtr&lt;WebKit::SharedMemory&gt; oolMessageBody;
</span><span class="cx"> 
</span><span class="cx">     size_t fdIndex = 0;
</span><span class="lines">@@ -423,8 +405,6 @@
</span><span class="cx">     COMPILE_ASSERT(sizeof(MessageInfo) + attachmentMaxAmount * sizeof(size_t) &lt;= messageMaxSize, AttachmentsFitToMessageInline);
</span><span class="cx"> 
</span><span class="cx">     Vector&lt;Attachment&gt; attachments = encoder-&gt;releaseAttachments();
</span><del>-    AttachmentResourceGuard&lt;Vector&lt;Attachment&gt;, Vector&lt;Attachment&gt;::iterator&gt; attachementDisposer(attachments);
-
</del><span class="cx">     if (attachments.size() &gt; (attachmentMaxAmount - 1)) {
</span><span class="cx">         ASSERT_NOT_REACHED();
</span><span class="cx">         return false;
</span></span></pre></div>
<a id="trunkSourceWebKit2PlatformunixSharedMemoryUnixcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/Platform/unix/SharedMemoryUnix.cpp (183188 => 183189)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/Platform/unix/SharedMemoryUnix.cpp        2015-04-23 16:08:43 UTC (rev 183188)
+++ trunk/Source/WebKit2/Platform/unix/SharedMemoryUnix.cpp        2015-04-23 16:53:05 UTC (rev 183189)
</span><span class="lines">@@ -52,12 +52,11 @@
</span><span class="cx"> 
</span><span class="cx"> SharedMemory::Handle::~Handle()
</span><span class="cx"> {
</span><del>-    clear();
</del><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void SharedMemory::Handle::clear()
</span><span class="cx"> {
</span><del>-    m_attachment.dispose();
</del><ins>+    m_attachment = IPC::Attachment();
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> bool SharedMemory::Handle::isNull() const
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessWebInspectorProxycpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/WebInspectorProxy.cpp (183188 => 183189)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/WebInspectorProxy.cpp        2015-04-23 16:08:43 UTC (rev 183188)
+++ trunk/Source/WebKit2/UIProcess/WebInspectorProxy.cpp        2015-04-23 16:53:05 UTC (rev 183189)
</span><span class="lines">@@ -486,7 +486,7 @@
</span><span class="cx">         return;
</span><span class="cx"> 
</span><span class="cx">     m_underTest = underTest;
</span><del>-    m_connectionIdentifier = connectionIdentifier;
</del><ins>+    m_connectionIdentifier = WTF::move(connectionIdentifier);
</ins><span class="cx"> 
</span><span class="cx">     m_inspectorPage-&gt;process().send(Messages::WebInspectorUI::EstablishConnection(m_connectionIdentifier, m_inspectedPage-&gt;pageID(), m_underTest), m_inspectorPage-&gt;pageID());
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebKit2WebProcessPluginsPluginProcessConnectionManagercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/WebProcess/Plugins/PluginProcessConnectionManager.cpp (183188 => 183189)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/WebProcess/Plugins/PluginProcessConnectionManager.cpp        2015-04-23 16:08:43 UTC (rev 183188)
+++ trunk/Source/WebKit2/WebProcess/Plugins/PluginProcessConnectionManager.cpp        2015-04-23 16:53:05 UTC (rev 183189)
</span><span class="lines">@@ -76,13 +76,11 @@
</span><span class="cx"> 
</span><span class="cx"> #if OS(DARWIN)
</span><span class="cx">     IPC::Connection::Identifier connectionIdentifier(encodedConnectionIdentifier.port());
</span><del>-    if (IPC::Connection::identifierIsNull(connectionIdentifier))
-        return 0;
</del><span class="cx"> #elif USE(UNIX_DOMAIN_SOCKETS)
</span><del>-    IPC::Connection::Identifier connectionIdentifier = encodedConnectionIdentifier.fileDescriptor();
-    if (connectionIdentifier == -1)
-        return 0;
</del><ins>+    IPC::Connection::Identifier connectionIdentifier = encodedConnectionIdentifier.releaseFileDescriptor();
</ins><span class="cx"> #endif
</span><ins>+    if (IPC::Connection::identifierIsNull(connectionIdentifier))
+        return nullptr;
</ins><span class="cx"> 
</span><span class="cx">     RefPtr&lt;PluginProcessConnection&gt; pluginProcessConnection = PluginProcessConnection::create(this, pluginProcessToken, connectionIdentifier, supportsAsynchronousInitialization);
</span><span class="cx">     m_pluginProcessConnections.append(pluginProcessConnection);
</span></span></pre>
</div>
</div>

</body>
</html>