From 675c20f08f32ca5ec06297108bdf30147d6e2cd9 Mon Sep 17 00:00:00 2001 From: akallabeth Date: Tue, 13 Jan 2026 09:39:33 +0100 Subject: [PATCH] [channels,serial] explicitly lock serial->IrpThreads --- channels/serial/client/serial_main.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/channels/serial/client/serial_main.c b/channels/serial/client/serial_main.c index 7ec744afa..59ef0cb9b 100644 --- a/channels/serial/client/serial_main.c +++ b/channels/serial/client/serial_main.c @@ -626,7 +626,10 @@ static void create_irp_thread(SERIAL_DEVICE* serial, IRP* irp) * observed with FreeRDP). */ key = irp->CompletionId + 1ull; + + ListDictionary_Lock(serial->IrpThreads); previousIrpThread = ListDictionary_GetItemValue(serial->IrpThreads, (void*)key); + ListDictionary_Unlock(serial->IrpThreads); if (previousIrpThread) { @@ -742,7 +745,10 @@ static DWORD WINAPI serial_thread_func(LPVOID arg) create_irp_thread(serial, irp); } + ListDictionary_Lock(serial->IrpThreads); ListDictionary_Clear(serial->IrpThreads); + ListDictionary_Unlock(serial->IrpThreads); + if (error && serial->rdpcontext) setChannelError(serial->rdpcontext, error, "serial_thread_func reported an error"); @@ -971,7 +977,7 @@ FREERDP_ENTRY_POINT( } /* IrpThreads content only modified by create_irp_thread() */ - serial->IrpThreads = ListDictionary_New(TRUE); + serial->IrpThreads = ListDictionary_New(FALSE); if (!serial->IrpThreads) {