Module: wine Branch: master Commit: e687ebd3631878d12d00b642d39010f5f38b3028 URL: https://gitlab.winehq.org/wine/wine/-/commit/e687ebd3631878d12d00b642d39010f...
Author: Piotr Caban piotr@codeweavers.com Date: Wed Nov 30 09:47:07 2022 +0100
localspl: Return error if cups port handle is used from different threads.
---
dlls/localspl/localmon.c | 17 +++++++++++++++++ 1 file changed, 17 insertions(+)
diff --git a/dlls/localspl/localmon.c b/dlls/localspl/localmon.c index ce0b7c9caea..e1e7153600d 100644 --- a/dlls/localspl/localmon.c +++ b/dlls/localspl/localmon.c @@ -66,6 +66,7 @@ typedef struct { struct list entry; DWORD type; HANDLE hfile; + DWORD thread_id; INT64 doc_handle; WCHAR nameW[1]; } port_t; @@ -516,6 +517,8 @@ static BOOL WINAPI localmon_StartDocPort(HANDLE hport, WCHAR *printer_name, if (port->doc_handle) return TRUE;
+ port->thread_id = GetCurrentThreadId(); + params.type = port->type; params.port = port->nameW; params.document_title = doc_info ? doc_info->pDocName : NULL; @@ -561,6 +564,13 @@ static BOOL WINAPI localmon_WritePort(HANDLE hport, BYTE *buf, DWORD size, return FALSE; }
+ if (port->type == PORT_IS_CUPS && port->thread_id != GetCurrentThreadId()) + { + FIXME("used from other thread\n"); + SetLastError(ERROR_CALL_NOT_IMPLEMENTED); + return FALSE; + } + params.doc = port->doc_handle; params.buf = buf; params.size = size; @@ -585,6 +595,13 @@ static BOOL WINAPI localmon_EndDocPort(HANDLE hport) if (!port->doc_handle) return TRUE;
+ if (port->type == PORT_IS_CUPS && port->thread_id != GetCurrentThreadId()) + { + FIXME("used from other thread\n"); + SetLastError(ERROR_CALL_NOT_IMPLEMENTED); + return FALSE; + } + params.doc = port->doc_handle; port->doc_handle = 0; return UNIX_CALL(end_doc, ¶ms);