<!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>[38421] trunk/WebKit/mac</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/38421">38421</a></dd>
<dt>Author</dt> <dd>bolsinga@apple.com</dd>
<dt>Date</dt> <dd>2008-11-15 08:55:01 -0800 (Sat, 15 Nov 2008)</dd>
</dl>

<h3>Log Message</h3>
<pre>        Reviewed by Darin Adler.
        
        https://bugs.webkit.org/show_bug.cgi?id=21810
        Remove use of static C++ objects that are destroyed at exit time (destructors)

        Create DEFINE_STATIC_LOCAL macro. Change static local objects to leak to avoid 
        exit-time destructor. Update code that was changed to fix this issue that ran 
        into a gcc bug (&lt;rdar://problem/6354696&gt; Codegen issue with C++ static reference 
        in gcc build 5465). Also typdefs for template types needed to be added in some 
        cases so the type could make it through the macro successfully.

        Basically code of the form:
        static T m;
        becomes:
        DEFINE_STATIC_LOCAL(T, m, ());

        Also any code of the form:
        static T&amp; m = *new T;
        also becomes:
        DEFINE_STATIC_LOCAL(T, m, ());</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkWebKitmacChangeLog">trunk/WebKit/mac/ChangeLog</a></li>
<li><a href="#trunkWebKitmacHistoryWebBackForwardListmm">trunk/WebKit/mac/History/WebBackForwardList.mm</a></li>
<li><a href="#trunkWebKitmacHistoryWebHistoryItemmm">trunk/WebKit/mac/History/WebHistoryItem.mm</a></li>
<li><a href="#trunkWebKitmacMiscWebStringTruncatorm">trunk/WebKit/mac/Misc/WebStringTruncator.m</a></li>
<li><a href="#trunkWebKitmacPluginsWebBaseNetscapePluginStreammm">trunk/WebKit/mac/Plugins/WebBaseNetscapePluginStream.mm</a></li>
<li><a href="#trunkWebKitmacWebViewWebViewmm">trunk/WebKit/mac/WebView/WebView.mm</a></li>
</ul>

