Merge pull request #416 from lordcrc/master

Proper thread shutdown for server
This commit is contained in:
Marc-André Moreau
2012-02-10 15:44:13 -08:00
2 changed files with 16 additions and 2 deletions

View File

@@ -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);

View File

@@ -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);