X-Git-Url: https://git.reactos.org/?p=reactos.git;a=blobdiff_plain;f=reactos%2Fdll%2Fwin32%2Fdhcpcsvc%2Fdhcp%2Fdispatch.c;h=a0ce1d0b0a1754ff31c747db595e467e1013e0cf;hp=b429f9517e78d25546dbd086c532cbf0ecf57e7f;hb=f4530b30f259b246dabd12265ab17b4c84b67aef;hpb=b02092777f146b509adc821211d91c36c6875eae;ds=sidebyside diff --git a/reactos/dll/win32/dhcpcsvc/dhcp/dispatch.c b/reactos/dll/win32/dhcpcsvc/dhcp/dispatch.c index b429f9517e7..a0ce1d0b0a1 100644 --- a/reactos/dll/win32/dhcpcsvc/dhcp/dispatch.c +++ b/reactos/dll/win32/dhcpcsvc/dhcp/dispatch.c @@ -68,8 +68,10 @@ dispatch(void) fd_set fds; time_t howlong, cur_time; struct timeval timeval; + HANDLE AdapterStateChangedEvent; - if (!AdapterDiscover()) + AdapterStateChangedEvent = StartAdapterDiscovery(); + if (!AdapterStateChangedEvent) return; ApiLock(); @@ -103,29 +105,31 @@ dispatch(void) if (howlong > INT_MAX / 1000) howlong = INT_MAX / 1000; to_msec = howlong * 1000; - } else - to_msec = 5000; - /* Set up the descriptors to be polled. */ - FD_ZERO(&fds); + /* Set up the descriptors to be polled. */ + FD_ZERO(&fds); - for (l = protocols; l; l = l->next) - FD_SET(l->fd, &fds); + for (l = protocols; l; l = l->next) + FD_SET(l->fd, &fds); - /* Wait for a packet or a timeout... XXX */ - timeval.tv_sec = to_msec / 1000; - timeval.tv_usec = to_msec % 1000; + /* Wait for a packet or a timeout... XXX */ + timeval.tv_sec = to_msec / 1000; + timeval.tv_usec = to_msec % 1000; - ApiUnlock(); + ApiUnlock(); - if (protocols) count = select(0, &fds, NULL, NULL, &timeval); - else { - Sleep(to_msec); - count = 0; + + ApiLock(); } + else + { + ApiUnlock(); + WaitForSingleObject(AdapterStateChangedEvent, INFINITE); + ApiLock(); - ApiLock(); + continue; + } DH_DbgPrint(MID_TRACE,("Select: %d\n", count)); @@ -149,6 +153,8 @@ dispatch(void) } } while (1); + CloseHandle(AdapterStateChangedEvent); + ApiUnlock(); }