aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--nxcomp/CHANGELOG4
-rw-r--r--nxcomp/Proxy.cpp19
-rw-r--r--nxcomp/ServerProxy.cpp2
3 files changed, 23 insertions, 2 deletions
diff --git a/nxcomp/CHANGELOG b/nxcomp/CHANGELOG
index df10c85ce..b7ef0d97a 100644
--- a/nxcomp/CHANGELOG
+++ b/nxcomp/CHANGELOG
@@ -1,5 +1,9 @@
ChangeLog:
+nxcomp-3.5.0-2
+
+- Fixed TR11H02398. Solved a race condition when creating channels.
+
nxcomp-3.5.0-1
- Opened the 3.5.0 branch based on nxcomp-3.4.0-7.
diff --git a/nxcomp/Proxy.cpp b/nxcomp/Proxy.cpp
index 347dd5add..3b4df7eb6 100644
--- a/nxcomp/Proxy.cpp
+++ b/nxcomp/Proxy.cpp
@@ -1,6 +1,6 @@
/**************************************************************************/
/* */
-/* Copyright (c) 2001, 2010 NoMachine, http://www.nomachine.com/. */
+/* Copyright (c) 2001, 2011 NoMachine, http://www.nomachine.com/. */
/* */
/* NXCOMP, NX protocol compression and NX extensions to this software */
/* are copyright of NoMachine. Redistribution and use of the present */
@@ -1626,6 +1626,23 @@ int Proxy::handleControlFromProxy(const unsigned char *message)
int channelId = *(message + 2);
//
+ // Check if the channel has been dropped.
+ //
+
+ if (channels_[channelId] != NULL &&
+ (channels_[channelId] -> getDrop() == 1 ||
+ channels_[channelId] -> getClosing() == 1))
+ {
+ #ifdef TEST
+ *logofs << "Proxy: Dropping the descriptor FD#"
+ << getFd(channelId) << " channel ID#"
+ << channelId << ".\n" << logofs_flush;
+ #endif
+
+ handleDrop(channelId);
+ }
+
+ //
// Check if the channel is in the valid
// range.
//
diff --git a/nxcomp/ServerProxy.cpp b/nxcomp/ServerProxy.cpp
index 404dd5123..0a72fc301 100644
--- a/nxcomp/ServerProxy.cpp
+++ b/nxcomp/ServerProxy.cpp
@@ -1,6 +1,6 @@
/**************************************************************************/
/* */
-/* Copyright (c) 2001, 2010 NoMachine, http://www.nomachine.com/. */
+/* Copyright (c) 2001, 2011 NoMachine, http://www.nomachine.com/. */
/* */
/* NXCOMP, NX protocol compression and NX extensions to this software */
/* are copyright of NoMachine. Redistribution and use of the present */