From 857a62ba8faa183530cce1b156feb206ec58dee0 Mon Sep 17 00:00:00 2001 From: dmiller Date: Tue, 10 Nov 2015 16:47:33 +0000 Subject: [PATCH] Add mutex protection to a couple more WinPcap calls --- mswin32/winfix.cc | 8 ++++++++ nping/winfix.cc | 8 ++++++++ 2 files changed, 16 insertions(+) diff --git a/mswin32/winfix.cc b/mswin32/winfix.cc index bbdcaaf2b..8701024e0 100644 --- a/mswin32/winfix.cc +++ b/mswin32/winfix.cc @@ -278,11 +278,19 @@ void win_init() __try #endif { + HANDLE pcapMutex; + DWORD wait; ULONG len = sizeof(pcaplist); o.have_pcap = true; if(o.debugging > 2) printf("Trying to initialize WinPcap\n"); + pcapMutex = CreateMutex(NULL, 0, "Global\\DnetPcapHangAvoidanceMutex"); + wait = WaitForSingleObject(pcapMutex, INFINITE); PacketGetAdapterNames(pcaplist, &len); + if (wait == WAIT_ABANDONED || wait == WAIT_OBJECT_0) { + ReleaseMutex(pcapMutex); + } + CloseHandle(pcapMutex); #ifdef _MSC_VER if(FAILED(__HrLoadAllImportsForDll("wpcap.dll"))) diff --git a/nping/winfix.cc b/nping/winfix.cc index 6dff57cfb..18d2595c2 100644 --- a/nping/winfix.cc +++ b/nping/winfix.cc @@ -278,10 +278,18 @@ void win_init() __try #endif { + HANDLE pcapMutex; + DWORD wait; ULONG len = sizeof(pcaplist); if(o.getDebugging() >= DBG_2) printf("Trying to initialize WinPcap\n"); + pcapMutex = CreateMutex(NULL, 0, "Global\\DnetPcapHangAvoidanceMutex"); + wait = WaitForSingleObject(pcapMutex, INFINITE); PacketGetAdapterNames(pcaplist, &len); + if (wait == WAIT_ABANDONED || wait == WAIT_OBJECT_0) { + ReleaseMutex(pcapMutex); + } + CloseHandle(pcapMutex); #ifdef _MSC_VER if(FAILED(__HrLoadAllImportsForDll("wpcap.dll")))