only call GSocket_Init() when needed and do call it before using GAddress_XXX

functions (fixes bug 510722)


git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@14387 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2002-02-24 13:51:43 +00:00
parent e88be8c942
commit 6c0d0845c2
4 changed files with 99 additions and 16 deletions

View File

@@ -110,6 +110,44 @@ public:
// wxSocketBase
// ==========================================================================
// --------------------------------------------------------------------------
// Initialization and shutdown
// --------------------------------------------------------------------------
// FIXME-MT: all this is MT-unsafe, of course, we should protect all accesses
// to m_countInit with a crit section
size_t wxSocketBase::m_countInit = 0;
bool wxSocketBase::IsInitialized()
{
return m_countInit > 0;
}
bool wxSocketBase::Initialize()
{
if ( !m_countInit++ )
{
if ( !GSocket_Init() )
{
m_countInit--;
return FALSE;
}
}
return TRUE;
}
void wxSocketBase::Shutdown()
{
// we should be initialized
wxASSERT_MSG( m_countInit, _T("extra call to Shutdown()") );
if ( !--m_countInit )
{
GSocket_Cleanup();
}
}
// --------------------------------------------------------------------------
// Ctor and dtor
// --------------------------------------------------------------------------
@@ -145,6 +183,13 @@ void wxSocketBase::Init()
m_cbk = NULL;
m_cdata = NULL;
#endif // WXWIN_COMPATIBILITY
if ( !IsInitialized() )
{
// this Initialize() will be undone by wxSocketModule::OnExit(), all the
// other calls to it should be matched by a call to Shutdown()
Initialize();
}
}
wxSocketBase::wxSocketBase()
@@ -1242,11 +1287,21 @@ wxDatagramSocket& wxDatagramSocket::SendTo( wxSockAddress& addr,
class WXDLLEXPORT wxSocketModule : public wxModule
{
DECLARE_DYNAMIC_CLASS(wxSocketModule)
public:
bool OnInit() { return GSocket_Init() != 0; }
void OnExit() { GSocket_Cleanup(); }
virtual bool OnInit()
{
// wxSocketBase will call GSocket_Init() itself when/if needed
return TRUE;
}
virtual void OnExit()
{
if ( wxSocketBase::IsInitialized() )
wxSocketBase::Shutdown();
}
private:
DECLARE_DYNAMIC_CLASS(wxSocketModule)
};
IMPLEMENT_DYNAMIC_CLASS(wxSocketModule, wxModule)