diff --git a/include/wx/private/refcountermt.h b/include/wx/private/refcountermt.h new file mode 100644 index 0000000000..c40a326990 --- /dev/null +++ b/include/wx/private/refcountermt.h @@ -0,0 +1,42 @@ +/////////////////////////////////////////////////////////////////////////////// +// Name: wx/private/refcountermt.h +// Purpose: wxRefCounterMT class: MT-safe version of wxRefCounter +// Author: Vadim Zeitlin +// Created: 2021-01-11 +// Copyright: (c) 2021 Vadim Zeitlin +// Licence: wxWindows licence +/////////////////////////////////////////////////////////////////////////////// + +#ifndef _WX_PRIVATE_REFCOUNTERMT_H_ +#define _WX_PRIVATE_REFCOUNTERMT_H_ + +#include "wx/atomic.h" + +// ---------------------------------------------------------------------------- +// Version of wxRefCounter with MT-safe count +// ---------------------------------------------------------------------------- + +class wxRefCounterMT +{ +public: + wxRefCounterMT() { m_count = 1; } + + void IncRef() { wxAtomicInc(m_count); } + void DecRef() + { + if ( wxAtomicDec(m_count) == 0 ) + delete this; + } + +protected: + virtual ~wxRefCounterMT() { } + +private: + // Ref count is atomic to allow IncRef() and DecRef() to be concurrently + // called from different threads. + wxAtomicInt m_count; + + wxDECLARE_NO_COPY_CLASS(wxRefCounterMT); +}; + +#endif // _WX_PRIVATE_REFCOUNTERMT_H_ diff --git a/include/wx/private/webrequest.h b/include/wx/private/webrequest.h index 69e94d8dbb..2b44af1fe0 100644 --- a/include/wx/private/webrequest.h +++ b/include/wx/private/webrequest.h @@ -14,13 +14,15 @@ #include "wx/hashmap.h" #include "wx/scopedptr.h" +#include "wx/private/refcountermt.h" + WX_DECLARE_STRING_HASH_MAP(wxString, wxWebRequestHeaderMap); // ---------------------------------------------------------------------------- // wxWebAuthChallengeImpl // ---------------------------------------------------------------------------- -class wxWebAuthChallengeImpl : public wxRefCounter +class wxWebAuthChallengeImpl : public wxRefCounterMT { public: virtual ~wxWebAuthChallengeImpl() { } @@ -43,7 +45,7 @@ private: // wxWebRequestImpl // ---------------------------------------------------------------------------- -class wxWebRequestImpl : public wxRefCounter +class wxWebRequestImpl : public wxRefCounterMT { public: virtual ~wxWebRequestImpl() { } @@ -123,7 +125,7 @@ private: // wxWebResponseImpl // ---------------------------------------------------------------------------- -class wxWebResponseImpl : public wxRefCounter +class wxWebResponseImpl : public wxRefCounterMT { public: virtual ~wxWebResponseImpl(); @@ -190,7 +192,7 @@ public: // wxWebSessionImpl // ---------------------------------------------------------------------------- -class wxWebSessionImpl : public wxRefCounter +class wxWebSessionImpl : public wxRefCounterMT { public: virtual ~wxWebSessionImpl() { }