Skip to content

Commit

Permalink
Fix crash after failed network list manager init.
Browse files Browse the repository at this point in the history
  • Loading branch information
john-preston committed Sep 27, 2021
1 parent 4e5c7cd commit 42d4094
Showing 1 changed file with 12 additions and 6 deletions.
18 changes: 12 additions & 6 deletions base/platform/win/base_network_reachability_win.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -37,8 +37,11 @@ bool QueryInterfaceImpl(IUnknown *from, REFIID riid, void **ppvObject) {

class NetworkListManagerEvents : public INetworkListManagerEvents {
public:
NetworkListManagerEvents();
virtual ~NetworkListManagerEvents();
NetworkListManagerEvents() = default;
virtual ~NetworkListManagerEvents() = default;

void start();
void finish();

HRESULT STDMETHODCALLTYPE QueryInterface(
REFIID riid,
Expand All @@ -62,9 +65,10 @@ class NetworkListManagerEvents : public INetworkListManagerEvents {

std::atomic<ULONG> _ref = 0;
DWORD _cookie = 0;

};

NetworkListManagerEvents::NetworkListManagerEvents() {
void NetworkListManagerEvents::start() {
auto hr = CoCreateInstance(
CLSID_NetworkListManager,
nullptr,
Expand Down Expand Up @@ -113,7 +117,7 @@ NetworkListManagerEvents::NetworkListManagerEvents() {
Available = connectivity != NLM_CONNECTIVITY_DISCONNECTED;
}

NetworkListManagerEvents::~NetworkListManagerEvents() {
void NetworkListManagerEvents::finish() {
if (_connectionPoint) {
auto hr = _connectionPoint->Unadvise(_cookie);
if (FAILED(hr)) {
Expand All @@ -125,7 +129,6 @@ NetworkListManagerEvents::~NetworkListManagerEvents() {
_cookie = 0;
}
}
Assert(_ref == 0);
}

HRESULT STDMETHODCALLTYPE NetworkListManagerEvents::QueryInterface(
Expand Down Expand Up @@ -166,18 +169,21 @@ class NetworkListManagerEventsInitializer {
}

_managerEvents = new NetworkListManagerEvents();
_managerEvents->start();
}

~NetworkListManagerEventsInitializer() {
if (!_comInitFailed) {
_managerEvents.Reset();
_managerEvents->finish();
_managerEvents = nullptr;
CoUninitialize();
}
}

private:
ComPtr<NetworkListManagerEvents> _managerEvents = nullptr;
bool _comInitFailed = false;

};

} // namespace
Expand Down

0 comments on commit 42d4094

Please sign in to comment.