Fix a memory leak when using non-wx threads

The wxThreadSpecificInfo object created by wxThreadSpecificInfo::Get()
was only released by the wxThreadInternal's cleanup, which meant that it
was leaked if wxThreadSpecificInfo::Get() was called by a thread not
created by wxThread, e.g. when using std::async or std::thread.

Fix this by simply using C++11 thread_local and removing the entire
wxThreadSpecificInfo machinery entirely.

See #23535.

Closes #23543.
This commit is contained in:
Antti Nietosvaara 2023-05-10 15:13:08 +03:00 committed by Vadim Zeitlin
parent e85b431686
commit d666d1e222
17 changed files with 15 additions and 272 deletions

View file

@ -902,7 +902,6 @@ ALL_BASE_SOURCES = \
src/common/tarstrm.cpp \ src/common/tarstrm.cpp \
src/common/textbuf.cpp \ src/common/textbuf.cpp \
src/common/textfile.cpp \ src/common/textfile.cpp \
src/common/threadinfo.cpp \
src/common/time.cpp \ src/common/time.cpp \
src/common/timercmn.cpp \ src/common/timercmn.cpp \
src/common/timerimpl.cpp \ src/common/timerimpl.cpp \
@ -1108,7 +1107,6 @@ MONODLL_OBJECTS = \
monodll_tarstrm.o \ monodll_tarstrm.o \
monodll_textbuf.o \ monodll_textbuf.o \
monodll_textfile.o \ monodll_textfile.o \
monodll_threadinfo.o \
monodll_time.o \ monodll_time.o \
monodll_timercmn.o \ monodll_timercmn.o \
monodll_timerimpl.o \ monodll_timerimpl.o \
@ -1268,7 +1266,6 @@ MONOLIB_OBJECTS = \
monolib_tarstrm.o \ monolib_tarstrm.o \
monolib_textbuf.o \ monolib_textbuf.o \
monolib_textfile.o \ monolib_textfile.o \
monolib_threadinfo.o \
monolib_time.o \ monolib_time.o \
monolib_timercmn.o \ monolib_timercmn.o \
monolib_timerimpl.o \ monolib_timerimpl.o \
@ -1397,7 +1394,6 @@ BASEDLL_OBJECTS = \
basedll_tarstrm.o \ basedll_tarstrm.o \
basedll_textbuf.o \ basedll_textbuf.o \
basedll_textfile.o \ basedll_textfile.o \
basedll_threadinfo.o \
basedll_time.o \ basedll_time.o \
basedll_timercmn.o \ basedll_timercmn.o \
basedll_timerimpl.o \ basedll_timerimpl.o \
@ -1508,7 +1504,6 @@ BASELIB_OBJECTS = \
baselib_tarstrm.o \ baselib_tarstrm.o \
baselib_textbuf.o \ baselib_textbuf.o \
baselib_textfile.o \ baselib_textfile.o \
baselib_threadinfo.o \
baselib_time.o \ baselib_time.o \
baselib_timercmn.o \ baselib_timercmn.o \
baselib_timerimpl.o \ baselib_timerimpl.o \
@ -14888,9 +14883,6 @@ monodll_textbuf.o: $(srcdir)/src/common/textbuf.cpp $(MONODLL_ODEP)
monodll_textfile.o: $(srcdir)/src/common/textfile.cpp $(MONODLL_ODEP) monodll_textfile.o: $(srcdir)/src/common/textfile.cpp $(MONODLL_ODEP)
$(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/common/textfile.cpp $(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/common/textfile.cpp
monodll_threadinfo.o: $(srcdir)/src/common/threadinfo.cpp $(MONODLL_ODEP)
$(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/common/threadinfo.cpp
monodll_time.o: $(srcdir)/src/common/time.cpp $(MONODLL_ODEP) monodll_time.o: $(srcdir)/src/common/time.cpp $(MONODLL_ODEP)
$(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/common/time.cpp $(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/common/time.cpp
@ -19631,9 +19623,6 @@ monolib_textbuf.o: $(srcdir)/src/common/textbuf.cpp $(MONOLIB_ODEP)
monolib_textfile.o: $(srcdir)/src/common/textfile.cpp $(MONOLIB_ODEP) monolib_textfile.o: $(srcdir)/src/common/textfile.cpp $(MONOLIB_ODEP)
$(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $(srcdir)/src/common/textfile.cpp $(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $(srcdir)/src/common/textfile.cpp
monolib_threadinfo.o: $(srcdir)/src/common/threadinfo.cpp $(MONOLIB_ODEP)
$(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $(srcdir)/src/common/threadinfo.cpp
monolib_time.o: $(srcdir)/src/common/time.cpp $(MONOLIB_ODEP) monolib_time.o: $(srcdir)/src/common/time.cpp $(MONOLIB_ODEP)
$(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $(srcdir)/src/common/time.cpp $(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $(srcdir)/src/common/time.cpp
@ -24374,9 +24363,6 @@ basedll_textbuf.o: $(srcdir)/src/common/textbuf.cpp $(BASEDLL_ODEP)
basedll_textfile.o: $(srcdir)/src/common/textfile.cpp $(BASEDLL_ODEP) basedll_textfile.o: $(srcdir)/src/common/textfile.cpp $(BASEDLL_ODEP)
$(CXXC) -c -o $@ $(BASEDLL_CXXFLAGS) $(srcdir)/src/common/textfile.cpp $(CXXC) -c -o $@ $(BASEDLL_CXXFLAGS) $(srcdir)/src/common/textfile.cpp
basedll_threadinfo.o: $(srcdir)/src/common/threadinfo.cpp $(BASEDLL_ODEP)
$(CXXC) -c -o $@ $(BASEDLL_CXXFLAGS) $(srcdir)/src/common/threadinfo.cpp
basedll_time.o: $(srcdir)/src/common/time.cpp $(BASEDLL_ODEP) basedll_time.o: $(srcdir)/src/common/time.cpp $(BASEDLL_ODEP)
$(CXXC) -c -o $@ $(BASEDLL_CXXFLAGS) $(srcdir)/src/common/time.cpp $(CXXC) -c -o $@ $(BASEDLL_CXXFLAGS) $(srcdir)/src/common/time.cpp
@ -24857,9 +24843,6 @@ baselib_textbuf.o: $(srcdir)/src/common/textbuf.cpp $(BASELIB_ODEP)
baselib_textfile.o: $(srcdir)/src/common/textfile.cpp $(BASELIB_ODEP) baselib_textfile.o: $(srcdir)/src/common/textfile.cpp $(BASELIB_ODEP)
$(CXXC) -c -o $@ $(BASELIB_CXXFLAGS) $(srcdir)/src/common/textfile.cpp $(CXXC) -c -o $@ $(BASELIB_CXXFLAGS) $(srcdir)/src/common/textfile.cpp
baselib_threadinfo.o: $(srcdir)/src/common/threadinfo.cpp $(BASELIB_ODEP)
$(CXXC) -c -o $@ $(BASELIB_CXXFLAGS) $(srcdir)/src/common/threadinfo.cpp
baselib_time.o: $(srcdir)/src/common/time.cpp $(BASELIB_ODEP) baselib_time.o: $(srcdir)/src/common/time.cpp $(BASELIB_ODEP)
$(CXXC) -c -o $@ $(BASELIB_CXXFLAGS) $(srcdir)/src/common/time.cpp $(CXXC) -c -o $@ $(BASELIB_CXXFLAGS) $(srcdir)/src/common/time.cpp

View file

@ -552,7 +552,6 @@ IMPORTANT: please read docs/tech/tn0016.txt before modifying this file!
src/common/tarstrm.cpp src/common/tarstrm.cpp
src/common/textbuf.cpp src/common/textbuf.cpp
src/common/textfile.cpp src/common/textfile.cpp
src/common/threadinfo.cpp
src/common/time.cpp src/common/time.cpp
src/common/timercmn.cpp src/common/timercmn.cpp
src/common/timerimpl.cpp src/common/timerimpl.cpp

View file

@ -465,7 +465,6 @@ set(BASE_CMN_SRC
src/common/tarstrm.cpp src/common/tarstrm.cpp
src/common/textbuf.cpp src/common/textbuf.cpp
src/common/textfile.cpp src/common/textfile.cpp
src/common/threadinfo.cpp
src/common/time.cpp src/common/time.cpp
src/common/timercmn.cpp src/common/timercmn.cpp
src/common/timerimpl.cpp src/common/timerimpl.cpp

View file

@ -484,7 +484,6 @@ BASE_CMN_SRC =
src/common/tarstrm.cpp src/common/tarstrm.cpp
src/common/textbuf.cpp src/common/textbuf.cpp
src/common/textfile.cpp src/common/textfile.cpp
src/common/threadinfo.cpp
src/common/time.cpp src/common/time.cpp
src/common/timercmn.cpp src/common/timercmn.cpp
src/common/timerimpl.cpp src/common/timerimpl.cpp

View file

@ -475,7 +475,6 @@ MONODLL_OBJECTS = \
$(OBJS)\monodll_tarstrm.o \ $(OBJS)\monodll_tarstrm.o \
$(OBJS)\monodll_textbuf.o \ $(OBJS)\monodll_textbuf.o \
$(OBJS)\monodll_textfile.o \ $(OBJS)\monodll_textfile.o \
$(OBJS)\monodll_threadinfo.o \
$(OBJS)\monodll_time.o \ $(OBJS)\monodll_time.o \
$(OBJS)\monodll_timercmn.o \ $(OBJS)\monodll_timercmn.o \
$(OBJS)\monodll_timerimpl.o \ $(OBJS)\monodll_timerimpl.o \
@ -637,7 +636,6 @@ MONOLIB_OBJECTS = \
$(OBJS)\monolib_tarstrm.o \ $(OBJS)\monolib_tarstrm.o \
$(OBJS)\monolib_textbuf.o \ $(OBJS)\monolib_textbuf.o \
$(OBJS)\monolib_textfile.o \ $(OBJS)\monolib_textfile.o \
$(OBJS)\monolib_threadinfo.o \
$(OBJS)\monolib_time.o \ $(OBJS)\monolib_time.o \
$(OBJS)\monolib_timercmn.o \ $(OBJS)\monolib_timercmn.o \
$(OBJS)\monolib_timerimpl.o \ $(OBJS)\monolib_timerimpl.o \
@ -787,7 +785,6 @@ BASEDLL_OBJECTS = \
$(OBJS)\basedll_tarstrm.o \ $(OBJS)\basedll_tarstrm.o \
$(OBJS)\basedll_textbuf.o \ $(OBJS)\basedll_textbuf.o \
$(OBJS)\basedll_textfile.o \ $(OBJS)\basedll_textfile.o \
$(OBJS)\basedll_threadinfo.o \
$(OBJS)\basedll_time.o \ $(OBJS)\basedll_time.o \
$(OBJS)\basedll_timercmn.o \ $(OBJS)\basedll_timercmn.o \
$(OBJS)\basedll_timerimpl.o \ $(OBJS)\basedll_timerimpl.o \
@ -918,7 +915,6 @@ BASELIB_OBJECTS = \
$(OBJS)\baselib_tarstrm.o \ $(OBJS)\baselib_tarstrm.o \
$(OBJS)\baselib_textbuf.o \ $(OBJS)\baselib_textbuf.o \
$(OBJS)\baselib_textfile.o \ $(OBJS)\baselib_textfile.o \
$(OBJS)\baselib_threadinfo.o \
$(OBJS)\baselib_time.o \ $(OBJS)\baselib_time.o \
$(OBJS)\baselib_timercmn.o \ $(OBJS)\baselib_timercmn.o \
$(OBJS)\baselib_timerimpl.o \ $(OBJS)\baselib_timerimpl.o \
@ -7170,9 +7166,6 @@ $(OBJS)\monodll_textbuf.o: ../../src/common/textbuf.cpp
$(OBJS)\monodll_textfile.o: ../../src/common/textfile.cpp $(OBJS)\monodll_textfile.o: ../../src/common/textfile.cpp
$(CXX) -c -o $@ $(MONODLL_CXXFLAGS) $(CPPDEPS) $< $(CXX) -c -o $@ $(MONODLL_CXXFLAGS) $(CPPDEPS) $<
$(OBJS)\monodll_threadinfo.o: ../../src/common/threadinfo.cpp
$(CXX) -c -o $@ $(MONODLL_CXXFLAGS) $(CPPDEPS) $<
$(OBJS)\monodll_time.o: ../../src/common/time.cpp $(OBJS)\monodll_time.o: ../../src/common/time.cpp
$(CXX) -c -o $@ $(MONODLL_CXXFLAGS) $(CPPDEPS) $< $(CXX) -c -o $@ $(MONODLL_CXXFLAGS) $(CPPDEPS) $<
@ -9764,9 +9757,6 @@ $(OBJS)\monolib_textbuf.o: ../../src/common/textbuf.cpp
$(OBJS)\monolib_textfile.o: ../../src/common/textfile.cpp $(OBJS)\monolib_textfile.o: ../../src/common/textfile.cpp
$(CXX) -c -o $@ $(MONOLIB_CXXFLAGS) $(CPPDEPS) $< $(CXX) -c -o $@ $(MONOLIB_CXXFLAGS) $(CPPDEPS) $<
$(OBJS)\monolib_threadinfo.o: ../../src/common/threadinfo.cpp
$(CXX) -c -o $@ $(MONOLIB_CXXFLAGS) $(CPPDEPS) $<
$(OBJS)\monolib_time.o: ../../src/common/time.cpp $(OBJS)\monolib_time.o: ../../src/common/time.cpp
$(CXX) -c -o $@ $(MONOLIB_CXXFLAGS) $(CPPDEPS) $< $(CXX) -c -o $@ $(MONOLIB_CXXFLAGS) $(CPPDEPS) $<
@ -12358,9 +12348,6 @@ $(OBJS)\basedll_textbuf.o: ../../src/common/textbuf.cpp
$(OBJS)\basedll_textfile.o: ../../src/common/textfile.cpp $(OBJS)\basedll_textfile.o: ../../src/common/textfile.cpp
$(CXX) -c -o $@ $(BASEDLL_CXXFLAGS) $(CPPDEPS) $< $(CXX) -c -o $@ $(BASEDLL_CXXFLAGS) $(CPPDEPS) $<
$(OBJS)\basedll_threadinfo.o: ../../src/common/threadinfo.cpp
$(CXX) -c -o $@ $(BASEDLL_CXXFLAGS) $(CPPDEPS) $<
$(OBJS)\basedll_time.o: ../../src/common/time.cpp $(OBJS)\basedll_time.o: ../../src/common/time.cpp
$(CXX) -c -o $@ $(BASEDLL_CXXFLAGS) $(CPPDEPS) $< $(CXX) -c -o $@ $(BASEDLL_CXXFLAGS) $(CPPDEPS) $<
@ -12703,9 +12690,6 @@ $(OBJS)\baselib_textbuf.o: ../../src/common/textbuf.cpp
$(OBJS)\baselib_textfile.o: ../../src/common/textfile.cpp $(OBJS)\baselib_textfile.o: ../../src/common/textfile.cpp
$(CXX) -c -o $@ $(BASELIB_CXXFLAGS) $(CPPDEPS) $< $(CXX) -c -o $@ $(BASELIB_CXXFLAGS) $(CPPDEPS) $<
$(OBJS)\baselib_threadinfo.o: ../../src/common/threadinfo.cpp
$(CXX) -c -o $@ $(BASELIB_CXXFLAGS) $(CPPDEPS) $<
$(OBJS)\baselib_time.o: ../../src/common/time.cpp $(OBJS)\baselib_time.o: ../../src/common/time.cpp
$(CXX) -c -o $@ $(BASELIB_CXXFLAGS) $(CPPDEPS) $< $(CXX) -c -o $@ $(BASELIB_CXXFLAGS) $(CPPDEPS) $<

View file

@ -511,7 +511,6 @@ MONODLL_OBJECTS = \
$(OBJS)\monodll_tarstrm.obj \ $(OBJS)\monodll_tarstrm.obj \
$(OBJS)\monodll_textbuf.obj \ $(OBJS)\monodll_textbuf.obj \
$(OBJS)\monodll_textfile.obj \ $(OBJS)\monodll_textfile.obj \
$(OBJS)\monodll_threadinfo.obj \
$(OBJS)\monodll_time.obj \ $(OBJS)\monodll_time.obj \
$(OBJS)\monodll_timercmn.obj \ $(OBJS)\monodll_timercmn.obj \
$(OBJS)\monodll_timerimpl.obj \ $(OBJS)\monodll_timerimpl.obj \
@ -682,7 +681,6 @@ MONOLIB_OBJECTS = \
$(OBJS)\monolib_tarstrm.obj \ $(OBJS)\monolib_tarstrm.obj \
$(OBJS)\monolib_textbuf.obj \ $(OBJS)\monolib_textbuf.obj \
$(OBJS)\monolib_textfile.obj \ $(OBJS)\monolib_textfile.obj \
$(OBJS)\monolib_threadinfo.obj \
$(OBJS)\monolib_time.obj \ $(OBJS)\monolib_time.obj \
$(OBJS)\monolib_timercmn.obj \ $(OBJS)\monolib_timercmn.obj \
$(OBJS)\monolib_timerimpl.obj \ $(OBJS)\monolib_timerimpl.obj \
@ -841,7 +839,6 @@ BASEDLL_OBJECTS = \
$(OBJS)\basedll_tarstrm.obj \ $(OBJS)\basedll_tarstrm.obj \
$(OBJS)\basedll_textbuf.obj \ $(OBJS)\basedll_textbuf.obj \
$(OBJS)\basedll_textfile.obj \ $(OBJS)\basedll_textfile.obj \
$(OBJS)\basedll_threadinfo.obj \
$(OBJS)\basedll_time.obj \ $(OBJS)\basedll_time.obj \
$(OBJS)\basedll_timercmn.obj \ $(OBJS)\basedll_timercmn.obj \
$(OBJS)\basedll_timerimpl.obj \ $(OBJS)\basedll_timerimpl.obj \
@ -982,7 +979,6 @@ BASELIB_OBJECTS = \
$(OBJS)\baselib_tarstrm.obj \ $(OBJS)\baselib_tarstrm.obj \
$(OBJS)\baselib_textbuf.obj \ $(OBJS)\baselib_textbuf.obj \
$(OBJS)\baselib_textfile.obj \ $(OBJS)\baselib_textfile.obj \
$(OBJS)\baselib_threadinfo.obj \
$(OBJS)\baselib_time.obj \ $(OBJS)\baselib_time.obj \
$(OBJS)\baselib_timercmn.obj \ $(OBJS)\baselib_timercmn.obj \
$(OBJS)\baselib_timerimpl.obj \ $(OBJS)\baselib_timerimpl.obj \
@ -7627,9 +7623,6 @@ $(OBJS)\monodll_textbuf.obj: ..\..\src\common\textbuf.cpp
$(OBJS)\monodll_textfile.obj: ..\..\src\common\textfile.cpp $(OBJS)\monodll_textfile.obj: ..\..\src\common\textfile.cpp
$(CXX) /c /nologo /TP /Fo$@ $(MONODLL_CXXFLAGS) ..\..\src\common\textfile.cpp $(CXX) /c /nologo /TP /Fo$@ $(MONODLL_CXXFLAGS) ..\..\src\common\textfile.cpp
$(OBJS)\monodll_threadinfo.obj: ..\..\src\common\threadinfo.cpp
$(CXX) /c /nologo /TP /Fo$@ $(MONODLL_CXXFLAGS) ..\..\src\common\threadinfo.cpp
$(OBJS)\monodll_time.obj: ..\..\src\common\time.cpp $(OBJS)\monodll_time.obj: ..\..\src\common\time.cpp
$(CXX) /c /nologo /TP /Fo$@ $(MONODLL_CXXFLAGS) ..\..\src\common\time.cpp $(CXX) /c /nologo /TP /Fo$@ $(MONODLL_CXXFLAGS) ..\..\src\common\time.cpp
@ -10221,9 +10214,6 @@ $(OBJS)\monolib_textbuf.obj: ..\..\src\common\textbuf.cpp
$(OBJS)\monolib_textfile.obj: ..\..\src\common\textfile.cpp $(OBJS)\monolib_textfile.obj: ..\..\src\common\textfile.cpp
$(CXX) /c /nologo /TP /Fo$@ $(MONOLIB_CXXFLAGS) ..\..\src\common\textfile.cpp $(CXX) /c /nologo /TP /Fo$@ $(MONOLIB_CXXFLAGS) ..\..\src\common\textfile.cpp
$(OBJS)\monolib_threadinfo.obj: ..\..\src\common\threadinfo.cpp
$(CXX) /c /nologo /TP /Fo$@ $(MONOLIB_CXXFLAGS) ..\..\src\common\threadinfo.cpp
$(OBJS)\monolib_time.obj: ..\..\src\common\time.cpp $(OBJS)\monolib_time.obj: ..\..\src\common\time.cpp
$(CXX) /c /nologo /TP /Fo$@ $(MONOLIB_CXXFLAGS) ..\..\src\common\time.cpp $(CXX) /c /nologo /TP /Fo$@ $(MONOLIB_CXXFLAGS) ..\..\src\common\time.cpp
@ -12815,9 +12805,6 @@ $(OBJS)\basedll_textbuf.obj: ..\..\src\common\textbuf.cpp
$(OBJS)\basedll_textfile.obj: ..\..\src\common\textfile.cpp $(OBJS)\basedll_textfile.obj: ..\..\src\common\textfile.cpp
$(CXX) /c /nologo /TP /Fo$@ $(BASEDLL_CXXFLAGS) ..\..\src\common\textfile.cpp $(CXX) /c /nologo /TP /Fo$@ $(BASEDLL_CXXFLAGS) ..\..\src\common\textfile.cpp
$(OBJS)\basedll_threadinfo.obj: ..\..\src\common\threadinfo.cpp
$(CXX) /c /nologo /TP /Fo$@ $(BASEDLL_CXXFLAGS) ..\..\src\common\threadinfo.cpp
$(OBJS)\basedll_time.obj: ..\..\src\common\time.cpp $(OBJS)\basedll_time.obj: ..\..\src\common\time.cpp
$(CXX) /c /nologo /TP /Fo$@ $(BASEDLL_CXXFLAGS) ..\..\src\common\time.cpp $(CXX) /c /nologo /TP /Fo$@ $(BASEDLL_CXXFLAGS) ..\..\src\common\time.cpp
@ -13160,9 +13147,6 @@ $(OBJS)\baselib_textbuf.obj: ..\..\src\common\textbuf.cpp
$(OBJS)\baselib_textfile.obj: ..\..\src\common\textfile.cpp $(OBJS)\baselib_textfile.obj: ..\..\src\common\textfile.cpp
$(CXX) /c /nologo /TP /Fo$@ $(BASELIB_CXXFLAGS) ..\..\src\common\textfile.cpp $(CXX) /c /nologo /TP /Fo$@ $(BASELIB_CXXFLAGS) ..\..\src\common\textfile.cpp
$(OBJS)\baselib_threadinfo.obj: ..\..\src\common\threadinfo.cpp
$(CXX) /c /nologo /TP /Fo$@ $(BASELIB_CXXFLAGS) ..\..\src\common\threadinfo.cpp
$(OBJS)\baselib_time.obj: ..\..\src\common\time.cpp $(OBJS)\baselib_time.obj: ..\..\src\common\time.cpp
$(CXX) /c /nologo /TP /Fo$@ $(BASELIB_CXXFLAGS) ..\..\src\common\time.cpp $(CXX) /c /nologo /TP /Fo$@ $(BASELIB_CXXFLAGS) ..\..\src\common\time.cpp

View file

@ -540,7 +540,6 @@
<ClCompile Include="..\..\src\common\tarstrm.cpp" /> <ClCompile Include="..\..\src\common\tarstrm.cpp" />
<ClCompile Include="..\..\src\common\textbuf.cpp" /> <ClCompile Include="..\..\src\common\textbuf.cpp" />
<ClCompile Include="..\..\src\common\textfile.cpp" /> <ClCompile Include="..\..\src\common\textfile.cpp" />
<ClCompile Include="..\..\src\common\threadinfo.cpp" />
<ClCompile Include="..\..\src\common\time.cpp" /> <ClCompile Include="..\..\src\common\time.cpp" />
<ClCompile Include="..\..\src\common\timercmn.cpp" /> <ClCompile Include="..\..\src\common\timercmn.cpp" />
<ClCompile Include="..\..\src\common\timerimpl.cpp" /> <ClCompile Include="..\..\src\common\timerimpl.cpp" />

View file

@ -234,9 +234,6 @@
<ClCompile Include="..\..\src\common\textfile.cpp"> <ClCompile Include="..\..\src\common\textfile.cpp">
<Filter>Common Sources</Filter> <Filter>Common Sources</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="..\..\src\common\threadinfo.cpp">
<Filter>Common Sources</Filter>
</ClCompile>
<ClCompile Include="..\..\src\common\time.cpp"> <ClCompile Include="..\..\src\common\time.cpp">
<Filter>Common Sources</Filter> <Filter>Common Sources</Filter>
</ClCompile> </ClCompile>

View file

@ -1579,7 +1579,6 @@
CD35A576FD363FD49C3AC4B4 /* LexAda.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 375E7A99FF4C38FA9E223772 /* LexAda.cxx */; }; CD35A576FD363FD49C3AC4B4 /* LexAda.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 375E7A99FF4C38FA9E223772 /* LexAda.cxx */; };
F80C2290D67B345F9CF60085 /* dpycmn.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A37E3D1FB4FB31AFAE88665A /* dpycmn.cpp */; }; F80C2290D67B345F9CF60085 /* dpycmn.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A37E3D1FB4FB31AFAE88665A /* dpycmn.cpp */; };
FECC98B53C0F3106AB04E6A0 /* tif_fax3.c in Sources */ = {isa = PBXBuildFile; fileRef = 30FD1048328234E59D319863 /* tif_fax3.c */; }; FECC98B53C0F3106AB04E6A0 /* tif_fax3.c in Sources */ = {isa = PBXBuildFile; fileRef = 30FD1048328234E59D319863 /* tif_fax3.c */; };
B20B7313102232A4B3E01ABA /* threadinfo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DE40B073C95D3A7497952D8F /* threadinfo.cpp */; };
8B38C6C416BA3A51B37F60C5 /* statlinecmn.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 292C08C0A1203654ABAA2CB1 /* statlinecmn.cpp */; }; 8B38C6C416BA3A51B37F60C5 /* statlinecmn.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 292C08C0A1203654ABAA2CB1 /* statlinecmn.cpp */; };
5B5B8DF915D438AA9FCEB3A0 /* imagall.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8FFDFB4D208F37569AC548B0 /* imagall.cpp */; }; 5B5B8DF915D438AA9FCEB3A0 /* imagall.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8FFDFB4D208F37569AC548B0 /* imagall.cpp */; };
9744994E8A813AA6938A7CE4 /* textcmn.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3DFD4F32E48039C3B9A66355 /* textcmn.cpp */; }; 9744994E8A813AA6938A7CE4 /* textcmn.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3DFD4F32E48039C3B9A66355 /* textcmn.cpp */; };
@ -1742,7 +1741,6 @@
01D4C5F2147F3942A7CE91AB /* icon.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F5DAF1F49F0F3F41A427A21D /* icon.cpp */; }; 01D4C5F2147F3942A7CE91AB /* icon.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F5DAF1F49F0F3F41A427A21D /* icon.cpp */; };
AD4A533C4E1633598A6D5C71 /* textentrycmn.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5F63BF9430CE371DA04AC900 /* textentrycmn.cpp */; }; AD4A533C4E1633598A6D5C71 /* textentrycmn.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5F63BF9430CE371DA04AC900 /* textentrycmn.cpp */; };
8966F77CC97B3ED780C8F138 /* xh_bmpcbox.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8826A683573F35EA9789612C /* xh_bmpcbox.cpp */; }; 8966F77CC97B3ED780C8F138 /* xh_bmpcbox.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8826A683573F35EA9789612C /* xh_bmpcbox.cpp */; };
B20B7313102232A4B3E01ABB /* threadinfo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DE40B073C95D3A7497952D8F /* threadinfo.cpp */; };
894D43C8F224394FB3171F28 /* jcapimin.c in Sources */ = {isa = PBXBuildFile; fileRef = 6EDDEEEC981133E8BA6A3998 /* jcapimin.c */; }; 894D43C8F224394FB3171F28 /* jcapimin.c in Sources */ = {isa = PBXBuildFile; fileRef = 6EDDEEEC981133E8BA6A3998 /* jcapimin.c */; };
7625D908B2CD34C78243BA8F /* settcmn.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABE3DC4AA47D39ACA83F27C0 /* settcmn.cpp */; }; 7625D908B2CD34C78243BA8F /* settcmn.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABE3DC4AA47D39ACA83F27C0 /* settcmn.cpp */; };
3ED6F4B64C283232A79423CF /* dircmn.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EC9B6DFBF2F73917A99361C5 /* dircmn.cpp */; }; 3ED6F4B64C283232A79423CF /* dircmn.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EC9B6DFBF2F73917A99361C5 /* dircmn.cpp */; };
@ -2984,7 +2982,6 @@
6A081BF19747385CB4C18781 /* radiobut_osx.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5FFCB72168FD31DE86A1B674 /* radiobut_osx.cpp */; }; 6A081BF19747385CB4C18781 /* radiobut_osx.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5FFCB72168FD31DE86A1B674 /* radiobut_osx.cpp */; };
41943A8F82723027A151A46A /* fileconf.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 61DA2A4C0D143CBE804BB8A1 /* fileconf.cpp */; }; 41943A8F82723027A151A46A /* fileconf.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 61DA2A4C0D143CBE804BB8A1 /* fileconf.cpp */; };
9CA687845B3F30CCA44A89D2 /* choicbkg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 09F8B0818C3A3248A26EE05D /* choicbkg.cpp */; }; 9CA687845B3F30CCA44A89D2 /* choicbkg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 09F8B0818C3A3248A26EE05D /* choicbkg.cpp */; };
B20B7313102232A4B3E01ABC /* threadinfo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DE40B073C95D3A7497952D8F /* threadinfo.cpp */; };
EEB0B28903693C7E9D071931 /* glcmn.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E08A51FA8D8A361681B07295 /* glcmn.cpp */; }; EEB0B28903693C7E9D071931 /* glcmn.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E08A51FA8D8A361681B07295 /* glcmn.cpp */; };
CB078622E90F33BE9D131136 /* buttonbar.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5612DBC4125B379DA2B28824 /* buttonbar.cpp */; }; CB078622E90F33BE9D131136 /* buttonbar.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5612DBC4125B379DA2B28824 /* buttonbar.cpp */; };
/* End PBXBuildFile section */ /* End PBXBuildFile section */
@ -4119,7 +4116,6 @@
8FFDFB4D208F37569AC548B0 /* imagall.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = imagall.cpp; path = ../../src/common/imagall.cpp; sourceTree = SOURCE_ROOT; }; 8FFDFB4D208F37569AC548B0 /* imagall.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = imagall.cpp; path = ../../src/common/imagall.cpp; sourceTree = SOURCE_ROOT; };
BFA50405234C30EEA3F77F17 /* filepickercmn.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = filepickercmn.cpp; path = ../../src/common/filepickercmn.cpp; sourceTree = SOURCE_ROOT; }; BFA50405234C30EEA3F77F17 /* filepickercmn.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = filepickercmn.cpp; path = ../../src/common/filepickercmn.cpp; sourceTree = SOURCE_ROOT; };
E9D416E57FEB3F0B95734FF6 /* dirdlgg.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = dirdlgg.cpp; path = ../../src/generic/dirdlgg.cpp; sourceTree = SOURCE_ROOT; }; E9D416E57FEB3F0B95734FF6 /* dirdlgg.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = dirdlgg.cpp; path = ../../src/generic/dirdlgg.cpp; sourceTree = SOURCE_ROOT; };
DE40B073C95D3A7497952D8F /* threadinfo.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = threadinfo.cpp; path = ../../src/common/threadinfo.cpp; sourceTree = SOURCE_ROOT; };
8E6F9D4319F639BE89E5A82F /* ScintillaWX.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = ScintillaWX.cpp; path = ../../src/stc/ScintillaWX.cpp; sourceTree = SOURCE_ROOT; }; 8E6F9D4319F639BE89E5A82F /* ScintillaWX.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = ScintillaWX.cpp; path = ../../src/stc/ScintillaWX.cpp; sourceTree = SOURCE_ROOT; };
F7440859617F3B47AF4D3817 /* valgen.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = valgen.cpp; path = ../../src/common/valgen.cpp; sourceTree = SOURCE_ROOT; }; F7440859617F3B47AF4D3817 /* valgen.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = valgen.cpp; path = ../../src/common/valgen.cpp; sourceTree = SOURCE_ROOT; };
E8BD1489D95E3FD78B200B1B /* commandlinkbuttong.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = commandlinkbuttong.cpp; path = ../../src/generic/commandlinkbuttong.cpp; sourceTree = SOURCE_ROOT; }; E8BD1489D95E3FD78B200B1B /* commandlinkbuttong.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = commandlinkbuttong.cpp; path = ../../src/generic/commandlinkbuttong.cpp; sourceTree = SOURCE_ROOT; };
@ -6390,7 +6386,6 @@
C0F7BBD216853E718C9F23D9 /* tarstrm.cpp */, C0F7BBD216853E718C9F23D9 /* tarstrm.cpp */,
701B84EE7C043B539FF5195A /* textbuf.cpp */, 701B84EE7C043B539FF5195A /* textbuf.cpp */,
0903EE9B3793303285FF96E3 /* textfile.cpp */, 0903EE9B3793303285FF96E3 /* textfile.cpp */,
DE40B073C95D3A7497952D8F /* threadinfo.cpp */,
5B9586328A1F3C4BA0390AA5 /* time.cpp */, 5B9586328A1F3C4BA0390AA5 /* time.cpp */,
7195E665E0F233839B967FC9 /* timercmn.cpp */, 7195E665E0F233839B967FC9 /* timercmn.cpp */,
0401B7302088357BB6B7F16F /* timerimpl.cpp */, 0401B7302088357BB6B7F16F /* timerimpl.cpp */,
@ -7904,7 +7899,6 @@
9FB1E1763EFA334CA0C07C4A /* tarstrm.cpp in Sources */, 9FB1E1763EFA334CA0C07C4A /* tarstrm.cpp in Sources */,
2E4747E0736B30569ACD5423 /* textbuf.cpp in Sources */, 2E4747E0736B30569ACD5423 /* textbuf.cpp in Sources */,
6167245C417A32179EC37D2E /* textfile.cpp in Sources */, 6167245C417A32179EC37D2E /* textfile.cpp in Sources */,
B20B7313102232A4B3E01ABC /* threadinfo.cpp in Sources */,
98AD7D0478BA36249B03C624 /* time.cpp in Sources */, 98AD7D0478BA36249B03C624 /* time.cpp in Sources */,
7FC3D17B3C853FE58841002E /* timercmn.cpp in Sources */, 7FC3D17B3C853FE58841002E /* timercmn.cpp in Sources */,
729091CC33C73C989B4E071B /* timerimpl.cpp in Sources */, 729091CC33C73C989B4E071B /* timerimpl.cpp in Sources */,
@ -8626,7 +8620,6 @@
9FB1E1763EFA334CA0C07C4B /* tarstrm.cpp in Sources */, 9FB1E1763EFA334CA0C07C4B /* tarstrm.cpp in Sources */,
2E4747E0736B30569ACD5424 /* textbuf.cpp in Sources */, 2E4747E0736B30569ACD5424 /* textbuf.cpp in Sources */,
6167245C417A32179EC37D2D /* textfile.cpp in Sources */, 6167245C417A32179EC37D2D /* textfile.cpp in Sources */,
B20B7313102232A4B3E01ABB /* threadinfo.cpp in Sources */,
98AD7D0478BA36249B03C623 /* time.cpp in Sources */, 98AD7D0478BA36249B03C623 /* time.cpp in Sources */,
7FC3D17B3C853FE58841002D /* timercmn.cpp in Sources */, 7FC3D17B3C853FE58841002D /* timercmn.cpp in Sources */,
729091CC33C73C989B4E071A /* timerimpl.cpp in Sources */, 729091CC33C73C989B4E071A /* timerimpl.cpp in Sources */,
@ -9822,7 +9815,6 @@
9FB1E1763EFA334CA0C07C49 /* tarstrm.cpp in Sources */, 9FB1E1763EFA334CA0C07C49 /* tarstrm.cpp in Sources */,
2E4747E0736B30569ACD5422 /* textbuf.cpp in Sources */, 2E4747E0736B30569ACD5422 /* textbuf.cpp in Sources */,
6167245C417A32179EC37D2F /* textfile.cpp in Sources */, 6167245C417A32179EC37D2F /* textfile.cpp in Sources */,
B20B7313102232A4B3E01ABA /* threadinfo.cpp in Sources */,
98AD7D0478BA36249B03C625 /* time.cpp in Sources */, 98AD7D0478BA36249B03C625 /* time.cpp in Sources */,
7FC3D17B3C853FE58841002F /* timercmn.cpp in Sources */, 7FC3D17B3C853FE58841002F /* timercmn.cpp in Sources */,
729091CC33C73C989B4E0719 /* timerimpl.cpp in Sources */, 729091CC33C73C989B4E0719 /* timerimpl.cpp in Sources */,

