mirror of
https://github.com/FreeRDP/FreeRDP.git
synced 2025-06-03 00:00:20 +00:00
xfreerdp-server: Proper shutdown of helper threads when a client disconnects.
This commit is contained in:
parent
5ae4d88c14
commit
772ca6f99d
@ -87,6 +87,9 @@ void* xf_frame_rate_thread(void* param)
|
|||||||
|
|
||||||
while (1)
|
while (1)
|
||||||
{
|
{
|
||||||
|
// check if we should terminate
|
||||||
|
pthread_testcancel();
|
||||||
|
|
||||||
event = xf_event_new(XF_EVENT_TYPE_FRAME_TICK);
|
event = xf_event_new(XF_EVENT_TYPE_FRAME_TICK);
|
||||||
xf_event_push(xfp->event_queue, (xfEvent*) event);
|
xf_event_push(xfp->event_queue, (xfEvent*) event);
|
||||||
freerdp_usleep(wait_interval);
|
freerdp_usleep(wait_interval);
|
||||||
@ -119,10 +122,11 @@ void* xf_monitor_updates(void* param)
|
|||||||
|
|
||||||
pthread_create(&(xfp->frame_rate_thread), 0, xf_frame_rate_thread, (void*) client);
|
pthread_create(&(xfp->frame_rate_thread), 0, xf_frame_rate_thread, (void*) client);
|
||||||
|
|
||||||
pthread_detach(pthread_self());
|
|
||||||
|
|
||||||
while (1)
|
while (1)
|
||||||
{
|
{
|
||||||
|
// check if we should terminate
|
||||||
|
pthread_testcancel();
|
||||||
|
|
||||||
FD_ZERO(&rfds_set);
|
FD_ZERO(&rfds_set);
|
||||||
FD_SET(fds, &rfds_set);
|
FD_SET(fds, &rfds_set);
|
||||||
|
|
||||||
|
@ -600,12 +600,15 @@ void* xf_peer_main_loop(void* arg)
|
|||||||
rdpSettings* settings;
|
rdpSettings* settings;
|
||||||
char* server_file_path;
|
char* server_file_path;
|
||||||
freerdp_peer* client = (freerdp_peer*) arg;
|
freerdp_peer* client = (freerdp_peer*) arg;
|
||||||
|
xfPeerContext* xfp;
|
||||||
|
|
||||||
memset(rfds, 0, sizeof(rfds));
|
memset(rfds, 0, sizeof(rfds));
|
||||||
|
|
||||||
printf("We've got a client %s\n", client->hostname);
|
printf("We've got a client %s\n", client->hostname);
|
||||||
|
|
||||||
xf_peer_init(client);
|
xf_peer_init(client);
|
||||||
|
xfp = (xfPeerContext*) client->context;
|
||||||
|
|
||||||
settings = client->settings;
|
settings = client->settings;
|
||||||
|
|
||||||
/* Initialize the real server settings here */
|
/* Initialize the real server settings here */
|
||||||
@ -695,6 +698,13 @@ void* xf_peer_main_loop(void* arg)
|
|||||||
printf("Client %s disconnected.\n", client->hostname);
|
printf("Client %s disconnected.\n", client->hostname);
|
||||||
|
|
||||||
client->Disconnect(client);
|
client->Disconnect(client);
|
||||||
|
|
||||||
|
pthread_cancel(xfp->thread);
|
||||||
|
pthread_cancel(xfp->frame_rate_thread);
|
||||||
|
|
||||||
|
pthread_join(xfp->thread, NULL);
|
||||||
|
pthread_join(xfp->frame_rate_thread, NULL);
|
||||||
|
|
||||||
freerdp_peer_context_free(client);
|
freerdp_peer_context_free(client);
|
||||||
freerdp_peer_free(client);
|
freerdp_peer_free(client);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user