Interesting.  I also found this:

#if wxUSE_UNICODE_UTF8
  // NB: In UTF-8 build, (non-const) iterator needs to keep reference
  //     to the underlying wxStringImpl, because UTF-8 is variable-length
  //     encoding and changing the value pointer to by an iterator (using
  //     its operator*) requires calling wxStringImpl::replace() if the old
  //     and new values differ in their encoding's length.
  //
  //     Furthermore, the replace() call may invalid all iterators for the
  //     string, so we have to keep track of outstanding iterators and update
  //     them if replace() happens.
  //
  //     This is implemented by maintaining linked list of iterators for every
  //     string and traversing it in wxUniCharRef::operator=(). Head of the
  //     list is stored in wxString. (FIXME-UTF8)
At least they have a “FIXME” for it. :(

Cheers,
Jeff.

> On 2 Aug 2018, at 18:05, Seth Hillbrand <s...@hillbrand.org> wrote:
> 
> Hi Jeff-
> 
> Good find.  I note here (http://docs.wxwidgets.org/3.0/classwx_string.html 
> <http://docs.wxwidgets.org/3.0/classwx_string.html>) that the use of wxString 
> is explicitly discouraged:
> 
> "While the use of wxString is unavoidable in wxWidgets program, you are 
> encouraged to use the standard string classes std::string or std::wstring in 
> your applications and convert them to and from wxString only when interacting 
> with wxWidgets."
> 
> I imagine that this or similar is what they had in mind.
> 
> -S
> 
> Am Do., 2. Aug. 2018 um 10:02 Uhr schrieb Jeff Young <j...@rokeby.ie 
> <mailto:j...@rokeby.ie>>:
> I finally caught a long-standing but very infrequent crash in the debugger.  
> It’s somewhat harrowing.
> 
> wxString keeps multiple iterators on a string up-to-date with regard to 
> editing.  It keeps them in a linked list.  If you reference a global string 
> in a thread (even in a const manner, such as taking its length), wxString 
> will create an interator in your thread, link it into the list, and then 
> unlink it when done (with no thread safety).  Sooner or later, this will 
> crash.
> 
> This is the offending line:
>    wxString wildcard = wxT( "*." ) + KiCadFootprintFileExtension;
> Looks innocuous enough, doesn’t it?
> 
> Anyway, something to keep in mind….
> _______________________________________________
> Mailing list: https://launchpad.net/~kicad-developers 
> <https://launchpad.net/~kicad-developers>
> Post to     : kicad-developers@lists.launchpad.net 
> <mailto:kicad-developers@lists.launchpad.net>
> Unsubscribe : https://launchpad.net/~kicad-developers 
> <https://launchpad.net/~kicad-developers>
> More help   : https://help.launchpad.net/ListHelp 
> <https://help.launchpad.net/ListHelp>

_______________________________________________
Mailing list: https://launchpad.net/~kicad-developers
Post to     : kicad-developers@lists.launchpad.net
Unsubscribe : https://launchpad.net/~kicad-developers
More help   : https://help.launchpad.net/ListHelp

Reply via email to