View file

@ -106,7 +106,6 @@
DDC71B80D562303690FDBE4C /* appcmn.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F01DDE448E4C3983ACCE67FD /* appcmn.cpp */; }; DDC71B80D562303690FDBE4C /* appcmn.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F01DDE448E4C3983ACCE67FD /* appcmn.cpp */; };
5417332FE2DB3CD3A647B15D /* cursor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0BF1F491B8A8376E8E2E8182 /* cursor.cpp */; }; 5417332FE2DB3CD3A647B15D /* cursor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0BF1F491B8A8376E8E2E8182 /* cursor.cpp */; };
02BB539E2AD63C078DA776B0 /* uiaction_osx.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AC6359B01A7B35F6B710ACF8 /* uiaction_osx.cpp */; }; 02BB539E2AD63C078DA776B0 /* uiaction_osx.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AC6359B01A7B35F6B710ACF8 /* uiaction_osx.cpp */; };
B20B7313102232A4B3E01ABA /* threadinfo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DE40B073C95D3A7497952D8F /* threadinfo.cpp */; };
795613831EC8332A83FF26E7 /* string.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F7E99B35A98D30818120B002 /* string.cpp */; }; 795613831EC8332A83FF26E7 /* string.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F7E99B35A98D30818120B002 /* string.cpp */; };
6978D7A20DA93A329DDD1383 /* socket.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 40CE02524DD4385AB2C3DF95 /* socket.cpp */; }; 6978D7A20DA93A329DDD1383 /* socket.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 40CE02524DD4385AB2C3DF95 /* socket.cpp */; };
DD1B139EA5AD3F6DB92C0FA8 /* EditModel.cxx in Sources */ = {isa = PBXBuildFile; fileRef = E685D81FB9FF3081B6C5C321 /* EditModel.cxx */; }; DD1B139EA5AD3F6DB92C0FA8 /* EditModel.cxx in Sources */ = {isa = PBXBuildFile; fileRef = E685D81FB9FF3081B6C5C321 /* EditModel.cxx */; };
@ -1811,7 +1810,6 @@
6E855AB3AB08325980871AB4 /* xh_sizer.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = xh_sizer.cpp; path = ../../src/xrc/xh_sizer.cpp; sourceTree = SOURCE_ROOT; }; 6E855AB3AB08325980871AB4 /* xh_sizer.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = xh_sizer.cpp; path = ../../src/xrc/xh_sizer.cpp; sourceTree = SOURCE_ROOT; };
A54B80C17F823CB5900AD2E8 /* framecmn.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = framecmn.cpp; path = ../../src/common/framecmn.cpp; sourceTree = SOURCE_ROOT; }; A54B80C17F823CB5900AD2E8 /* framecmn.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = framecmn.cpp; path = ../../src/common/framecmn.cpp; sourceTree = SOURCE_ROOT; };
9E8BF36D3A7C309482CBA9EC /* tipwin.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = tipwin.cpp; path = ../../src/generic/tipwin.cpp; sourceTree = SOURCE_ROOT; }; 9E8BF36D3A7C309482CBA9EC /* tipwin.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = tipwin.cpp; path = ../../src/generic/tipwin.cpp; sourceTree = SOURCE_ROOT; };
DE40B073C95D3A7497952D8F /* threadinfo.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = threadinfo.cpp; path = ../../src/common/threadinfo.cpp; sourceTree = SOURCE_ROOT; };
81A30C745CA73E30B788B408 /* image.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = image.cpp; path = ../../src/common/image.cpp; sourceTree = SOURCE_ROOT; }; 81A30C745CA73E30B788B408 /* image.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = image.cpp; path = ../../src/common/image.cpp; sourceTree = SOURCE_ROOT; };
1CABAEA3B48333CB88B40F08 /* LexTCMD.cxx */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = LexTCMD.cxx; path = ../../src/stc/lexilla/lexers/LexTCMD.cxx; sourceTree = SOURCE_ROOT; }; 1CABAEA3B48333CB88B40F08 /* LexTCMD.cxx */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = LexTCMD.cxx; path = ../../src/stc/lexilla/lexers/LexTCMD.cxx; sourceTree = SOURCE_ROOT; };
6EDDEEEC981133E8BA6A3998 /* jcapimin.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = jcapimin.c; path = ../../src/jpeg/jcapimin.c; sourceTree = SOURCE_ROOT; }; 6EDDEEEC981133E8BA6A3998 /* jcapimin.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = jcapimin.c; path = ../../src/jpeg/jcapimin.c; sourceTree = SOURCE_ROOT; };
@ -2646,7 +2644,6 @@
C0F7BBD216853E718C9F23D9 /* tarstrm.cpp */, C0F7BBD216853E718C9F23D9 /* tarstrm.cpp */,
701B84EE7C043B539FF5195A /* textbuf.cpp */, 701B84EE7C043B539FF5195A /* textbuf.cpp */,
0903EE9B3793303285FF96E3 /* textfile.cpp */, 0903EE9B3793303285FF96E3 /* textfile.cpp */,
DE40B073C95D3A7497952D8F /* threadinfo.cpp */,
5B9586328A1F3C4BA0390AA5 /* time.cpp */, 5B9586328A1F3C4BA0390AA5 /* time.cpp */,
7195E665E0F233839B967FC9 /* timercmn.cpp */, 7195E665E0F233839B967FC9 /* timercmn.cpp */,
0401B7302088357BB6B7F16F /* timerimpl.cpp */, 0401B7302088357BB6B7F16F /* timerimpl.cpp */,
@ -3102,7 +3099,6 @@
9FB1E1763EFA334CA0C07C49 /* tarstrm.cpp in Sources */, 9FB1E1763EFA334CA0C07C49 /* tarstrm.cpp in Sources */,
2E4747E0736B30569ACD5422 /* textbuf.cpp in Sources */, 2E4747E0736B30569ACD5422 /* textbuf.cpp in Sources */,
6167245C417A32179EC37D2D /* textfile.cpp in Sources */, 6167245C417A32179EC37D2D /* textfile.cpp in Sources */,
B20B7313102232A4B3E01ABA /* threadinfo.cpp in Sources */,
98AD7D0478BA36249B03C623 /* time.cpp in Sources */, 98AD7D0478BA36249B03C623 /* time.cpp in Sources */,
7FC3D17B3C853FE58841002D /* timercmn.cpp in Sources */, 7FC3D17B3C853FE58841002D /* timercmn.cpp in Sources */,
729091CC33C73C989B4E0719 /* timerimpl.cpp in Sources */, 729091CC33C73C989B4E0719 /* timerimpl.cpp in Sources */,

