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)
|
||||
{
|
||||
// check if we should terminate
|
||||
pthread_testcancel();
|
||||
|
||||
event = xf_event_new(XF_EVENT_TYPE_FRAME_TICK);
|
||||
xf_event_push(xfp->event_queue, (xfEvent*) event);
|
||||
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_detach(pthread_self());
|
||||
|
||||
while (1)
|
||||
{
|
||||
// check if we should terminate
|
||||
pthread_testcancel();
|
||||
|
||||
FD_ZERO(&rfds_set);
|
||||
FD_SET(fds, &rfds_set);
|
||||
|
||||
|
@ -600,12 +600,15 @@ void* xf_peer_main_loop(void* arg)
|
||||
rdpSettings* settings;
|
||||
char* server_file_path;
|
||||
freerdp_peer* client = (freerdp_peer*) arg;
|
||||
xfPeerContext* xfp;
|
||||
|
||||
memset(rfds, 0, sizeof(rfds));
|
||||
|
||||
printf("We've got a client %s\n", client->hostname);
|
||||
|
||||
xf_peer_init(client);
|
||||
xfp = (xfPeerContext*) client->context;
|
||||
|
||||
settings = client->settings;
|
||||
|
||||
/* Initialize the real server settings here */
|
||||
@ -695,6 +698,13 @@ void* xf_peer_main_loop(void* arg)
|
||||
printf("Client %s disconnected.\n", client->hostname);
|
||||
|
||||
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_free(client);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user