transport: check if layer was set to closed
authorNorbert Federa <norbert.federa@thincast.com>
Fri, 27 Dec 2019 10:58:27 +0000 (11:58 +0100)
committerNorbert Federa <norbert.federa@thincast.com>
Fri, 27 Dec 2019 11:37:03 +0000 (12:37 +0100)
There are several code paths and error conditions where
transport->layer is correctly set to TRANSPORT_LAYER_CLOSED but
the required code for checking that state was missing.

E.g. write errors in the rdg code resulted in marking the transport
layer as closed but the transport code would indefinitely continue
to read from the receiving socket.

libfreerdp/core/transport.c

index 3f7db6b..03ad9c8 100644 (file)
@@ -1005,6 +1005,12 @@ int transport_check_fds(rdpTransport* transport)
        if (!transport)
                return -1;
 
+       if (transport->layer == TRANSPORT_LAYER_CLOSED)
+       {
+               WLog_Print(transport->log, WLOG_DEBUG, "transport_check_fds: transport layer closed");
+               return -1;
+       }
+
        dueDate = now + transport->settings->MaxTimeInCheckLoop;
 
        if (transport->haveMoreBytesToRead)