kicad-developers team mailing list archive
Mailing list archive
Re: More wxString multi-threading issues
The globals wouldn’t be so bad. It’s the EDA_TEXT’s m_Text field that’s the biggest issue. Protecting that would mean no longer returning a reference from GetText(). But that might not be so terrible….
FWIW, Kicad does use wchar_t everywhere it fetches or sets a wxString. It’s just the internal encoding of wxString that’s UTF-8. (Switching mostly just means a compile flag — but I agree it’s bound to turn up some bugs.)
> On 3 Apr 2019, at 15:05, Brian <lotharyx@xxxxxxxxx> wrote:
> My $0.02: Is shifting the whole of kicad to wchar_t (along with all the necessary conversions to/from multibyte for IO) easier than wrapping some globals inside locks for thread-safety? Having dealt with an application that uses ASCII, UTF-16, and UTF-8 in various contexts (my day job), I can say honestly that it’s a bit of a pain in the neck. What would break if these global strings were protected by FCFS locks?
>> On Apr 3, 2019, at 9:35 AM, Jeff Young <jeff@xxxxxxxxx> wrote:
>> Jon is currently fighting another wxString multi-threading issue. Having done quite a few of these myself, I feel for him.
>> A lot of them were threaded accesses to globals, so it was easy enough to make the globals std::strings. However, this one is EDA_TEXT’s m_Text field. That’s going to be a pretty big change to move to std::string. And it’s nearly impossible to compartmentalise because returning a const& isn’t really const (iterating over the string will modify the linked-list of iterators, which is where the trouble comes in).
>> What about moving Kicad to UTF16 internally? (The linked list of iterators is a performance optimisation specifically for UTF8 builds.)
>> Mailing list: https://launchpad.net/~kicad-developers
>> Post to : kicad-developers@xxxxxxxxxxxxxxxxxxx
>> Unsubscribe : https://launchpad.net/~kicad-developers
>> More help : https://help.launchpad.net/ListHelp