summaryrefslogtreecommitdiffstats
path: root/sesman/thread.c
diff options
context:
space:
mode:
authorLaxmikant Rashinkar <LK.Rashinkar@gmail.com>2012-09-19 20:51:34 -0700
committerLaxmikant Rashinkar <LK.Rashinkar@gmail.com>2012-09-19 20:51:34 -0700
commit1123323fda6d128fb98b0427e0ea5f6a2dc9e632 (patch)
tree3407a3771a069f812554312ce7c36db625139cc2 /sesman/thread.c
parent3cedfae76a2351bc8b1e5bd2ee33bbf8630dbacf (diff)
downloadxrdp-proprietary-1123323fda6d128fb98b0427e0ea5f6a2dc9e632.tar.gz
xrdp-proprietary-1123323fda6d128fb98b0427e0ea5f6a2dc9e632.zip
o moved from GNU General Public License to Apache License, Version 2.0
o applied new coding standards to all .c files o moved some files around
Diffstat (limited to 'sesman/thread.c')
-rw-r--r--sesman/thread.c259
1 files changed, 129 insertions, 130 deletions
diff --git a/sesman/thread.c b/sesman/thread.c
index 98a92533..a33b93d9 100644
--- a/sesman/thread.c
+++ b/sesman/thread.c
@@ -1,21 +1,20 @@
-/*
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-
- xrdp: A Remote Desktop Protocol server.
- Copyright (C) Jay Sorg 2005-2010
-*/
+/**
+ * xrdp: A Remote Desktop Protocol server.
+ *
+ * Copyright (C) Jay Sorg 2004-2012
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
/**
*
@@ -31,7 +30,7 @@
#include <signal.h>
#include <pthread.h>
-extern struct config_sesman* g_cfg; /* in sesman.c */
+extern struct config_sesman *g_cfg; /* in sesman.c */
static pthread_t g_thread_sighandler;
//static pthread_t g_thread_updater;
@@ -43,53 +42,53 @@ int g_thread_sck;
int DEFAULT_CC
thread_sighandler_start(void)
{
- int ret;
- sigset_t sigmask;
- sigset_t oldmask;
- sigset_t waitmask;
-
- /* mask signals to be able to wait for them... */
- sigfillset(&sigmask);
- pthread_sigmask(SIG_BLOCK, &sigmask, &oldmask);
-
- /* unblock some signals... */
- sigemptyset(&waitmask);
-
- /* it is a good idea not to block SIGILL SIGSEGV */
- /* SIGFPE -- see sigaction(2) NOTES */
- sigaddset(&waitmask, SIGILL);
- sigaddset(&waitmask, SIGSEGV);
- sigaddset(&waitmask, SIGFPE);
- pthread_sigmask(SIG_UNBLOCK, &waitmask, NULL);
-
- log_message(LOG_LEVEL_INFO,"starting signal handling thread...");
-
- ret = pthread_create(&g_thread_sighandler, NULL, sig_handler_thread, "");
- pthread_detach(g_thread_sighandler);
-
- if (ret == 0)
- {
- log_message(LOG_LEVEL_INFO, "signal handler thread started successfully");
- return 0;
- }
-
- /* if something happened while starting a new thread... */
- switch (ret)
- {
- case EINVAL:
- log_message(LOG_LEVEL_ERROR, "invalid attributes for signal handling thread (creation returned EINVAL)");
- break;
- case EAGAIN:
- log_message(LOG_LEVEL_ERROR, "not enough resources to start signal handling thread (creation returned EAGAIN)");
- break;
- case EPERM:
- log_message(LOG_LEVEL_ERROR, "invalid permissions for signal handling thread (creation returned EPERM)");
- break;
- default:
- log_message(LOG_LEVEL_ERROR, "unknown error starting signal handling thread");
- }
-
- return 1;
+ int ret;
+ sigset_t sigmask;
+ sigset_t oldmask;
+ sigset_t waitmask;
+
+ /* mask signals to be able to wait for them... */
+ sigfillset(&sigmask);
+ pthread_sigmask(SIG_BLOCK, &sigmask, &oldmask);
+
+ /* unblock some signals... */
+ sigemptyset(&waitmask);
+
+ /* it is a good idea not to block SIGILL SIGSEGV */
+ /* SIGFPE -- see sigaction(2) NOTES */
+ sigaddset(&waitmask, SIGILL);
+ sigaddset(&waitmask, SIGSEGV);
+ sigaddset(&waitmask, SIGFPE);
+ pthread_sigmask(SIG_UNBLOCK, &waitmask, NULL);
+
+ log_message(LOG_LEVEL_INFO, "starting signal handling thread...");
+
+ ret = pthread_create(&g_thread_sighandler, NULL, sig_handler_thread, "");
+ pthread_detach(g_thread_sighandler);
+
+ if (ret == 0)
+ {
+ log_message(LOG_LEVEL_INFO, "signal handler thread started successfully");
+ return 0;
+ }
+
+ /* if something happened while starting a new thread... */
+ switch (ret)
+ {
+ case EINVAL:
+ log_message(LOG_LEVEL_ERROR, "invalid attributes for signal handling thread (creation returned EINVAL)");
+ break;
+ case EAGAIN:
+ log_message(LOG_LEVEL_ERROR, "not enough resources to start signal handling thread (creation returned EAGAIN)");
+ break;
+ case EPERM:
+ log_message(LOG_LEVEL_ERROR, "invalid permissions for signal handling thread (creation returned EPERM)");
+ break;
+ default:
+ log_message(LOG_LEVEL_ERROR, "unknown error starting signal handling thread");
+ }
+
+ return 1;
}
#ifdef JUST_TO_AVOID_COMPILER_ERRORS
@@ -97,38 +96,38 @@ thread_sighandler_start(void)
int DEFAULT_CC
thread_session_update_start(void)
{
- int ret;
- //starts the session update thread
- //that checks for idle time, destroys sessions, ecc...
+ int ret;
+ //starts the session update thread
+ //that checks for idle time, destroys sessions, ecc...
#warning this thread should always request lock_fork before read or write
#warning (so we can Fork() In Peace)
- ret = pthread_create(&g_thread_updater, NULL, , "");
- pthread_detach(g_thread_updater);
-
- if (ret == 0)
- {
- log_message(&(g_cfg->log), LOG_LEVEL_INFO, "session update thread started successfully");
- return 0;
- }
-
- /* if something happened while starting a new thread... */
- switch (ret)
- {
- case EINVAL:
- log_message(LOG_LEVEL_ERROR, "invalid attributes for session update thread (creation returned EINVAL)");
- break;
- case EAGAIN:
- log_message(LOG_LEVEL_ERROR, "not enough resources to start session update thread (creation returned EAGAIN)");
- break;
- case EPERM:
- log_message(LOG_LEVEL_ERROR, "invalid permissions for session update thread (creation returned EPERM)");
- break;
- default:
- log_message(LOG_LEVEL_ERROR, "unknown error starting session update thread");
- }
-
- return 1;
+ ret = pthread_create(&g_thread_updater, NULL, , "");
+ pthread_detach(g_thread_updater);
+
+ if (ret == 0)
+ {
+ log_message(&(g_cfg->log), LOG_LEVEL_INFO, "session update thread started successfully");
+ return 0;
+ }
+
+ /* if something happened while starting a new thread... */
+ switch (ret)
+ {
+ case EINVAL:
+ log_message(LOG_LEVEL_ERROR, "invalid attributes for session update thread (creation returned EINVAL)");
+ break;
+ case EAGAIN:
+ log_message(LOG_LEVEL_ERROR, "not enough resources to start session update thread (creation returned EAGAIN)");
+ break;
+ case EPERM:
+ log_message(LOG_LEVEL_ERROR, "invalid permissions for session update thread (creation returned EPERM)");
+ break;
+ default:
+ log_message(LOG_LEVEL_ERROR, "unknown error starting session update thread");
+ }
+
+ return 1;
}
#endif
@@ -136,39 +135,39 @@ thread_session_update_start(void)
int DEFAULT_CC
thread_scp_start(int skt)
{
- int ret;
- pthread_t th;
-
- /* blocking the use of thread_skt */
- lock_socket_acquire();
- g_thread_sck = skt;
-
- /* start a thread that processes a connection */
- ret = pthread_create(&th, NULL, scp_process_start, "");
- //ret = pthread_create(&th, NULL, scp_process_start, (void*) (&g_thread_sck));
- pthread_detach(th);
-
- if (ret == 0)
- {
- log_message(LOG_LEVEL_INFO, "scp thread on sck %d started successfully", skt);
- return 0;
- }
-
- /* if something happened while starting a new thread... */
- switch (ret)
- {
- case EINVAL:
- log_message(LOG_LEVEL_ERROR, "invalid attributes for scp thread on sck %d (creation returned EINVAL)", skt);
- break;
- case EAGAIN:
- log_message(LOG_LEVEL_ERROR, "not enough resources to start scp thread on sck %d (creation returned EAGAIN)", skt);
- break;
- case EPERM:
- log_message(LOG_LEVEL_ERROR, "invalid permissions for scp thread on sck %d (creation returned EPERM)", skt);
- break;
- default:
- log_message(LOG_LEVEL_ERROR, "unknown error starting scp thread on sck %d");
- }
-
- return 1;
+ int ret;
+ pthread_t th;
+
+ /* blocking the use of thread_skt */
+ lock_socket_acquire();
+ g_thread_sck = skt;
+
+ /* start a thread that processes a connection */
+ ret = pthread_create(&th, NULL, scp_process_start, "");
+ //ret = pthread_create(&th, NULL, scp_process_start, (void*) (&g_thread_sck));
+ pthread_detach(th);
+
+ if (ret == 0)
+ {
+ log_message(LOG_LEVEL_INFO, "scp thread on sck %d started successfully", skt);
+ return 0;
+ }
+
+ /* if something happened while starting a new thread... */
+ switch (ret)
+ {
+ case EINVAL:
+ log_message(LOG_LEVEL_ERROR, "invalid attributes for scp thread on sck %d (creation returned EINVAL)", skt);
+ break;
+ case EAGAIN:
+ log_message(LOG_LEVEL_ERROR, "not enough resources to start scp thread on sck %d (creation returned EAGAIN)", skt);
+ break;
+ case EPERM:
+ log_message(LOG_LEVEL_ERROR, "invalid permissions for scp thread on sck %d (creation returned EPERM)", skt);
+ break;
+ default:
+ log_message(LOG_LEVEL_ERROR, "unknown error starting scp thread on sck %d");
+ }
+
+ return 1;
}