<html><head></head><body><div style="font-family: Verdana;font-size: 12.0px;"><div style="font-family: Verdana;font-size: 12.0px;">
<div>Lately I've migrated my OS from 13.04 to 13.10. Now My C++ code doesn't compile anymore.</div>
<div>Now any C++ compile using GNU 4.8.1 compiler crashes with:
<pre class="lang-c prettyprint prettyprinted" style=""><code><span class="pln">terminate called after throwing an instance of </span><span class="str">'std::system_error'</span><span class="pln">
what</span><span class="pun">():</span><span class="pln"> </span><span class="typ">Unknown</span><span class="pln"> error </span><span class="pun">-</span><span class="lit">1</span><span class="pln">
</span><span class="typ">Aborted</span><span class="pln"> </span><span class="pun">(</span><span class="pln">core dumped</span><span class="pun">)</span></code></pre>
<div>he failure exist. I tried Xubuntu 13.10 32bit and 64bit version. Failure exist on both. GDB reports:
<pre class="lang-c prettyprint prettyprinted" style=""><code><span class="typ">Program</span><span class="pln"> received signal SIGABRT</span><span class="pun">,</span><span class="pln"> </span><span class="typ">Aborted</span><span class="pun">.</span><span class="pln">
</span><span class="lit">0x00007ffff6c33f77</span><span class="pln"> in __GI_raise </span><span class="pun">(</span><span class="pln">sig</span><span class="pun">=</span><span class="pln">sig@entry</span><span class="pun">=</span><span class="lit">6</span><span class="pun">)</span><span class="pln">
at </span><span class="pun">../</span><span class="pln">nptl</span><span class="pun">/</span><span class="pln">sysdeps</span><span class="pun">/</span><span class="pln">unix</span><span class="pun">/</span><span class="pln">sysv</span><span class="pun">/</span><span class="pln">linux</span><span class="pun">/</span><span class="pln">raise</span><span class="pun">.</span><span class="pln">c</span><span class="pun">:</span><span class="lit">56</span><span class="pln">
</span><span class="lit">56</span><span class="pln"> </span><span class="pun">../</span><span class="pln">nptl</span><span class="pun">/</span><span class="pln">sysdeps</span><span class="pun">/</span><span class="pln">unix</span><span class="pun">/</span><span class="pln">sysv</span><span class="pun">/</span><span class="pln">linux</span><span class="pun">/</span><span class="pln">raise</span><span class="pun">.</span><span class="pln">c</span><span class="pun">:</span><span class="pln"> </span><span class="typ">No</span><span class="pln"> such file or directory</span><span class="pun">.</span></code></pre>
<div>
<p>Meanwhile I figured out that the problem is based on my singleton implementation. This implementation works successfully with MinGW-64 on Windows platform in handshake with GCC 4.8 and with Xubuntu 13.04 (32 and 64bit):</p>
<pre class="lang-c prettyprint prettyprinted" style=""><code><span class="kwd">namespace</span><span class="pln"> binrev</span><span class="pun">{</span><span class="pln">
</span><span class="kwd">namespace</span><span class="pln"> brCore</span><span class="pun">{</span><span class="pln">
</span><span class="kwd">template</span><span class="pln"> </span><span class="pun"><</span><span class="kwd">typename</span><span class="pln"> T</span><span class="pun">></span><span class="pln">
</span><span class="kwd">class</span><span class="pln"> DLL_EXPORT brSingleton
</span><span class="pun">{</span><span class="pln">
</span><span class="kwd">public</span><span class="pun">:</span><span class="pln">
</span><span class="kwd">static</span><span class="pln"> T</span><span class="pun">&</span><span class="pln"> getInstance</span><span class="pun">()</span><span class="pln">
</span><span class="pun">{</span><span class="pln">
std</span><span class="pun">::</span><span class="pln">call_once</span><span class="pun">(</span><span class="pln">m_once</span><span class="pun">,</span><span class="pln"> safe_create</span><span class="pun">);</span><span class="pln">
</span><span class="kwd">return</span><span class="pln"> </span><span class="pun">*</span><span class="pln">m_instance</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
</span><span class="kwd">protected</span><span class="pun">:</span><span class="pln">
brSingleton</span><span class="pun">(</span><span class="kwd">const</span><span class="pln"> std</span><span class="pun">::</span><span class="pln">string</span><span class="pun">&</span><span class="pln"> name</span><span class="pun">)</span><span class="pln">
</span><span class="pun">:</span><span class="pln"> m_name</span><span class="pun">(</span><span class="pln">name</span><span class="pun">)</span><span class="pln">
</span><span class="pun">{}</span><span class="pln">
</span><span class="kwd">static</span><span class="pln"> </span><span class="kwd">void</span><span class="pln"> safe_create</span><span class="pun">()</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
brSingleton</span><span class="pun">::</span><span class="pln">m_instance</span><span class="pun">.</span><span class="pln">reset</span><span class="pun">(</span><span class="kwd">new</span><span class="pln"> T</span><span class="pun">());</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
brSingleton</span><span class="pun">(</span><span class="kwd">const</span><span class="pln"> brSingleton</span><span class="pun">&</span><span class="pln"> rs</span><span class="pun">)</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">delete</span><span class="pun">;</span><span class="pln">
brSingleton</span><span class="pun">&</span><span class="pln"> </span><span class="kwd">operator</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="pun">(</span><span class="kwd">const</span><span class="pln"> brSingleton</span><span class="pun">&</span><span class="pln"> rs</span><span class="pun">)</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">delete</span><span class="pun">;</span><span class="pln">
</span><span class="kwd">virtual</span><span class="pln"> </span><span class="pun">~</span><span class="pln">brSingleton</span><span class="pun">(){}</span><span class="pln">
</span><span class="kwd">protected</span><span class="pun">:</span><span class="pln">
</span><span class="kwd">static</span><span class="pln"> std</span><span class="pun">::</span><span class="pln">unique_ptr</span><span class="pun"><</span><span class="pln">T</span><span class="pun">></span><span class="pln"> m_instance</span><span class="pun">;</span><span class="pln">
</span><span class="kwd">static</span><span class="pln"> std</span><span class="pun">::</span><span class="pln">once_flag m_once</span><span class="pun">;</span><span class="pln">
std</span><span class="pun">::</span><span class="pln">string m_name</span><span class="pun">;</span><span class="pln">
</span><span class="pun">};</span><span class="pln">
</span><span class="kwd">template</span><span class="pun"><</span><span class="kwd">typename</span><span class="pln"> T</span><span class="pun">></span><span class="pln">
std</span><span class="pun">::</span><span class="pln">once_flag brSingleton</span><span class="pun"><</span><span class="pln">T</span><span class="pun">>::</span><span class="pln">m_once</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="com">// ns-brCore</span><span class="pln">
</span><span class="pun">}</span><span class="com">// ns-binrev</span></code></pre>
<p>If I call getInstance at concrete singleton implementation, the crash occurs on std::call_once function call.</p>
<p>I'm running out of ideas. Has anyone an idea what's going wrong? Thanks.</p>
</div>
</div>
</div>
</div></div></body></html>