View file

@ -1,71 +0,0 @@
///////////////////////////////////////////////////////////////////////////////
// Name: wx/private/threadinfo.h
// Purpose: declaration of wxThreadSpecificInfo: thread-specific information
// Author: Vadim Zeitlin
// Created: 2009-07-13
// Copyright: (c) 2009 Vadim Zeitlin <vadim@wxwidgets.org>
// Licence: wxWindows licence
///////////////////////////////////////////////////////////////////////////////
#ifndef _WX_PRIVATE_THREADINFO_H_
#define _WX_PRIVATE_THREADINFO_H_
#include "wx/defs.h"
class WXDLLIMPEXP_FWD_BASE wxLog;
#if wxUSE_INTL
#include "wx/string.h"
#include <unordered_set>
using wxLocaleUntranslatedStrings = std::unordered_set<wxString>;
#endif
// ----------------------------------------------------------------------------
// wxThreadSpecificInfo: contains all thread-specific information used by wx
// ----------------------------------------------------------------------------
// Group all thread-specific information we use (e.g. the active wxLog target)
// a in this class to avoid consuming more TLS slots than necessary as there is
// only a limited number of them.
class wxThreadSpecificInfo
{
public:
// Return this thread's instance.
static wxThreadSpecificInfo& Get();
// the thread-specific logger or nullptr if the thread is using the global one
// (this is not used for the main thread which always uses the global
// logger)
wxLog *logger;
// true if logging is currently disabled for this thread (this is also not
// used for the main thread which uses wxLog::ms_doLog)
//
// NB: we use a counter-intuitive "disabled" flag instead of "enabled" one
// because the default, for 0-initialized struct, should be to enable
// logging
bool loggingDisabled;
#if wxUSE_INTL
// Storage for wxTranslations::GetUntranslatedString()
wxLocaleUntranslatedStrings untranslatedStrings;
#endif
#if wxUSE_THREADS
// Cleans up storage for the current thread. Should be called when a thread
// is being destroyed. If it's not called, the only bad thing that happens
// is that the memory is deallocated later, on process termination.
static void ThreadCleanUp();
#endif
private:
wxThreadSpecificInfo() : logger(nullptr), loggingDisabled(false) {}
};
#define wxThreadInfo wxThreadSpecificInfo::Get()
#endif // _WX_PRIVATE_THREADINFO_H_