<h3>Added Paths</h3>
<ul>
<li><a href="#trunkWebKitmacForwardingHeaderswtfStdLibExtrash">trunk/WebKit/mac/ForwardingHeaders/wtf/StdLibExtras.h</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkWebKitmacChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/WebKit/mac/ChangeLog (38420 => 38421)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/WebKit/mac/ChangeLog        2008-11-15 08:22:22 UTC (rev 38420)
+++ trunk/WebKit/mac/ChangeLog        2008-11-15 16:55:01 UTC (rev 38421)
</span><span class="lines">@@ -1,3 +1,38 @@
</span><ins>+2008-11-14  Greg Bolsinga  &lt;bolsinga@apple.com&gt;
+
+        Reviewed by Darin Adler.
+        
+        https://bugs.webkit.org/show_bug.cgi?id=21810
+        Remove use of static C++ objects that are destroyed at exit time (destructors)
+
+        Create DEFINE_STATIC_LOCAL macro. Change static local objects to leak to avoid 
+        exit-time destructor. Update code that was changed to fix this issue that ran 
+        into a gcc bug (&lt;rdar://problem/6354696&gt; Codegen issue with C++ static reference 
+        in gcc build 5465). Also typdefs for template types needed to be added in some 
+        cases so the type could make it through the macro successfully.
+
+        Basically code of the form:
+        static T m;
+        becomes:
+        DEFINE_STATIC_LOCAL(T, m, ());
+
+        Also any code of the form:
+        static T&amp; m = *new T;
+        also becomes:
+        DEFINE_STATIC_LOCAL(T, m, ());
+
+        * ForwardingHeaders/wtf/StdLibExtras.h: Added.
+        * History/WebBackForwardList.mm:
+        (backForwardLists):
+        * History/WebHistoryItem.mm:
+        (historyItemWrappers):
+        * Misc/WebStringTruncator.m:
+        (fontFromNSFont):
+        * Plugins/WebBaseNetscapePluginStream.mm:
+        (streams):
+        * WebView/WebView.mm:
+        (aeDescFromJSValue):
+
</ins><span class="cx"> 2008-11-14  Dan Bernstein  &lt;mitz@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Reviewed by Darin Adler.
</span></span></pre></div>
<a id="trunkWebKitmacForwardingHeaderswtfStdLibExtrash"></a>
<div class="addfile"><h4>Added: trunk/WebKit/mac/ForwardingHeaders/wtf/StdLibExtras.h (0 => 38421)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/WebKit/mac/ForwardingHeaders/wtf/StdLibExtras.h                                (rev 0)
+++ trunk/WebKit/mac/ForwardingHeaders/wtf/StdLibExtras.h        2008-11-15 16:55:01 UTC (rev 38421)
</span><span class="lines">@@ -0,0 +1 @@
</span><ins>+#import &lt;JavaScriptCore/StdLibExtras.h&gt;
</ins></span></pre></div>
<a id="trunkWebKitmacHistoryWebBackForwardListmm"></a>
<div class="modfile"><h4>Modified: trunk/WebKit/mac/History/WebBackForwardList.mm (38420 => 38421)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/WebKit/mac/History/WebBackForwardList.mm        2008-11-15 08:22:22 UTC (rev 38420)
+++ trunk/WebKit/mac/History/WebBackForwardList.mm        2008-11-15 16:55:01 UTC (rev 38421)
</span><span class="lines">@@ -46,12 +46,15 @@
</span><span class="cx"> #import &lt;WebCore/WebCoreObjCExtras.h&gt;
</span><span class="cx"> #import &lt;wtf/Assertions.h&gt;
</span><span class="cx"> #import &lt;wtf/RetainPtr.h&gt;
</span><ins>+#import &lt;wtf/StdLibExtras.h&gt;
</ins><span class="cx"> 
</span><span class="cx"> using namespace WebCore;
</span><span class="cx"> 
</span><del>-static HashMap&lt;BackForwardList*, WebBackForwardList*&gt;&amp; backForwardLists()
</del><ins>+typedef HashMap&lt;BackForwardList*, WebBackForwardList*&gt; BackForwardListMap;
+
+static BackForwardListMap&amp; backForwardLists()
</ins><span class="cx"> {
</span><del>-    static HashMap&lt;BackForwardList*, WebBackForwardList*&gt; staticBackForwardLists;
</del><ins>+    DEFINE_STATIC_LOCAL(BackForwardListMap, staticBackForwardLists, ());
</ins><span class="cx">     return staticBackForwardLists;
</span><span class="cx"> }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkWebKitmacHistoryWebHistoryItemmm"></a>
<div class="modfile"><h4>Modified: trunk/WebKit/mac/History/WebHistoryItem.mm (38420 => 38421)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/WebKit/mac/History/WebHistoryItem.mm        2008-11-15 08:22:22 UTC (rev 38420)
+++ trunk/WebKit/mac/History/WebHistoryItem.mm        2008-11-15 16:55:01 UTC (rev 38421)
</span><span class="lines">@@ -51,6 +51,7 @@
</span><span class="cx"> #import &lt;WebCore/ThreadCheck.h&gt;
</span><span class="cx"> #import &lt;WebCore/WebCoreObjCExtras.h&gt;
</span><span class="cx"> #import &lt;wtf/Assertions.h&gt;
</span><ins>+#import &lt;wtf/StdLibExtras.h&gt;
</ins><span class="cx"> 
</span><span class="cx"> // Private keys used in the WebHistoryItem's dictionary representation.
</span><span class="cx"> // see 3245793 for explanation of &quot;lastVisitedDate&quot;
</span><span class="lines">@@ -65,12 +66,14 @@
</span><span class="cx"> 
</span><span class="cx"> using namespace WebCore;
</span><span class="cx"> 
</span><ins>+typedef HashMap&lt;HistoryItem*, WebHistoryItem*&gt; HistoryItemMap;
+
</ins><span class="cx"> static inline WebHistoryItemPrivate* kitPrivate(WebCoreHistoryItem* list) { return (WebHistoryItemPrivate*)list; }
</span><span class="cx"> static inline WebCoreHistoryItem* core(WebHistoryItemPrivate* list) { return (WebCoreHistoryItem*)list; }
</span><span class="cx"> 
</span><del>-HashMap&lt;HistoryItem*, WebHistoryItem*&gt;&amp; historyItemWrappers()
</del><ins>+HistoryItemMap&amp; historyItemWrappers()
</ins><span class="cx"> {
</span><del>-    static HashMap&lt;HistoryItem*, WebHistoryItem*&gt; historyItemWrappers;
</del><ins>+    DEFINE_STATIC_LOCAL(HistoryItemMap, historyItemWrappers, ());
</ins><span class="cx">     return historyItemWrappers;
</span><span class="cx"> }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkWebKitmacMiscWebStringTruncatorm"></a>
<div class="modfile"><h4>Modified: trunk/WebKit/mac/Misc/WebStringTruncator.m (38420 => 38421)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/WebKit/mac/Misc/WebStringTruncator.m        2008-11-15 08:22:22 UTC (rev 38420)
+++ trunk/WebKit/mac/Misc/WebStringTruncator.m        2008-11-15 16:55:01 UTC (rev 38421)
</span><span class="lines">@@ -33,6 +33,7 @@
</span><span class="cx"> #import &lt;WebCore/FontPlatformData.h&gt;
</span><span class="cx"> #import &lt;WebCore/PlatformString.h&gt;
</span><span class="cx"> #import &lt;WebCore/StringTruncator.h&gt;
</span><ins>+#import &lt;wtf/StdLibExtras.h&gt;
</ins><span class="cx"> 
</span><span class="cx"> using namespace WebCore;
</span><span class="cx"> 
</span><span class="lines">@@ -49,7 +50,7 @@
</span><span class="cx"> static Font&amp; fontFromNSFont(NSFont *font)
</span><span class="cx"> {
</span><span class="cx">     static NSFont *currentFont;
</span><del>-    static Font currentRenderer;
</del><ins>+    DEFINE_STATIC_LOCAL(Font, currentRenderer, ());
</ins><span class="cx"> 
</span><span class="cx">     if ([font isEqual:currentFont])
</span><span class="cx">         return currentRenderer;
</span></span></pre></div>
<a id="trunkWebKitmacPluginsWebBaseNetscapePluginStreammm"></a>
<div class="modfile"><h4>Modified: trunk/WebKit/mac/Plugins/WebBaseNetscapePluginStream.mm (38420 => 38421)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/WebKit/mac/Plugins/WebBaseNetscapePluginStream.mm        2008-11-15 08:22:22 UTC (rev 38420)
+++ trunk/WebKit/mac/Plugins/WebBaseNetscapePluginStream.mm        2008-11-15 16:55:01 UTC (rev 38421)
</span><span class="lines">@@ -45,6 +45,7 @@
</span><span class="cx"> #import &lt;WebCore/WebCoreObjCExtras.h&gt;
</span><span class="cx"> #import &lt;WebKitSystemInterface.h&gt;
</span><span class="cx"> #import &lt;wtf/HashMap.h&gt;
</span><ins>+#import &lt;wtf/StdLibExtras.h&gt;
</ins><span class="cx"> 
</span><span class="cx"> using namespace WebCore;
</span><span class="cx"> 
</span><span class="lines">@@ -55,7 +56,7 @@
</span><span class="cx"> typedef HashMap&lt;NPStream*, NPP&gt; StreamMap;
</span><span class="cx"> static StreamMap&amp; streams()
</span><span class="cx"> {
</span><del>-    static StreamMap staticStreams;
</del><ins>+    DEFINE_STATIC_LOCAL(StreamMap, staticStreams, ());
</ins><span class="cx">     return staticStreams;
</span><span class="cx"> }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkWebKitmacWebViewWebViewmm"></a>
<div class="modfile"><h4>Modified: trunk/WebKit/mac/WebView/WebView.mm (38420 => 38421)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/WebKit/mac/WebView/WebView.mm        2008-11-15 08:22:22 UTC (rev 38420)
+++ trunk/WebKit/mac/WebView/WebView.mm        2008-11-15 16:55:01 UTC (rev 38421)
</span><span class="lines">@@ -135,6 +135,7 @@
</span><span class="cx"> #import &lt;wtf/HashTraits.h&gt;
</span><span class="cx"> #import &lt;wtf/RefCountedLeakCounter.h&gt;
</span><span class="cx"> #import &lt;wtf/RefPtr.h&gt;
</span><ins>+#import &lt;wtf/StdLibExtras.h&gt;
</ins><span class="cx"> 
</span><span class="cx"> #if ENABLE(DASHBOARD_SUPPORT)
</span><span class="cx"> #import &lt;WebKit/WebDashboardRegion.h&gt;
</span><span class="lines">@@ -3611,7 +3612,7 @@
</span><span class="cx">             }
</span><span class="cx">         }
</span><span class="cx">         else if (object-&gt;inherits(&amp;JSArray::info)) {
</span><del>-            static HashSet&lt;JSObject*&gt; visitedElems;
</del><ins>+            DEFINE_STATIC_LOCAL(HashSet&lt;JSObject*&gt;, visitedElems, ());
</ins><span class="cx">             if (!visitedElems.contains(object)) {
</span><span class="cx">                 visitedElems.add(object);
</span><span class="cx">                 
</span></span></pre>
</div>
</div>

</body>
</html>