2
* Copyright (c) 2005 Massachusetts Institute of Technology
4
* Permission is hereby granted, free of charge, to any person
5
* obtaining a copy of this software and associated documentation
6
* files (the "Software"), to deal in the Software without
7
* restriction, including without limitation the rights to use, copy,
8
* modify, merge, publish, distribute, sublicense, and/or sell copies
9
* of the Software, and to permit persons to whom the Software is
10
* furnished to do so, subject to the following conditions:
12
* The above copyright notice and this permission notice shall be
13
* included in all copies or substantial portions of the Software.
15
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
16
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
17
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
18
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
19
* BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
20
* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
21
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
30
static HANDLE evt_terminate = NULL;
31
static HANDLE h_thread = NULL;
34
addr_change_thread(LPVOID dummy) {
42
ZeroMemory(&overlap, sizeof(overlap));
45
overlap.hEvent = CreateEvent(NULL, TRUE, FALSE, NULL);
48
ret = NotifyAddrChange(&h_notify, &overlap);
50
if (ret != ERROR_IO_PENDING) {
51
goto _end_thread; /* some error */
54
h_waits[0] = overlap.hEvent;
55
h_waits[1] = evt_terminate;
57
ret = WaitForMultipleObjects(2, h_waits, FALSE, INFINITE);
59
if ( ret == WAIT_OBJECT_0 ) {
60
kmq_post_message(KMSG_CRED, KMSG_CRED_ADDR_CHANGE,
69
return 0; /* unreachable */
73
khm_addr_change_notifier_init(void) {
74
evt_terminate = CreateEvent(NULL, FALSE, FALSE, NULL);
75
h_thread = CreateThread(NULL,
84
khm_addr_change_notifier_exit(void) {
85
if (h_thread && evt_terminate) {
86
SetEvent(evt_terminate);
87
WaitForSingleObject(h_thread, INFINITE);
89
CloseHandle(h_thread);
90
CloseHandle(evt_terminate);