View file

@ -223,7 +223,7 @@ OBJECTS3=listctrlcmn.obj,socketiohandler.obj,fdiodispatcher.obj,\
spinbtncmn.obj,scrolbarcmn.obj,colourdata.obj,fontdata.obj,\ spinbtncmn.obj,scrolbarcmn.obj,colourdata.obj,fontdata.obj,\
valnum.obj,numformatter.obj,markupparser.obj,\ valnum.obj,numformatter.obj,markupparser.obj,\
affinematrix2d.obj,richtooltipcmn.obj,persist.obj,time.obj,\ affinematrix2d.obj,richtooltipcmn.obj,persist.obj,time.obj,\
textmeasurecmn.obj,modalhook.obj,threadinfo.obj,\ textmeasurecmn.obj,modalhook.obj,\
addremovectrl.obj,notifmsgcmn.obj,graphcmn.obj,dcsvg.obj,\ addremovectrl.obj,notifmsgcmn.obj,graphcmn.obj,dcsvg.obj,\
dcgraph.obj,secretstore.obj,uilocale.obj,bmpbndl.obj dcgraph.obj,secretstore.obj,uilocale.obj,bmpbndl.obj
@ -718,7 +718,6 @@ persist.obj : persist.cpp
time.obj : time.cpp time.obj : time.cpp
textmeasurecmn.obj : textmeasurecmn.cpp textmeasurecmn.obj : textmeasurecmn.cpp
modalhook.obj : modalhook.cpp modalhook.obj : modalhook.cpp
threadinfo.obj : threadinfo.cpp
addremovectrl.obj : addremovectrl.cpp addremovectrl.obj : addremovectrl.cpp
notifmsgcmn.obj : notifmsgcmn.cpp notifmsgcmn.obj : notifmsgcmn.cpp
graphcmn.obj : graphcmn.cpp graphcmn.obj : graphcmn.cpp

