X-Git-Url: https://asedeno.scripts.mit.edu/gitweb/?a=blobdiff_plain;f=windows%2Fwinpgntc.c;h=6e085e424471e62c398fad515a09f6879a17b0f2;hb=f864265e393f4279045ca59d7eb9b03352766cde;hp=06649abc13f3db2d84ca75df2d509a9a493df175;hpb=35d6c97dd733dd258be5ba7e17ec6793a4be79fb;p=PuTTY.git diff --git a/windows/winpgntc.c b/windows/winpgntc.c index 06649abc..6e085e42 100644 --- a/windows/winpgntc.c +++ b/windows/winpgntc.c @@ -24,52 +24,6 @@ int agent_exists(void) return TRUE; } -/* - * Unfortunately, this asynchronous agent request mechanism doesn't - * appear to work terribly well. I'm going to comment it out for - * the moment, and see if I can come up with a better one :-/ - */ -#ifdef WINDOWS_ASYNC_AGENT - -struct agent_query_data { - COPYDATASTRUCT cds; - unsigned char *mapping; - HANDLE handle; - char *mapname; - HWND hwnd; - void (*callback)(void *, void *, int); - void *callback_ctx; -}; - -DWORD WINAPI agent_query_thread(LPVOID param) -{ - struct agent_query_data *data = (struct agent_query_data *)param; - unsigned char *ret; - int id, retlen; - - id = SendMessage(data->hwnd, WM_COPYDATA, (WPARAM) NULL, - (LPARAM) &data->cds); - ret = NULL; - if (id > 0) { - retlen = 4 + GET_32BIT(data->mapping); - ret = snewn(retlen, unsigned char); - if (ret) { - memcpy(ret, data->mapping, retlen); - } - } - if (!ret) - retlen = 0; - UnmapViewOfFile(data->mapping); - CloseHandle(data->handle); - sfree(data->mapname); - - agent_schedule_callback(data->callback, data->callback_ctx, ret, retlen); - - return 0; -} - -#endif - int agent_query(void *in, int inlen, void **out, int *outlen, void (*callback)(void *, void *, int), void *callback_ctx) { @@ -136,31 +90,6 @@ int agent_query(void *in, int inlen, void **out, int *outlen, cds.dwData = AGENT_COPYDATA_ID; cds.cbData = 1 + strlen(mapname); cds.lpData = mapname; -#ifdef WINDOWS_ASYNC_AGENT - if (callback != NULL && !(flags & FLAG_SYNCAGENT)) { - /* - * We need an asynchronous Pageant request. Since I know of - * no way to stop SendMessage from blocking the thread it's - * called in, I see no option but to start a fresh thread. - * When we're done we'll PostMessage the result back to our - * main window, so that the callback is done in the primary - * thread to avoid concurrency. - */ - struct agent_query_data *data = snew(struct agent_query_data); - DWORD threadid; - data->mapping = p; - data->handle = filemap; - data->mapname = mapname; - data->callback = callback; - data->callback_ctx = callback_ctx; - data->cds = cds; /* structure copy */ - data->hwnd = hwnd; - if (CreateThread(NULL, 0, agent_query_thread, data, 0, &threadid)) - return 0; - sfree(mapname); - sfree(data); - } -#endif /* * The user either passed a null callback (indicating that the