mirror of
https://github.com/bol-van/zapret.git
synced 2024-11-26 20:20:53 +03:00
fix winws: possible crash on service stop
This commit is contained in:
parent
b3a33731ec
commit
e432d46e15
Binary file not shown.
Binary file not shown.
@ -957,7 +957,9 @@ void tcp_rewrite_winsize(struct tcphdr *tcp, uint16_t winsize, uint8_t scale_fac
|
|||||||
|
|
||||||
#ifdef __CYGWIN__
|
#ifdef __CYGWIN__
|
||||||
|
|
||||||
static HANDLE w_filter = NULL, w_event = NULL;
|
static HANDLE w_filter = NULL;
|
||||||
|
static OVERLAPPED ovl = { .hEvent = NULL };
|
||||||
|
;
|
||||||
|
|
||||||
static HANDLE windivert_init_filter(const char *filter, UINT64 flags)
|
static HANDLE windivert_init_filter(const char *filter, UINT64 flags)
|
||||||
{
|
{
|
||||||
@ -983,13 +985,14 @@ void rawsend_cleanup(void)
|
|||||||
{
|
{
|
||||||
if (w_filter)
|
if (w_filter)
|
||||||
{
|
{
|
||||||
|
CancelIoEx(w_filter,&ovl);
|
||||||
WinDivertClose(w_filter);
|
WinDivertClose(w_filter);
|
||||||
w_filter=NULL;
|
w_filter=NULL;
|
||||||
}
|
}
|
||||||
if (w_event)
|
if (ovl.hEvent)
|
||||||
{
|
{
|
||||||
CloseHandle(w_event);
|
CloseHandle(ovl.hEvent);
|
||||||
w_event=NULL;
|
ovl.hEvent=NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
bool windivert_init(const char *filter)
|
bool windivert_init(const char *filter)
|
||||||
@ -998,8 +1001,8 @@ bool windivert_init(const char *filter)
|
|||||||
w_filter = windivert_init_filter(filter, 0);
|
w_filter = windivert_init_filter(filter, 0);
|
||||||
if (w_filter)
|
if (w_filter)
|
||||||
{
|
{
|
||||||
w_event = CreateEventW(NULL,FALSE,FALSE,NULL);
|
ovl.hEvent = CreateEventW(NULL,FALSE,FALSE,NULL);
|
||||||
if (!w_event)
|
if (!ovl.hEvent)
|
||||||
{
|
{
|
||||||
rawsend_cleanup();
|
rawsend_cleanup();
|
||||||
return false;
|
return false;
|
||||||
@ -1013,7 +1016,6 @@ static bool windivert_recv_filter(HANDLE hFilter, uint8_t *packet, size_t *len,
|
|||||||
{
|
{
|
||||||
UINT recv_len;
|
UINT recv_len;
|
||||||
DWORD err;
|
DWORD err;
|
||||||
OVERLAPPED ovl = { .hEvent = w_event };
|
|
||||||
DWORD rd;
|
DWORD rd;
|
||||||
char c;
|
char c;
|
||||||
|
|
||||||
@ -1034,7 +1036,7 @@ static bool windivert_recv_filter(HANDLE hFilter, uint8_t *packet, size_t *len,
|
|||||||
{
|
{
|
||||||
case ERROR_IO_PENDING:
|
case ERROR_IO_PENDING:
|
||||||
// make signals working
|
// make signals working
|
||||||
while (WaitForSingleObject(w_event,50)==WAIT_TIMEOUT)
|
while (WaitForSingleObject(ovl.hEvent,50)==WAIT_TIMEOUT)
|
||||||
{
|
{
|
||||||
if (bQuit)
|
if (bQuit)
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user