View file

@ -38,7 +38,6 @@
#include "wx/msgout.h" #include "wx/msgout.h"
#include "wx/textfile.h" #include "wx/textfile.h"
#include "wx/thread.h" #include "wx/thread.h"
#include "wx/private/threadinfo.h"
#include "wx/crt.h" #include "wx/crt.h"
#include "wx/vector.h" #include "wx/vector.h"
@ -99,6 +98,10 @@ WX_DEFINE_LOG_CS(TraceMask);
// and this one is used for GetComponentLevels() // and this one is used for GetComponentLevels()
WX_DEFINE_LOG_CS(Levels); WX_DEFINE_LOG_CS(Levels);
thread_local wxLog* wxPerThreadLogger = nullptr;
thread_local bool wxPerThreadLoggingDisabled = false;
} // anonymous namespace } // anonymous namespace
#endif // wxUSE_THREADS #endif // wxUSE_THREADS
@ -388,7 +391,7 @@ wxLog::OnLog(wxLogLevel level,
#if wxUSE_THREADS #if wxUSE_THREADS
if ( !wxThread::IsMain() ) if ( !wxThread::IsMain() )
{ {
logger = wxThreadInfo.logger; logger = wxPerThreadLogger;
if ( !logger ) if ( !logger )
{ {
if ( ms_pLogger ) if ( ms_pLogger )
@ -506,7 +509,7 @@ wxLog *wxLog::GetActiveTarget()
if ( !wxThread::IsMain() ) if ( !wxThread::IsMain() )
{ {
// check if we have a thread-specific log target // check if we have a thread-specific log target
wxLog * const logger = wxThreadInfo.logger; wxLog * const logger = wxPerThreadLogger;
// the code below should be only executed for the main thread as // the code below should be only executed for the main thread as
// CreateLogTarget() is not meant for auto-creating log targets for // CreateLogTarget() is not meant for auto-creating log targets for
@ -563,11 +566,11 @@ wxLog *wxLog::SetThreadActiveTarget(wxLog *logger)
{ {
wxASSERT_MSG( !wxThread::IsMain(), "use SetActiveTarget() for main thread" ); wxASSERT_MSG( !wxThread::IsMain(), "use SetActiveTarget() for main thread" );
wxLog * const oldLogger = wxThreadInfo.logger; wxLog * const oldLogger = wxPerThreadLogger;
if ( oldLogger ) if ( oldLogger )
oldLogger->Flush(); oldLogger->Flush();
wxThreadInfo.logger = logger; wxPerThreadLogger = logger;
return oldLogger; return oldLogger;
} }
@ -779,14 +782,14 @@ void wxLog::FlushThreadMessages()
/* static */ /* static */
bool wxLog::IsThreadLoggingEnabled() bool wxLog::IsThreadLoggingEnabled()
{ {
return !wxThreadInfo.loggingDisabled; return !wxPerThreadLoggingDisabled;
} }
/* static */ /* static */
bool wxLog::EnableThreadLogging(bool enable) bool wxLog::EnableThreadLogging(bool enable)
{ {
const bool wasEnabled = !wxThreadInfo.loggingDisabled; const bool wasEnabled = !wxPerThreadLoggingDisabled;
wxThreadInfo.loggingDisabled = !enable; wxPerThreadLoggingDisabled = !enable;
return wasEnabled; return wasEnabled;
} }

View file

@ -1,102 +0,0 @@
///////////////////////////////////////////////////////////////////////////////
// Name: src/common/threadinfo.cpp
// Purpose: declaration of wxThreadSpecificInfo: thread-specific information
// Author: Vaclav Slavik
// Created: 2013-09-14
// Copyright: (c) 2013 Vaclav Slavik <vslavik@fastmail.fm>
// Licence: wxWindows licence
///////////////////////////////////////////////////////////////////////////////
// For compilers that support precompilation, includes "wx.h".
#include "wx/wxprec.h"
#include "wx/private/threadinfo.h"
#if wxUSE_THREADS
#include "wx/tls.h"
#include "wx/thread.h"
#include <memory>
#include <vector>
namespace
{
// All thread info objects are stored in a global list so that they are
// freed when global objects are destroyed and no memory leaks are reported.
// Notice that we must be using accessor functions instead of simple global
// variables here as this code could be executed during global initialization
// time, i.e. before any globals in this module were initialzied.
inline wxCriticalSection& GetAllThreadInfosCS()
{
static wxCriticalSection s_csAllThreadInfos;
return s_csAllThreadInfos;
}
using wxAllThreadInfos = std::vector<std::unique_ptr<wxThreadSpecificInfo>>;
inline wxAllThreadInfos& GetAllThreadInfos()
{
static wxAllThreadInfos s_allThreadInfos;
return s_allThreadInfos;
}
// Pointer to the current thread's instance
inline wxThreadSpecificInfo*& GetThisThreadInfo()
{
static wxTHREAD_SPECIFIC_DECL wxThreadSpecificInfo* s_thisThreadInfo;
return s_thisThreadInfo;
}
#define wxTHIS_THREAD_INFO GetThisThreadInfo()
} // anonymous namespace
wxThreadSpecificInfo& wxThreadSpecificInfo::Get()
{
if ( !wxTHIS_THREAD_INFO )
{
wxTHIS_THREAD_INFO = new wxThreadSpecificInfo;
wxCriticalSectionLocker lock(GetAllThreadInfosCS());
GetAllThreadInfos().push_back(
std::unique_ptr<wxThreadSpecificInfo>(wxTHIS_THREAD_INFO));
}
return *wxTHIS_THREAD_INFO;
}
void wxThreadSpecificInfo::ThreadCleanUp()
{
if ( !wxTHIS_THREAD_INFO )
return; // nothing to do, not used by this thread at all
// find this thread's instance in GetAllThreadInfos() and destroy it
wxCriticalSectionLocker lock(GetAllThreadInfosCS());
for ( wxAllThreadInfos::iterator i = GetAllThreadInfos().begin();
i != GetAllThreadInfos().end();
++i )
{
if ( i->get() == wxTHIS_THREAD_INFO )
{
GetAllThreadInfos().erase(i);
wxTHIS_THREAD_INFO = nullptr;
break;
}
}
}
#else // !wxUSE_THREADS
wxThreadSpecificInfo& wxThreadSpecificInfo::Get()
{
static wxThreadSpecificInfo s_instance;
return s_instance;
}
#endif // wxUSE_THREADS/wxUSE_THREADS

View file

@ -44,7 +44,6 @@
#include "wx/fontmap.h" #include "wx/fontmap.h"
#include "wx/stdpaths.h" #include "wx/stdpaths.h"
#include "wx/version.h" #include "wx/version.h"
#include "wx/private/threadinfo.h"
#include "wx/uilocale.h" #include "wx/uilocale.h"
#ifdef __WINDOWS__ #ifdef __WINDOWS__
@ -55,6 +54,7 @@
#endif #endif
#include <memory> #include <memory>
#include <unordered_set>
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
// simple types // simple types
@ -1450,13 +1450,8 @@ wxString wxTranslations::GetBestTranslation(const wxString& domain,
/* static */ /* static */
const wxString& wxTranslations::GetUntranslatedString(const wxString& str) const wxString& wxTranslations::GetUntranslatedString(const wxString& str)
{ {
wxLocaleUntranslatedStrings& strings = wxThreadInfo.untranslatedStrings; thread_local std::unordered_set<wxString> wxPerThreadStrings;
return *wxPerThreadStrings.insert(str).first;
wxLocaleUntranslatedStrings::iterator i = strings.find(str);
if ( i == strings.end() )
return *strings.insert(str).first;
return *i;
} }

View file

@ -32,8 +32,6 @@
#include "wx/apptrait.h" #include "wx/apptrait.h"
#include "wx/scopeguard.h" #include "wx/scopeguard.h"
#include "wx/private/threadinfo.h"
#include "wx/msw/private.h" #include "wx/msw/private.h"
#include "wx/msw/missing.h" #include "wx/msw/missing.h"
#include "wx/msw/seh.h" #include "wx/msw/seh.h"
@ -580,10 +578,6 @@ THREAD_RETVAL THREAD_CALLCONV wxThreadInternal::WinThreadStart(void *param)
if ( isDetached ) if ( isDetached )
thread->m_internal->LetDie(); thread->m_internal->LetDie();
// Do this as the very last thing to ensure that thread-specific info is
// not recreated any longer.
wxThreadSpecificInfo::ThreadCleanUp();
return rc; return rc;
} }

View file

@ -28,8 +28,6 @@
#include "wx/thread.h" #include "wx/thread.h"
#include "wx/except.h" #include "wx/except.h"
#include "wx/private/threadinfo.h"
#ifndef WX_PRECOMP #ifndef WX_PRECOMP
#include "wx/app.h" #include "wx/app.h"
#include "wx/dynarray.h" #include "wx/dynarray.h"
@ -1739,11 +1737,6 @@ void wxThread::Exit(ExitCode status)
} }
wxCATCH_ALL( wxTheApp->OnUnhandledException(); ) wxCATCH_ALL( wxTheApp->OnUnhandledException(); )
// Clean up thread-specific data before exiting the thread (we do it as
// late as possible as wxLog calls can recreate it and may happen until the
// very end).
wxThreadSpecificInfo::ThreadCleanUp();
// delete C++ thread object if this is a detached thread - user is // delete C++ thread object if this is a detached thread - user is
// responsible for doing this for joinable ones // responsible for doing this for joinable ones
if ( m_isDetached ) if ( m_isDetached )