<html><head></head><body>Dear Костя and Teus,<br>
<br>
Thank you for your help trying to track this down. Teus, your code shows that you are indeed creating a separate SWMgr for each thread, as the SWMgr object is a local variable in that function.<br>
<br>
Костя, thanks for the backtraces. I remember talking about this a long while ago with you and thought you helped me clear up some statics that were causing trouble. I&#39;ll have a look at your backtracks when I get to my computer.<br>
<br>
Thanks again, both of you, for your time and assistance with this.<br>
<br>
Troy<br><br><div class="gmail_quote">On January 12, 2016 4:06:45 AM MST, &quot;Костя Маслюк&quot; &lt;kostyamaslyuk@gmail.com&gt; wrote:<blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">
<div dir="ltr"><a href="http://www.crosswire.org/tracker/browse/API-166">http://www.crosswire.org/tracker/browse/API-166</a> yet contain example and backtraces, is it something wrong with they?<br /></div><div class="gmail_extra"><br /><div class="gmail_quote">2016-01-12 11:28 GMT+04:00 Troy A. Griffitts <span dir="ltr">&lt;<a href="mailto:scribe@crosswire.org" target="_blank">scribe@crosswire.org</a>&gt;</span>:<br /><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div>Dear Teus,<br />
<br />
In what way are you accessing this code in a multi threaded fashion?<br />
<br />
Can you produce a small standalone program which exhibits the problem so we might debug?<br />
<br />
Thanks for your help improving things.<span class="HOEnZb"><font color="#888888"><br />
<br />
Troy<br />
<br /><br /></font></span><div class="gmail_quote"><div><div class="h5">On January 12, 2016 12:14:56 AM MST, Teus Benschop &lt;<a href="mailto:teusjannette@gmail.com" target="_blank">teusjannette@gmail.com</a>&gt; wrote:</div></div><blockquote class="gmail_quote" style="margin:0pt 0pt 0pt 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div><div class="h5">
<div dir="ltr">Hi,<div><br /></div><div>The ticket about thread safety exactly describes the problems I am seeing :)</div><div><br /></div><div>The code is this:</div><div><br /></div><div><div><span style="line-height:1.5">  sword::SWMgr manager (sword_logic_get_path ().c_str ());</span><br /></div><div><span style="line-height:1.5">  sword::SWModule *module = manager.getModule (module_name.c_str ());</span><br /></div><div>  if (module) {</div><div>    string key = osis + &quot; &quot; + convert_to_string (chapter).c_str () + &quot;:&quot; + convert_to_string (verse).c_str ();</div><div>    module-&gt;setKey (key.c_str ());</div><div><span style="line-height:1.5">    rendering = module-&gt;renderText();</span><br /></div><div><span style="line-height:1.5">  }</span><br /></div><div><br /></div></div><div>Indeed, the crashes relate to &quot;setKey&quot; and &quot;renderText&quot;, and not to &quot;SWMgr&quot;.</div><div>But I am happy to surround the entire block with a mutex, and it&#39;s working fine :)</div><div>Thank you for all your hard work!</div><div><br /></div><div>Teus.</div></div><br /><div class="gmail_quote"><div dir="ltr">On Mon, 11 Jan 2016 at 17:33 Troy A. Griffitts &lt;<a href="mailto:scribe@crosswire.org" target="_blank">scribe@crosswire.org</a>&gt; wrote:<br /></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div>Hi Teus,<br />
<br />
Yes, as Greg has pointed out, we&#39;ve done our best to make it easy to perform multitheaded operations with the library by allowing you to instantiate a new SWMgr for each thread. We don&#39;t use threading libraries ourself inside the engine to lock critical sections but instead we tried to avoid critical sections within one instance of an SWMgr. We allocate a distinct instance of SWMgr per thread in many of our friends, e.g., one SWMgr for display and one for search so we can search in a separate thread.<br />
<br />
With a standard threading mechanism included in C++11 we might consider conditionally compiling in support to assure some iffy common sections of code are in fact safe. I am specifically thinking of junk buffers in SWBuf (but I think we cleaned those up) and also FileMgr, which handles closing and reopening file handles at the system level when resources are tight.<br /><br /><div class="gmail_quote"></div></div><div><div class="gmail_quote">On January 11, 2016 5:52:58 AM MST, Teus Benschop &lt;<a href="mailto:teusjannette@gmail.com" target="_blank">teusjannette@gmail.com</a>&gt; wrote:</div></div><div><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0pt 0pt 0pt 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<div dir="ltr">Hi,<div><br /></div><div>When accessing libsword simultaneously from multiple threads, it often crashes. When surrounding the calls to the library with a mutex.lock and a mutex.unlock at the end, there&#39;s no crashes when accessing it in the same situation. I am seeing this on Linux and on the Mac. Should I do something in the library, or make a special call, to make it thread-safe? Or is surrounding the library calls with a mutex the recommended way to handle this?</div><div><br /></div><div>Teus.</div></div>
<p style="margin-top:2.5em;margin-bottom:1em;border-bottom:1px solid #000"></p></blockquote></div></div><div><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0pt 0pt 0pt 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><pre><br />sword-devel mailing list: <a href="mailto:sword-devel@crosswire.org" target="_blank">sword-devel@crosswire.org</a><br /><a href="http://www.crosswire.org/mailman/listinfo/sword-devel" target="_blank">http://www.crosswire.org/mailman/listinfo/sword-devel</a><br />Instructions to unsubscribe/change your settings at above page</pre></blockquote></div></div><div><br />
-- <br />
Sent from my Android device with K-9 Mail. Please excuse my brevity.</div>_______________________________________________<br />
sword-devel mailing list: <a href="mailto:sword-devel@crosswire.org" target="_blank">sword-devel@crosswire.org</a><br />
<a href="http://www.crosswire.org/mailman/listinfo/sword-devel" rel="noreferrer" target="_blank">http://www.crosswire.org/mailman/listinfo/sword-devel</a><br />
Instructions to unsubscribe/change your settings at above page</blockquote></div>
<p style="margin-top:2.5em;margin-bottom:1em;border-bottom:1px solid #000"></p></div></div><pre><hr /><span class=""><br />sword-devel mailing list: <a href="mailto:sword-devel@crosswire.org" target="_blank">sword-devel@crosswire.org</a><br /><a href="http://www.crosswire.org/mailman/listinfo/sword-devel" target="_blank">http://www.crosswire.org/mailman/listinfo/sword-devel</a><br />Instructions to unsubscribe/change your settings at above page</span></pre></blockquote></div><span class=""><br />
-- <br />
Sent from my Android device with K-9 Mail. Please excuse my brevity.</span></div><br />_______________________________________________<br />
sword-devel mailing list: <a href="mailto:sword-devel@crosswire.org">sword-devel@crosswire.org</a><br />
<a href="http://www.crosswire.org/mailman/listinfo/sword-devel" rel="noreferrer" target="_blank">http://www.crosswire.org/mailman/listinfo/sword-devel</a><br />
Instructions to unsubscribe/change your settings at above page<br /></blockquote></div><br /></div>
<p style="margin-top: 2.5em; margin-bottom: 1em; border-bottom: 1px solid #000"></p><pre class="k9mail"><hr /><br />sword-devel mailing list: sword-devel@crosswire.org<br /><a href="http://www.crosswire.org/mailman/listinfo/sword-devel">http://www.crosswire.org/mailman/listinfo/sword-devel</a><br />Instructions to unsubscribe/change your settings at above page</pre></blockquote></div><br>
-- <br>
Sent from my Android device with K-9 Mail. Please excuse my brevity.</body></html>