transport: exit transport loop when the session is activated.
authorVic Lee <llyzs.vic@gmail.com>
Thu, 11 Sep 2014 21:04:32 +0000 (14:04 -0700)
committerVic Lee <llyzs.vic@gmail.com>
Thu, 11 Sep 2014 21:04:32 +0000 (14:04 -0700)
libfreerdp/core/rdp.c
libfreerdp/core/transport.c

index 170b93b..5360d53 100644 (file)
@@ -1153,7 +1153,10 @@ static int rdp_recv_callback(rdpTransport* transport, wStream* s, void* extra)
                        status = rdp_recv_pdu(rdp, s);
 
                        if ((status >= 0) && (rdp->finalize_sc_pdus == FINALIZE_SC_COMPLETE))
+                       {
                                rdp_client_transition_to_state(rdp, CONNECTION_STATE_ACTIVE);
+                               return 2;
+                       }
                        break;
 
                case CONNECTION_STATE_ACTIVE:
index a7c0c93..4ffe35a 100644 (file)
@@ -1071,12 +1071,13 @@ int transport_check_fds(rdpTransport* transport)
                 */
 
                recv_status = transport->ReceiveCallback(transport, received, transport->ReceiveExtra);
+               Stream_Release(received);
 
-               if (recv_status == 1)
+               /* session redirection or activation */
+               if (recv_status == 1 || recv_status == 2)
                {
-                       return 1; /* session redirection */
+                       return recv_status;
                }
-               Stream_Release(received);
 
                if (recv_status < 0)
                        return -1;