48 lines
1.5 KiB
Diff
48 lines
1.5 KiB
Diff
From 675c20f08f32ca5ec06297108bdf30147d6e2cd9 Mon Sep 17 00:00:00 2001
|
|
From: akallabeth <akallabeth@posteo.net>
|
|
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)
|
|
{
|
|
--
|
|
2.53.0
|
|
|