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/textbuf.cpp \
src/common/textfile.cpp \
src/common/threadinfo.cpp \
src/common/time.cpp \
src/common/timercmn.cpp \
src/common/timerimpl.cpp \
@ -1108,7 +1107,6 @@ MONODLL_OBJECTS = \
monodll_tarstrm.o \
monodll_textbuf.o \
monodll_textfile.o \
monodll_threadinfo.o \
monodll_time.o \
monodll_timercmn.o \
monodll_timerimpl.o \
@ -1268,7 +1266,6 @@ MONOLIB_OBJECTS = \
monolib_tarstrm.o \
monolib_textbuf.o \
monolib_textfile.o \
monolib_threadinfo.o \
monolib_time.o \
monolib_timercmn.o \
monolib_timerimpl.o \
@ -1397,7 +1394,6 @@ BASEDLL_OBJECTS = \
basedll_tarstrm.o \
basedll_textbuf.o \
basedll_textfile.o \
basedll_threadinfo.o \
basedll_time.o \
basedll_timercmn.o \
basedll_timerimpl.o \
@ -1508,7 +1504,6 @@ BASELIB_OBJECTS = \
baselib_tarstrm.o \
baselib_textbuf.o \
baselib_textfile.o \
baselib_threadinfo.o \
baselib_time.o \
baselib_timercmn.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)
$(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)
$(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)
$(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)
$(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)
$(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)
$(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)
$(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)
$(CXXC) -c -o $@ $(BASELIB_CXXFLAGS) $(srcdir)/src/common/time.cpp