diff options
35 files changed, 6 insertions, 2253 deletions
diff --git a/src/dlls/mscoree/mscorwks_unixexports.src b/src/dlls/mscoree/mscorwks_unixexports.src index 41e1e9caf8..5cc54390a6 100644 --- a/src/dlls/mscoree/mscorwks_unixexports.src +++ b/src/dlls/mscoree/mscorwks_unixexports.src @@ -82,7 +82,6 @@ ReleaseSemaphore RemoveDirectoryW ResetEvent RtlZeroMemory -SetConsoleCtrlHandler SetCurrentDirectoryW SetEndOfFile SetEnvironmentVariableW diff --git a/src/pal/inc/pal.h b/src/pal/inc/pal.h index efefd4c281..9e44eca30f 100644 --- a/src/pal/inc/pal.h +++ b/src/pal/inc/pal.h @@ -480,10 +480,9 @@ typedef long time_t; #define PAL_INITIALIZE_NONE 0x00 #define PAL_INITIALIZE_SYNC_THREAD 0x01 -#define PAL_INITIALIZE_SIGNAL_THREAD 0x02 // PAL_Initialize() flags -#define PAL_INITIALIZE PAL_INITIALIZE_SYNC_THREAD | PAL_INITIALIZE_SIGNAL_THREAD +#define PAL_INITIALIZE PAL_INITIALIZE_SYNC_THREAD // PAL_InitializeDLL() flags - don't start any of the helper threads #define PAL_INITIALIZE_DLL PAL_INITIALIZE_NONE @@ -777,13 +776,6 @@ BOOL DWORD CtrlType ); -PALIMPORT -BOOL -PALAPI -SetConsoleCtrlHandler( - IN PHANDLER_ROUTINE HandlerRoutine, - IN BOOL Add); - #ifndef CORECLR PALIMPORT BOOL diff --git a/src/pal/src/CMakeLists.txt b/src/pal/src/CMakeLists.txt index 03b3ea694b..0191a992d3 100644 --- a/src/pal/src/CMakeLists.txt +++ b/src/pal/src/CMakeLists.txt @@ -106,7 +106,6 @@ set(SOURCES cruntime/wchar.cpp cruntime/wchartls.cpp debug/debug.cpp - exception/console.cpp exception/seh.cpp exception/signal.cpp file/directory.cpp diff --git a/src/pal/src/exception/console.cpp b/src/pal/src/exception/console.cpp deleted file mode 100644 index b4b02fed1f..0000000000 --- a/src/pal/src/exception/console.cpp +++ /dev/null @@ -1,398 +0,0 @@ -// -// Copyright (c) Microsoft. All rights reserved. -// Licensed under the MIT license. See LICENSE file in the project root for full license information. -// - -/*++ - - - -Module Name: - - console.cpp - -Abstract: - - Implementation of console ctrl API functions. - - - ---*/ - -#include "pal/thread.hpp" -#include "pal/dbgmsg.h" -#include "pal/malloc.hpp" -#include "pal/process.h" -#include <errno.h> - -using namespace CorUnix; - -SET_DEFAULT_DEBUG_CHANNEL(EXCEPT); - -/* Constant and type definitions **********************************************/ - -typedef struct CTRL_HANDLER_LIST -{ - PHANDLER_ROUTINE handler; - struct CTRL_HANDLER_LIST *next; -} CTRL_HANDLER_LIST; - -/* Static variables ***********************************************************/ - -/* for manipulating process control-handler list, etc */ -CRITICAL_SECTION exception_critsec; - -static CTRL_HANDLER_LIST * pCtrlHandler; -static int nCtrlHandlerListLength; - -/* Internal function definitions **********************************************/ - -/*++ -Function : - SEHInitializeConsole - - Initialize stuff related to console ctrl events - - (no parameters) - -Return value : - TRUE if initialization succeeded - FALSE otherwise ---*/ -BOOL SEHInitializeConsole() -{ - pCtrlHandler = NULL; - nCtrlHandlerListLength = 0; - InternalInitializeCriticalSection(&exception_critsec); - return TRUE; -} - -/* PAL function definitions ***************************************************/ - -/*++ -Function: - SetConsoleCtrlHandler - -See MSDN doc. - ---*/ -BOOL -PALAPI -SetConsoleCtrlHandler( - IN PHANDLER_ROUTINE HandlerRoutine, - IN BOOL Add) -{ - BOOL retval = FALSE; - CTRL_HANDLER_LIST *handler; - CPalThread * pThread; - - PERF_ENTRY(SetConsoleCtrlHandler); - ENTRY("SetConsoleCtrlHandler(HandlerRoutine=%p, Add=%d)\n", - HandlerRoutine, Add); - - pThread = InternalGetCurrentThread(); - InternalEnterCriticalSection(pThread, &exception_critsec); - - if(NULL == HandlerRoutine) - { - ASSERT("HandlerRoutine may not be NULL, control-c-ignoration is not " - "supported\n"); - goto done; - } - - if(Add) - { - handler = (CTRL_HANDLER_LIST *)InternalMalloc(sizeof(CTRL_HANDLER_LIST)); - if(!handler) - { - ERROR("PAL_malloc failed! error is %d (%s)\n", errno, strerror(errno)); - SetLastError(ERROR_NOT_ENOUGH_MEMORY); - goto done; - } - handler->handler = HandlerRoutine; - /* From MSDN : - "handler functions are called on a last-registered, first-called - basis". So we can add the new handler at the head of the list. */ - handler->next = pCtrlHandler; - pCtrlHandler = handler; - nCtrlHandlerListLength++; - - TRACE("Adding Control Handler %p\n", HandlerRoutine); - retval = TRUE; - } - else - { - CTRL_HANDLER_LIST *temp_handler; - - handler = pCtrlHandler; - temp_handler = handler; - while(handler) - { - if(handler->handler == HandlerRoutine) - { - break; - } - temp_handler = handler; - handler = handler->next; - } - if(handler) - { - /* temp_handler it the item before the one to remove, unless it was - first in the list, in which case handler == temp_handler */ - if(handler == temp_handler) - { - /* handler to remove was first in the list... */ - nCtrlHandlerListLength--; - pCtrlHandler = handler->next; - - InternalFree(handler); - TRACE("Removing Control Handler %p from head of list\n", - HandlerRoutine ); - } - else - { - /* handler was not first in the list... */ - nCtrlHandlerListLength--; - temp_handler->next = handler->next; - InternalFree(handler); - TRACE("Removing Control Handler %p (not head of list)\n", - HandlerRoutine ); - } - retval = TRUE; - } - else - { - WARN("Trying to remove unknown Control Handler %p\n", - HandlerRoutine); - SetLastError(ERROR_INVALID_PARAMETER); - } - } -done: - InternalLeaveCriticalSection(pThread, &exception_critsec); - - LOGEXIT("SetConsoleCtrlHandler returns BOOL %d\n", retval); - PERF_EXIT(SetConsoleCtrlHandler); - return retval; -} - -#if !HAVE_MACH_EXCEPTIONS -// TODO: Implement for Mach exceptions. Not in CoreCLR surface area. -/*++ -Function: - GenerateConsoleCtrlEvent - -See MSDN doc. - -PAL specifics : - dwProcessGroupId must be zero - ---*/ -BOOL -PALAPI -GenerateConsoleCtrlEvent( - IN DWORD dwCtrlEvent, - IN DWORD dwProcessGroupId - ) -{ - int sig; - BOOL retval = FALSE; - - PERF_ENTRY(GenerateConsoleCtrlEvent); - ENTRY("GenerateConsoleCtrlEvent(dwCtrlEvent=%d, dwProcessGroupId=%#x)\n", - dwCtrlEvent, dwProcessGroupId); - - if(0!=dwProcessGroupId) - { - ASSERT("dwProcessGroupId is not 0, this is not supported by the PAL\n"); - SetLastError(ERROR_INVALID_PARAMETER); - goto done; - } - switch(dwCtrlEvent) - { - case CTRL_C_EVENT : - sig = SIGINT; - break; - case CTRL_BREAK_EVENT: - /* Map control-break on SIGQUIT */ - sig = SIGQUIT; - break; - default: - TRACE("got unknown control event\n"); - goto done; - } - - TRACE("sending signal %d to process %d\n", sig, gPID); - if(-1 == kill(gPID, sig)) - { - ASSERT("kill() failed; errno is %d (%s)\n",errno, strerror(errno)); - SetLastError(ERROR_INTERNAL_ERROR); - goto done; - } - retval = TRUE; -done: - LOGEXIT("GenerateConsoleCtrlEvent returns BOOL %d\n",retval); - PERF_EXIT(GenerateConsoleCtrlEvent); - return retval; -} -#endif // !HAVE_MACH_EXCEPTIONS - -#if !HAVE_MACH_EXCEPTIONS -// TODO: Implement for Mach exceptions. Not in CoreCLR surface area. -/*++ -Function : - SEHHandleControlEvent - - handle Control-C and Control-Break events (call handler routines, - notify debugger) - -Parameters : - DWORD event : event that occurred - LPVOID eip : instruction pointer when exception occurred - -(no return value) - -Notes : - Handlers are called on a last-installed, first called basis, until a - handler returns TRUE. If no handler returns TRUE (or no handler is - installed), the default behavior is to call the default handler of - the corresponding signal. ---*/ -void SEHHandleControlEvent(DWORD event, LPVOID eip) -{ - /* handler is actually a copy of the original list */ - CTRL_HANDLER_LIST *handler=NULL, *handlertail=NULL, *handlertmp, *newelem; - BOOL fHandled = FALSE; -#ifdef _DEBUG - BOOL fHoldingCritsec = TRUE; -#endif - - CPalThread *pthrCurrent = InternalGetCurrentThread(); - InternalEnterCriticalSection(pthrCurrent, &exception_critsec); - handlertmp = pCtrlHandler; - - /* nCtrlHandlerListLength is guaranteed to be at most 1 less than, - * and not greater than, actual length. - * We might get a stack overflow here, if the list is too large - * However, that will lead us to terminate with an error, which is - * the default behavior anyway. - */ - newelem = reinterpret_cast<CTRL_HANDLER_LIST *>( - alloca(sizeof(CTRL_HANDLER_LIST)*(nCtrlHandlerListLength+1)) - ); - - // If alloca failed, we terminate - if (newelem == NULL) { - ERROR("alloca failed!"); - InternalLeaveCriticalSection(pthrCurrent, &exception_critsec); -#ifdef _DEBUG - fHoldingCritsec = FALSE; -#endif - goto done; - } - - /* list copying */ - while(NULL!=handlertmp) - { - newelem->handler = handlertmp->handler; - newelem->next = NULL; - - /* add the new element to the list */ - if (handler == NULL) - { - handler = newelem; - } - else - { - handlertail->next = newelem; - } - handlertail = newelem; - - handlertmp = handlertmp->next; - - newelem++; - } - - // - // Once we've copied the handler list it's safe to release this - // critical section. We cannot call the user handler routines - // while holding this critsec -- a poorly written control handler - // may block indefinitely, which, in turn, would prevent graceful - // shutdown from occurring (as it would not be possible to - // suspend this thread due to its holding of an internal critical - // section). - // - // Note that this behavior is somewhat different than Windows -- - // where only a single control handler can run at a time. If we - // need to replicate that behavior we would need to enter a - // separate, non-internal critical section before calling the - // control handlers. - // - - InternalLeaveCriticalSection(pthrCurrent, &exception_critsec); -#ifdef _DEBUG - fHoldingCritsec = FALSE; -#endif - - /* second, call handler routines until one handles the event */ - - while(NULL!=handler) - { - BOOL handler_retval; - -/* reset ENTRY nesting level back to zero while inside the callback... */ -#if _ENABLE_DEBUG_MESSAGES_ - { - int old_level; - old_level = DBG_change_entrylevel(0); -#endif /* _ENABLE_DEBUG_MESSAGES_ */ - - handler_retval = handler->handler(event); - -/* ...and set nesting level back to what it was */ -#if _ENABLE_DEBUG_MESSAGES_ - DBG_change_entrylevel(old_level); - } -#endif /* _ENABLE_DEBUG_MESSAGES_ */ - - if(handler_retval) - { - TRACE("Console Control handler %p has handled event\n", - handler->handler); - fHandled = TRUE; - break; - } - handler = handler->next; - } - -done: -#ifdef _DEBUG - _ASSERT_MSG(!fHoldingCritsec, "Exiting SEHHandleControlEvent while still holding a critical section.\n"); -#endif - if(!fHandled) - { - int signalCode; - - if(CTRL_C_EVENT == event) - { - TRACE("Control-C not handled; terminating.\n"); - signalCode = SIGINT; - } - else - { - TRACE("Control-Break not handled; terminating.\n"); - signalCode = SIGQUIT; - } - - // The proper behavior for unhandled SIGINT/SIGQUIT is to set the signal handler to the default one - // and then send the SIGINT/SIGQUIT to self and let the default handler do its work. - struct sigaction action; - action.sa_handler = SIG_DFL; - action.sa_flags = 0; - sigemptyset(&action.sa_mask); - sigaction(signalCode, &action, NULL); - - kill(getpid(), signalCode); - } -} - -#endif // !HAVE_MACH_EXCEPTIONS diff --git a/src/pal/src/exception/seh.cpp b/src/pal/src/exception/seh.cpp index 56751cefff..7d9ff08bc0 100644 --- a/src/pal/src/exception/seh.cpp +++ b/src/pal/src/exception/seh.cpp @@ -58,16 +58,6 @@ const UINT RESERVED_SEH_BIT = 0x800000; PHARDWARE_EXCEPTION_HANDLER g_hardwareExceptionHandler = NULL; -/* Internal function declarations *********************************************/ - -BOOL SEHInitializeConsole(); - -#if !HAVE_MACH_EXCEPTIONS -PAL_ERROR -StartExternalSignalHandlerThread( - CPalThread *pthr); -#endif // !HAVE_MACH_EXCEPTIONS - /* Internal function definitions **********************************************/ /*++ @@ -89,13 +79,6 @@ SEHInitialize (CPalThread *pthrCurrent, DWORD flags) { BOOL bRet = FALSE; - if (!SEHInitializeConsole()) - { - ERROR("SEHInitializeConsole failed!\n"); - SEHCleanup(); - goto SEHInitializeExit; - } - #if !HAVE_MACH_EXCEPTIONS if (!SEHInitializeSignals()) { @@ -103,17 +86,6 @@ SEHInitialize (CPalThread *pthrCurrent, DWORD flags) SEHCleanup(); goto SEHInitializeExit; } - - if (flags & PAL_INITIALIZE_SIGNAL_THREAD) - { - PAL_ERROR palError = StartExternalSignalHandlerThread(pthrCurrent); - if (NO_ERROR != palError) - { - ERROR("StartExternalSignalHandlerThread returned %d\n", palError); - SEHCleanup(); - goto SEHInitializeExit; - } - } #endif bRet = TRUE; diff --git a/src/pal/src/exception/signal.cpp b/src/pal/src/exception/signal.cpp index 7f48fc8384..69519d4a87 100644 --- a/src/pal/src/exception/signal.cpp +++ b/src/pal/src/exception/signal.cpp @@ -65,8 +65,6 @@ static void sigfpe_handler(int code, siginfo_t *siginfo, void *context); static void sigsegv_handler(int code, siginfo_t *siginfo, void *context); static void sigtrap_handler(int code, siginfo_t *siginfo, void *context); static void sigbus_handler(int code, siginfo_t *siginfo, void *context); -static void sigint_handler(int code, siginfo_t *siginfo, void *context); -static void sigquit_handler(int code, siginfo_t *siginfo, void *context); static void common_signal_handler(PEXCEPTION_POINTERS pointers, int code, native_context_t *ucontext); @@ -83,15 +81,6 @@ struct sigaction g_previous_sigtrap; struct sigaction g_previous_sigfpe; struct sigaction g_previous_sigbus; struct sigaction g_previous_sigsegv; -struct sigaction g_previous_sigint; -struct sigaction g_previous_sigquit; - -// Pipe used for sending SIGINT / SIGQUIT signals notifications to a helper thread -// that invokes the actual handler. -int g_signalPipe[2] = { 0, 0 }; - -DWORD g_dwExternalSignalHandlerThreadId = 0; - /* public function definitions ************************************************/ @@ -173,14 +162,6 @@ void SEHCleanupSignals() restore_signal(SIGFPE, &g_previous_sigfpe); restore_signal(SIGBUS, &g_previous_sigbus); restore_signal(SIGSEGV, &g_previous_sigsegv); - - // Only restore these signals if the signal handler thread was started and - // the previous handlers saved. - if (g_dwExternalSignalHandlerThreadId != 0) - { - restore_signal(SIGINT, &g_previous_sigint); - restore_signal(SIGQUIT, &g_previous_sigquit); - } } /* internal function definitions **********************************************/ @@ -376,91 +357,6 @@ static void sigtrap_handler(int code, siginfo_t *siginfo, void *context) /*++ Function : - HandleExternalSignal - - Handle the SIGINT and SIGQUIT signals. - - -Parameters : - signalCode - code of the external signal - - (no return value) ---*/ -static void HandleExternalSignal(int signalCode) -{ - BYTE signalCodeByte = (BYTE)signalCode; - ssize_t writtenBytes; - do - { - writtenBytes = write(g_signalPipe[1], &signalCodeByte, 1); - } - while ((writtenBytes == -1) && (errno == EINTR)); - - if (writtenBytes == -1) - { - // Fatal error - abort(); - } -} - -/*++ -Function : - sigint_handler - - handle SIGINT signal - -Parameters : - POSIX signal handler parameter list ("man sigaction" for details) - - (no return value) ---*/ -static void sigint_handler(int code, siginfo_t *siginfo, void *context) -{ - if (PALIsInitialized()) - { - HandleExternalSignal(code); - } - else - { - TRACE("SIGINT signal was unhandled; chaining to previous sigaction\n"); - - if (g_previous_sigint.sa_sigaction != NULL) - { - g_previous_sigint.sa_sigaction(code, siginfo, context); - } - } -} - -/*++ -Function : - sigquit_handler - - handle SIGQUIT signal - -Parameters : - POSIX signal handler parameter list ("man sigaction" for details) - - (no return value) ---*/ -static void sigquit_handler(int code, siginfo_t *siginfo, void *context) -{ - if (PALIsInitialized()) - { - HandleExternalSignal(code); - } - else - { - TRACE("SIGQUIT signal was unhandled; chaining to previous sigaction\n"); - - if (g_previous_sigquit.sa_sigaction != NULL) - { - g_previous_sigquit.sa_sigaction(code, siginfo, context); - } - } -} - -/*++ -Function : sigbus_handler handle SIGBUS signal (EXCEPTION_ACCESS_VIOLATION?) @@ -723,180 +619,4 @@ void restore_signal(int signal_id, struct sigaction *previousAction) } } -static -DWORD -PALAPI -ExternalSignalHandlerThreadRoutine( - PVOID - ); - -static -DWORD -PALAPI -ControlHandlerThreadRoutine( - PVOID pvSignal - ); - -PAL_ERROR -StartExternalSignalHandlerThread( - CPalThread *pthr) -{ - PAL_ERROR palError = NO_ERROR; - -#ifndef DO_NOT_USE_SIGNAL_HANDLING_THREAD - HANDLE hThread; - - if (pipe(g_signalPipe) != 0) - { - palError = ERROR_CANNOT_MAKE; - goto done; - } - - palError = InternalCreateThread( - pthr, - NULL, - 0, - ExternalSignalHandlerThreadRoutine, - NULL, - 0, - SignalHandlerThread, // Want no_suspend variant - &g_dwExternalSignalHandlerThreadId, - &hThread - ); - - if (NO_ERROR != palError) - { - ERROR("Failure creating external signal handler thread (%d)\n", palError); - goto done; - } - - InternalCloseHandle(pthr, hThread); - - handle_signal(SIGINT, sigint_handler, &g_previous_sigint); - handle_signal(SIGQUIT, sigquit_handler, &g_previous_sigquit); -#endif // DO_NOT_USE_SIGNAL_HANDLING_THREAD - -done: - - return palError; -} - -static -DWORD -PALAPI -ExternalSignalHandlerThreadRoutine( - PVOID - ) -{ - DWORD dwThreadId; - bool fContinue = TRUE; - HANDLE hThread; - PAL_ERROR palError = NO_ERROR; - CPalThread *pthr = InternalGetCurrentThread(); - - // - // Wait for a signal to occur - // - - while (fContinue) - { - BYTE signalCode; - ssize_t bytesRead; - - do - { - bytesRead = read(g_signalPipe[0], &signalCode, 1); - } - while ((bytesRead == -1) && (errno == EINTR)); - - if (bytesRead == -1) - { - // Fatal error - abort(); - } - - switch (signalCode) - { - case SIGINT: - case SIGQUIT: - { - // - // Spin up a new thread to run the console handlers. We want - // to do this even if no handlers are installed, as in that - // case we want to do a normal shutdown from the new thread - // while still having this thread available to handle any - // other incoming signals. - // - // The new thread is always spawned, even if there are already - // currently console handlers running; this follows the - // Windows behavior. Yes, this means that poorly written - // console handler routines can make it impossible to kill - // a process using Ctrl-C or Ctrl-Break. "kill -9" is - // your friend. - // - // This thread must not be marked as a PalWorkerThread -- - // since it may run user code it needs to make - // DLL_THREAD_ATTACH notifications. - // - - PVOID pvCtrlCode = UintToPtr( - SIGINT == signalCode ? CTRL_C_EVENT : CTRL_BREAK_EVENT - ); - - palError = InternalCreateThread( - pthr, - NULL, - 0, - ControlHandlerThreadRoutine, - pvCtrlCode, - 0, - UserCreatedThread, - &dwThreadId, - &hThread - ); - - if (NO_ERROR != palError) - { - if (!PALIsShuttingDown()) - { - // If PAL is not shutting down, failure to create a thread is - // a fatal error. - abort(); - } - fContinue = FALSE; - break; - } - - InternalCloseHandle(pthr, hThread); - break; - } - - default: - ASSERT("Unexpected signal %d in signal thread\n", signalCode); - abort(); - break; - } - } - - // - // Perform an immediate (non-graceful) shutdown - // - - _exit(EXIT_FAILURE); - - return 0; -} - -static -DWORD -PALAPI -ControlHandlerThreadRoutine( - PVOID pvSignal - ) -{ - // Uint and DWORD are implicitly the same. - SEHHandleControlEvent(PtrToUint(pvSignal), NULL); - return 0; -} - #endif // !HAVE_MACH_EXCEPTIONS diff --git a/src/pal/tests/palsuite/paltestlist_to_be_reviewed.txt b/src/pal/tests/palsuite/paltestlist_to_be_reviewed.txt index f638e96502..e7ccda5e7f 100644 --- a/src/pal/tests/palsuite/paltestlist_to_be_reviewed.txt +++ b/src/pal/tests/palsuite/paltestlist_to_be_reviewed.txt @@ -194,13 +194,6 @@ threading/OpenEventW/test4/paltest_openeventw_test4 threading/OpenEventW/test5/paltest_openeventw_test5 threading/OpenProcess/test1/paltest_openprocess_test1 threading/QueueUserAPC/test1/paltest_queueuserapc_test1 -threading/SetConsoleCtrlHandler/test1/paltest_setconsolectrlhandler_test1 -threading/SetConsoleCtrlHandler/test10/paltest_setconsolectrlhandler_test10 -threading/SetConsoleCtrlHandler/test4/paltest_setconsolectrlhandler_test4 -threading/SetConsoleCtrlHandler/test5/paltest_setconsolectrlhandler_test5 -threading/SetConsoleCtrlHandler/test6/paltest_setconsolectrlhandler_test6 -threading/SetConsoleCtrlHandler/test7/paltest_setconsolectrlhandler_test7 -threading/SetConsoleCtrlHandler/test8/paltest_setconsolectrlhandler_test8 threading/setthreadcontext/test1/paltest_setthreadcontext_test1 threading/SuspendThread/test2/paltest_suspendthread_test2 threading/SuspendThread/test3/paltest_suspendthread_test3 diff --git a/src/pal/tests/palsuite/threading/CMakeLists.txt b/src/pal/tests/palsuite/threading/CMakeLists.txt index 7ce2b2df90..a9bd91c9f3 100644 --- a/src/pal/tests/palsuite/threading/CMakeLists.txt +++ b/src/pal/tests/palsuite/threading/CMakeLists.txt @@ -1,8 +1,5 @@ cmake_minimum_required(VERSION 2.8.12.2) -# TODO: make these tests compile if they are needed -# add_subdirectory(SetConsoleCtrlHandler) - add_subdirectory(CreateEventA) add_subdirectory(CreateEventW) add_subdirectory(CreateMutexA_ReleaseMutex) diff --git a/src/pal/tests/palsuite/threading/SetConsoleCtrlHandler/CMakeLists.txt b/src/pal/tests/palsuite/threading/SetConsoleCtrlHandler/CMakeLists.txt deleted file mode 100644 index 75b3393664..0000000000 --- a/src/pal/tests/palsuite/threading/SetConsoleCtrlHandler/CMakeLists.txt +++ /dev/null @@ -1,10 +0,0 @@ -cmake_minimum_required(VERSION 2.8.12.2) - -add_subdirectory(test1) -add_subdirectory(test10) -add_subdirectory(test4) -add_subdirectory(test5) -add_subdirectory(test6) -add_subdirectory(test7) -add_subdirectory(test8) - diff --git a/src/pal/tests/palsuite/threading/SetConsoleCtrlHandler/test1/CMakeLists.txt b/src/pal/tests/palsuite/threading/SetConsoleCtrlHandler/test1/CMakeLists.txt deleted file mode 100644 index a12b8264f5..0000000000 --- a/src/pal/tests/palsuite/threading/SetConsoleCtrlHandler/test1/CMakeLists.txt +++ /dev/null @@ -1,19 +0,0 @@ -cmake_minimum_required(VERSION 2.8.12.2) - -set(CMAKE_INCLUDE_CURRENT_DIR ON) - -set(SOURCES - test1.c -) - -add_executable(paltest_setconsolectrlhandler_test1 - ${SOURCES} -) - -add_dependencies(paltest_setconsolectrlhandler_test1 coreclrpal) - -target_link_libraries(paltest_setconsolectrlhandler_test1 - pthread - m - coreclrpal -) diff --git a/src/pal/tests/palsuite/threading/SetConsoleCtrlHandler/test1/test1.c b/src/pal/tests/palsuite/threading/SetConsoleCtrlHandler/test1/test1.c deleted file mode 100644 index 08ce81ca45..0000000000 --- a/src/pal/tests/palsuite/threading/SetConsoleCtrlHandler/test1/test1.c +++ /dev/null @@ -1,86 +0,0 @@ -// -// Copyright (c) Microsoft. All rights reserved. -// Licensed under the MIT license. See LICENSE file in the project root for full license information. -// - -/*===================================================================== -** -** Source: test1.c -** -** Purpose: Set the CtrlHandler to flip a flag -** when CTRL_C_EVENT is signalled. If the flag is flipped, the test -** succeeds. Otherwise, it will fail. Finally, check to see that -** removing the handler works alright. -** -** -**===================================================================*/ - -#include <palsuite.h> - -int Flag = 1; - -BOOL CtrlHandler(DWORD CtrlType) -{ - if(CtrlType == CTRL_C_EVENT) - { - Flag = 0; - return 1; - } - - Trace("ERROR: The CtrlHandler was called, but the event was not a " - "CTRL_C_EVENT. This is considered failure.\n"); - - return 0; -} - -int __cdecl main(int argc, char **argv) -{ - - if (0 != PAL_Initialize(argc,argv)) - { - return FAIL; - } - - /* Call the function to set the CtrlHandler */ - if( SetConsoleCtrlHandler((PHANDLER_ROUTINE) CtrlHandler, TRUE) == 0 ) - { - Fail("ERROR: SetConsoleCtrlHandler returned zero, indicating failure." - " GetLastError() returned %d.\n",GetLastError()); - } - - /* Generate a CTRL_C event */ - if(GenerateConsoleCtrlEvent(CTRL_C_EVENT, 0) == 0) - { - Fail("ERROR: GenerateConsoleCtrlEvent failed, returning zero. " - "GetLastError returned %d.\n",GetLastError()); - } - - - /* Sleep for a couple seconds to ensure that the event has time to - complete. - */ - Sleep(2000); - - /* The event handling function should set Flag = 0 if it worked - properly. Otherwise this test fails. - */ - if(Flag) - { - Fail("ERROR: When CTRL-C was generated it wasn't handled by the " - "Ctrl Handler which was defined.\n"); - } - - - /* Call the function to remove the CtrlHandler */ - - if( SetConsoleCtrlHandler((PHANDLER_ROUTINE) CtrlHandler, FALSE) == 0) - { - Fail("ERROR: SetConsoleCtrlHandler returned zero, indicating failure " - "when attempting to remove a handler. " - "GetLastError() returned %d.\n",GetLastError()); - } - - PAL_Terminate(); - return PASS; -} - diff --git a/src/pal/tests/palsuite/threading/SetConsoleCtrlHandler/test1/testinfo.dat b/src/pal/tests/palsuite/threading/SetConsoleCtrlHandler/test1/testinfo.dat deleted file mode 100644 index 04088663ed..0000000000 --- a/src/pal/tests/palsuite/threading/SetConsoleCtrlHandler/test1/testinfo.dat +++ /dev/null @@ -1,14 +0,0 @@ -# -# Copyright (c) Microsoft Corporation. All rights reserved. -# - -Version = 1.0 -Section = threading -Function = SetConsoleCtrlHandler -Name = See that CTRL-C behaviour can be set using this function. -TYPE = DEFAULT -EXE1 = test1 -Description -= Set the CtrlHandler to flip a flag -= when CTRL_C_EVENT is signalled. If the flag is flipped, the test -= succeeds. Otherwise, it will fail. diff --git a/src/pal/tests/palsuite/threading/SetConsoleCtrlHandler/test10/CMakeLists.txt b/src/pal/tests/palsuite/threading/SetConsoleCtrlHandler/test10/CMakeLists.txt deleted file mode 100644 index 3a12c845ec..0000000000 --- a/src/pal/tests/palsuite/threading/SetConsoleCtrlHandler/test10/CMakeLists.txt +++ /dev/null @@ -1,19 +0,0 @@ -cmake_minimum_required(VERSION 2.8.12.2) - -set(CMAKE_INCLUDE_CURRENT_DIR ON) - -set(SOURCES - test10.c -) - -add_executable(paltest_setconsolectrlhandler_test10 - ${SOURCES} -) - -add_dependencies(paltest_setconsolectrlhandler_test10 coreclrpal) - -target_link_libraries(paltest_setconsolectrlhandler_test10 - pthread - m - coreclrpal -) diff --git a/src/pal/tests/palsuite/threading/SetConsoleCtrlHandler/test10/test10.c b/src/pal/tests/palsuite/threading/SetConsoleCtrlHandler/test10/test10.c deleted file mode 100644 index 67c9f56368..0000000000 --- a/src/pal/tests/palsuite/threading/SetConsoleCtrlHandler/test10/test10.c +++ /dev/null @@ -1,115 +0,0 @@ -// -// Copyright (c) Microsoft. All rights reserved. -// Licensed under the MIT license. See LICENSE file in the project root for full license information. -// - -/*============================================================================= -** -** Source: test10.c -** -** Dependencies: PAL_Initialize -** PAL_Terminate -** GenerateConsoleCtrlEvent -** -** Purpose: -** -** Test to ensure proper operation of the SetConsoleCtrlHandler() -** API by checking whether a console control handler function is -** actually removed by the API when it returns success for that -** operation. -** - -** -**===========================================================================*/ -#include <palsuite.h> - - - -/* global test value */ -static BOOL g_bFlag = FALSE; - - - -/* handler function */ -static BOOL PALAPI CtrlHandler( DWORD CtrlType ) -{ - if( CtrlType == CTRL_BREAK_EVENT ) - { - g_bFlag = TRUE; - return TRUE; - } - - return FALSE; -} - - - - - -/* main entry point function */ -int __cdecl main( int argc, char **argv ) - -{ - /* local variables */ - BOOL ret = PASS; - - - /* PAL initialization */ - if( (PAL_Initialize(argc, argv)) != 0 ) - { - return( FAIL ); - } - - - /* set the console control handler function */ - if( ! SetConsoleCtrlHandler( CtrlHandler, TRUE ) ) - { - ret = FAIL; - Trace( "ERROR:%lu:SetConsoleCtrlHandler() failed to add " - "CtrlHandler\n", - GetLastError() ); - Fail( "Test failed\n" ); - } - - - /* test that the right control handler functions are set */ - if( ! GenerateConsoleCtrlEvent( CTRL_BREAK_EVENT, 0 ) ) - { - Trace( "ERROR:%lu:GenerateConsoleCtrlEvent() failed\n", - GetLastError() ); - ret = FAIL; - goto done; - } - - /* give the handlers a chance to execute */ - Sleep( 2000 ); - - /* check the results */ - if( ! g_bFlag ) - { - Trace( "ERROR:CtrlHandler() was not called but should have been\n" ); - ret = FAIL; - } - - - -done: - /* unset the control handle that was set */ - if( ! SetConsoleCtrlHandler( CtrlHandler, FALSE ) ) - { - ret = FAIL; - Trace( "ERROR:%lu:SetConsoleCtrlHandler() failed to " - "remove CtrlHandler\n", - GetLastError() ); - Fail( "Test failed\n" ); - } - - - /* PAL termination */ - PAL_TerminateEx(ret); - - - /* return our result */ - return ret; -} - diff --git a/src/pal/tests/palsuite/threading/SetConsoleCtrlHandler/test10/testinfo.dat b/src/pal/tests/palsuite/threading/SetConsoleCtrlHandler/test10/testinfo.dat deleted file mode 100644 index e1eafb6e38..0000000000 --- a/src/pal/tests/palsuite/threading/SetConsoleCtrlHandler/test10/testinfo.dat +++ /dev/null @@ -1,14 +0,0 @@ -# -# Copyright (c) Microsoft Corporation. All rights reserved. -# - -Version = 1.0 -Section = threading -Function = SetConsoleCtrlHandler -Name = Positive test for SetConsoleCtrlHandler -TYPE = DEFAULT -EXE1 = test10 -Description -= Test to ensure proper operation of the SetConsoleCtrlHandler() -= API by checking whether a console control handler function can -= be set and called for a CTRL_BREAK_EVENT. diff --git a/src/pal/tests/palsuite/threading/SetConsoleCtrlHandler/test4/CMakeLists.txt b/src/pal/tests/palsuite/threading/SetConsoleCtrlHandler/test4/CMakeLists.txt deleted file mode 100644 index 9c02d5ba0f..0000000000 --- a/src/pal/tests/palsuite/threading/SetConsoleCtrlHandler/test4/CMakeLists.txt +++ /dev/null @@ -1,19 +0,0 @@ -cmake_minimum_required(VERSION 2.8.12.2) - -set(CMAKE_INCLUDE_CURRENT_DIR ON) - -set(SOURCES - test4.c -) - -add_executable(paltest_setconsolectrlhandler_test4 - ${SOURCES} -) - -add_dependencies(paltest_setconsolectrlhandler_test4 coreclrpal) - -target_link_libraries(paltest_setconsolectrlhandler_test4 - pthread - m - coreclrpal -) diff --git a/src/pal/tests/palsuite/threading/SetConsoleCtrlHandler/test4/test4.c b/src/pal/tests/palsuite/threading/SetConsoleCtrlHandler/test4/test4.c deleted file mode 100644 index 6368bbc659..0000000000 --- a/src/pal/tests/palsuite/threading/SetConsoleCtrlHandler/test4/test4.c +++ /dev/null @@ -1,89 +0,0 @@ -// -// Copyright (c) Microsoft. All rights reserved. -// Licensed under the MIT license. See LICENSE file in the project root for full license information. -// - -/*===================================================================== -** -** Source: test1.c -** -** Purpose: This is a MANUAL test. This is also a NEGATIVE test. We want -** this function to return 1 (FAIL). This test checks that we can set a -** handler for CTRL_C and then remove that handler. -** -** -**===================================================================*/ - -/* Note: If an error occurs in this test, we have to return 0. - The only time this test passes, is when CTRL-C is signaled, and the - program exits with a code of 1. -*/ - -#include <palsuite.h> - -int Flag = 1; - -BOOL CtrlHandler(DWORD CtrlType) -{ - if(CtrlType == CTRL_C_EVENT) - { - Flag = 0; - return 1; - } - - Trace("ERROR: The CtrlHandler was called, but the event was not a " - "CTRL_C_EVENT. This is considered failure."); - - return 0; -} - -int __cdecl main(int argc, char **argv) -{ - int counter = 0; - - if (0 != PAL_Initialize(argc,argv)) - { - return FAIL; - } - - /* Call the function to set the CtrlHandler */ - if( SetConsoleCtrlHandler((PHANDLER_ROUTINE) CtrlHandler, TRUE) == 0 ) - { - Trace("ERROR: SetConsoleCtrlHandler returned zero, indicating failure." - " GetLastError() returned %d.\n",GetLastError()); - return 0; - } - - /* Call the function to remove the CtrlHandler */ - - if( SetConsoleCtrlHandler((PHANDLER_ROUTINE) CtrlHandler, FALSE) == 0) - { - Trace("ERROR: SetConsoleCtrlHandler returned zero, indicating failure " - "when attempting to remove a handler. " - "GetLastError() returned %d.\n",GetLastError()); - return 0; - } - - /* Prompt for the tester to press CTRL-C. They have a limited amount - of time to type this. (Incase the CTRL-C handler isn't working - properly) - */ - printf("Please press CTRL-C now. This is timed. If CTRL-C is not " - "pressed by the time I count to 1000000000 then the test " - "will automatically fail.\n"); - - while(Flag) - { - counter++; - if(counter == 1000000000) - { - Trace("ERROR: The time ran out. CTRL-C was never pressed."); - return 0; - } - } - - Trace("MANUAL: The test has failed. Now calling PAL_Terminate().\n"); - PAL_Terminate(); - return 0; -} - diff --git a/src/pal/tests/palsuite/threading/SetConsoleCtrlHandler/test4/testinfo.dat b/src/pal/tests/palsuite/threading/SetConsoleCtrlHandler/test4/testinfo.dat deleted file mode 100644 index 7169ee3556..0000000000 --- a/src/pal/tests/palsuite/threading/SetConsoleCtrlHandler/test4/testinfo.dat +++ /dev/null @@ -1,14 +0,0 @@ -# -# Copyright (c) Microsoft Corporation. All rights reserved. -# - -Version = 1.0 -Section = threading -Function = SetConsoleCtrlHandler -Name = Manual/Negative Test to see that CTRL-C behaviour can be set/unset. -TYPE = DEFAULT -EXE1 = test4 -Description -= This is a MANUAL test. This is also a NEGATIVE test. We want -= this function to return 1 (FAIL). This test checks that we can set a -= handler for CTRL_C and then remove that handler. diff --git a/src/pal/tests/palsuite/threading/SetConsoleCtrlHandler/test5/CMakeLists.txt b/src/pal/tests/palsuite/threading/SetConsoleCtrlHandler/test5/CMakeLists.txt deleted file mode 100644 index 1a5ebd71b6..0000000000 --- a/src/pal/tests/palsuite/threading/SetConsoleCtrlHandler/test5/CMakeLists.txt +++ /dev/null @@ -1,19 +0,0 @@ -cmake_minimum_required(VERSION 2.8.12.2) - -set(CMAKE_INCLUDE_CURRENT_DIR ON) - -set(SOURCES - test5.c -) - -add_executable(paltest_setconsolectrlhandler_test5 - ${SOURCES} -) - -add_dependencies(paltest_setconsolectrlhandler_test5 coreclrpal) - -target_link_libraries(paltest_setconsolectrlhandler_test5 - pthread - m - coreclrpal -) diff --git a/src/pal/tests/palsuite/threading/SetConsoleCtrlHandler/test5/test5.c b/src/pal/tests/palsuite/threading/SetConsoleCtrlHandler/test5/test5.c deleted file mode 100644 index 4355cdb29d..0000000000 --- a/src/pal/tests/palsuite/threading/SetConsoleCtrlHandler/test5/test5.c +++ /dev/null @@ -1,264 +0,0 @@ -// -// Copyright (c) Microsoft. All rights reserved. -// Licensed under the MIT license. See LICENSE file in the project root for full license information. -// - -/*============================================================================= -** -** Source: test5.c -** -** Dependencies: PAL_Initialize -** PAL_Terminate -** GenerateConsoleCtrlEvent -** -** Purpose: -** -** Test to ensure proper operation of the SetConsoleCtrlHandler() -** API by using it to chain multiple handler functions together. -** - -** -**===========================================================================*/ -#include <palsuite.h> - - -/* helper test structure */ -struct handlerData -{ - PHANDLER_ROUTINE func; /* handler routine */ - BOOL set; /* whether this handler was set */ - BOOL stop; /* whether handling should stop with this */ - BOOL result; /* flag tracking whether handler was called */ -}; - - -/* we'll work with three handler functions */ -#define NUM_HANDLERS 3 - -/* handler function prototypes */ -static BOOL PALAPI CtrlHandler1( DWORD CtrlType ); -static BOOL PALAPI CtrlHandler2( DWORD CtrlType ); -static BOOL PALAPI CtrlHandler3( DWORD CtrlType ); - - -/* array of control handler data */ -static struct handlerData g_handlers[] = -{ - { CtrlHandler1, FALSE, TRUE, FALSE }, - { CtrlHandler2, FALSE, FALSE, FALSE }, - { CtrlHandler3, FALSE, FALSE, FALSE } -}; - - -/* global flag to track whether the handlers are called in the wrong order */ -static BOOL g_bWrongOrder = FALSE; - - -/* first handler function */ -static BOOL PALAPI CtrlHandler1( DWORD CtrlType ) -{ - if( CtrlType == CTRL_C_EVENT ) - { - /* set our handler flag to true */ - g_handlers[0].result = TRUE; - - /* check for right handler order */ - if( (!g_handlers[1].result) || (!g_handlers[2].result) ) - { - g_bWrongOrder = TRUE; - } - return g_handlers[0].stop; - } - - return FALSE; -} - - -/* second handler function */ -static BOOL PALAPI CtrlHandler2( DWORD CtrlType ) -{ - if( CtrlType == CTRL_C_EVENT ) - { - /* set our handler flag to true */ - g_handlers[1].result = TRUE; - - /* check for right handler order */ - if( g_handlers[0].result || (!g_handlers[2].result) ) - { - g_bWrongOrder = TRUE; - } - return g_handlers[1].stop; - } - - return FALSE; -} - - -/* third handler function */ -static BOOL PALAPI CtrlHandler3( DWORD CtrlType ) -{ - if( CtrlType == CTRL_C_EVENT ) - { - /* set our handler flag to true */ - g_handlers[2].result = TRUE; - - /* check for right handler order */ - if( g_handlers[0].result || g_handlers[1].result ) - { - g_bWrongOrder = TRUE; - } - return g_handlers[2].stop; - } - - return FALSE; -} - - - - - - -/* main entry point function */ -int __cdecl main( int argc, char **argv ) - -{ - /* local variables */ - int i; - int finalHandler; - BOOL ret = PASS; - - - /* PAL initialization */ - if( (PAL_Initialize(argc, argv)) != 0 ) - { - return( FAIL ); - } - - - /* chain together three simple control handlers */ - for( i=0; i<NUM_HANDLERS; i++ ) - { - if( SetConsoleCtrlHandler( g_handlers[i].func, TRUE ) ) - { - g_handlers[i].set = TRUE; - } - else - { - ret = FAIL; - Trace( "ERROR:%lu:SetConsoleCtrlHandler() failed to add " - "handler #%d\n", - GetLastError(), - (i+1) ); - goto done; - } - } - - - /* first test -- verify that all three handlers are called, in the */ - /* correct sequence (CtrlHandler3, CtrlHandler2, CtrlHandler1) */ - if( ! GenerateConsoleCtrlEvent( CTRL_C_EVENT, 0 ) ) - { - Trace( "ERROR:%lu:GenerateConsoleCtrlEvent() failed\n", - GetLastError() ); - ret = FAIL; - goto done; - } - - /* give the handlers a chance to execute */ - Sleep( 2000 ); - - - /* check the results and reset all the handler-called flags */ - for( i=0; i<NUM_HANDLERS; i++ ) - { - if( ! g_handlers[i].result ) - { - Trace( "FAIL:Handler #%d was not called\n", (i+1) ); - ret = FAIL; - } - else - { - g_handlers[i].result = FALSE; - } - } - - if( g_bWrongOrder ) - { - Trace( "FAIL:Handlers were called in the wrong order\n" ); - ret = FAIL; - } - - /* we're done if we got an error result */ - if( ! ret ) - { - goto done; - } - - - /* same test, only this time we want to stop at the second handler */ - finalHandler = 1; - g_handlers[ finalHandler ].stop = TRUE; - if( ! GenerateConsoleCtrlEvent( CTRL_C_EVENT, 0 ) ) - { - Trace( "ERROR:%lu:GenerateConsoleCtrlEvent() failed\n", - GetLastError() ); - ret = FAIL; - goto done; - } - - /* give the handlers a chance to execute */ - Sleep( 2000 ); - - - /* check the results */ - for( i=0; i<NUM_HANDLERS; i++ ) - { - if( i < finalHandler ) - { - /* should not have been called */ - if( g_handlers[i].result ) - { - Trace( "FAIL:Handler #%d was called but shouldn't " - "have been\n", - (i+1) ); - ret = FAIL; - } - } - else - { - /* should have been called */ - if( ! g_handlers[i].result ) - { - Trace( "FAIL:Handler #%d was not called\n", (i+1) ); - ret = FAIL; - } - } - } - - - -done: - /* unset any handlers that were set */ - for( i=0; i<NUM_HANDLERS; i++ ) - { - if( g_handlers[i].set ) - { - if( ! SetConsoleCtrlHandler( g_handlers[i].func, FALSE ) ) - { - ret = FAIL; - Trace( "ERROR:%lu:SetConsoleCtrlHandler() failed to add " - "handler #%d\n", - GetLastError(), - (i+1) ); - } - } - } - - - /* PAL termination */ - PAL_TerminateEx(ret); - - - /* return our result */ - return ret; -} diff --git a/src/pal/tests/palsuite/threading/SetConsoleCtrlHandler/test5/testinfo.dat b/src/pal/tests/palsuite/threading/SetConsoleCtrlHandler/test5/testinfo.dat deleted file mode 100644 index 1737394b55..0000000000 --- a/src/pal/tests/palsuite/threading/SetConsoleCtrlHandler/test5/testinfo.dat +++ /dev/null @@ -1,13 +0,0 @@ -# -# Copyright (c) Microsoft Corporation. All rights reserved. -# - -Version = 1.0 -Section = threading -Function = SetConsoleCtrlHandler -Name = Positive test for SetConsoleCtrlHandler -TYPE = DEFAULT -EXE1 = test5 -Description -= Test to ensure proper operation of the SetConsoleCtrlHandler() -= API by using it to chain multiple handler functions together. diff --git a/src/pal/tests/palsuite/threading/SetConsoleCtrlHandler/test6/CMakeLists.txt b/src/pal/tests/palsuite/threading/SetConsoleCtrlHandler/test6/CMakeLists.txt deleted file mode 100644 index 4e0c6ef3ab..0000000000 --- a/src/pal/tests/palsuite/threading/SetConsoleCtrlHandler/test6/CMakeLists.txt +++ /dev/null @@ -1,19 +0,0 @@ -cmake_minimum_required(VERSION 2.8.12.2) - -set(CMAKE_INCLUDE_CURRENT_DIR ON) - -set(SOURCES - test6.c -) - -add_executable(paltest_setconsolectrlhandler_test6 - ${SOURCES} -) - -add_dependencies(paltest_setconsolectrlhandler_test6 coreclrpal) - -target_link_libraries(paltest_setconsolectrlhandler_test6 - pthread - m - coreclrpal -) diff --git a/src/pal/tests/palsuite/threading/SetConsoleCtrlHandler/test6/test6.c b/src/pal/tests/palsuite/threading/SetConsoleCtrlHandler/test6/test6.c deleted file mode 100644 index ca232da772..0000000000 --- a/src/pal/tests/palsuite/threading/SetConsoleCtrlHandler/test6/test6.c +++ /dev/null @@ -1,172 +0,0 @@ -// -// Copyright (c) Microsoft. All rights reserved. -// Licensed under the MIT license. See LICENSE file in the project root for full license information. -// - -/*============================================================================= -** -** Source: test6.c -** -** Dependencies: PAL_Initialize -** PAL_Terminate -** GenerateConsoleCtrlEvent -** -** Purpose: -** -** Test to ensure proper operation of the SetConsoleCtrlHandler() -** API by trying to remove a non-existent handler. -** - -** -**===========================================================================*/ -#include <palsuite.h> - - -static BOOL g_bFlag1 = FALSE; -static BOOL g_bFlag2 = FALSE; - - -/* first handler function */ -static BOOL PALAPI CtrlHandler1( DWORD CtrlType ) -{ - if( CtrlType == CTRL_C_EVENT ) - { - g_bFlag1 = TRUE; - return TRUE; - } - - return FALSE; -} - - -/* second handler function */ -static BOOL PALAPI CtrlHandler2( DWORD CtrlType ) -{ - if( CtrlType == CTRL_C_EVENT ) - { - g_bFlag2 = TRUE; - return TRUE; - } - - return FALSE; -} - - - - - -/* main entry point function */ -int __cdecl main( int argc, char **argv ) - -{ - /* local variables */ - BOOL ret = PASS; - - - /* PAL initialization */ - if( (PAL_Initialize(argc, argv)) != 0 ) - { - return( FAIL ); - } - - - /* set the console control handler function */ - if( ! SetConsoleCtrlHandler( CtrlHandler1, TRUE ) ) - { - ret = FAIL; - Trace( "ERROR:%lu:SetConsoleCtrlHandler() failed to add " - "CtrlHandler1\n", - GetLastError() ); - Fail( "Test failed\n" ); - } - - /* test that the right control handler functions are set */ - if( ! GenerateConsoleCtrlEvent( CTRL_C_EVENT, 0 ) ) - { - Trace( "ERROR:%lu:GenerateConsoleCtrlEvent() failed\n", - GetLastError() ); - ret = FAIL; - goto done; - } - - /* give the handlers a chance to execute */ - Sleep( 2000 ); - - /* check the results */ - if( g_bFlag2 ) - { - Trace( "ERROR:CtrlHandler2() was inexplicably called\n" ); - ret = FAIL; - goto done; - } - - if( ! g_bFlag1 ) - { - Trace( "ERROR:CtrlHandler1() was not called but should have been\n" ); - ret = FAIL; - goto done; - } - - /* reset our flags */ - g_bFlag1 = FALSE; - - - /* try to unset CtrlHandler2, which isn't set in the first place */ - if( SetConsoleCtrlHandler( CtrlHandler2, FALSE ) ) - { - ret = FAIL; - Trace( "ERROR:SetConsoleCtrlHandler() succeeded trying to " - "remove CtrlHandler2, which isn't set\n" ); - goto done; - } - - - /* make sure that the existing control handler functions are still set */ - if( ! GenerateConsoleCtrlEvent( CTRL_C_EVENT, 0 ) ) - { - Trace( "ERROR:%lu:GenerateConsoleCtrlEvent() failed\n", - GetLastError() ); - ret = FAIL; - goto done; - } - - /* give the handlers a chance to execute */ - Sleep( 2000 ); - - /* check the results */ - if( g_bFlag2 ) - { - Trace( "ERROR:CtrlHandler2() was inexplicably called\n" ); - ret = FAIL; - goto done; - } - - if( ! g_bFlag1 ) - { - Trace( "ERROR:CtrlHandler1() was not called but should have been\n" ); - ret = FAIL; - goto done; - } - - - -done: - /* unset any handlers that were set */ - if( ! SetConsoleCtrlHandler( CtrlHandler1, FALSE ) ) - { - ret = FAIL; - Trace( "ERROR:%lu:SetConsoleCtrlHandler() failed to " - "remove CtrlHandler1\n", - GetLastError() ); - Fail( "Test failed\n" ); - } - - - /* PAL termination */ - PAL_TerminateEx(ret); - - - /* return our result */ - return ret; -} - diff --git a/src/pal/tests/palsuite/threading/SetConsoleCtrlHandler/test6/testinfo.dat b/src/pal/tests/palsuite/threading/SetConsoleCtrlHandler/test6/testinfo.dat deleted file mode 100644 index 2a320a7a16..0000000000 --- a/src/pal/tests/palsuite/threading/SetConsoleCtrlHandler/test6/testinfo.dat +++ /dev/null @@ -1,13 +0,0 @@ -# -# Copyright (c) Microsoft Corporation. All rights reserved. -# - -Version = 1.0 -Section = threading -Function = SetConsoleCtrlHandler -Name = Negative test for SetConsoleCtrlHandler -TYPE = DEFAULT -EXE1 = test6 -Description -= Test to ensure proper operation of the SetConsoleCtrlHandler() -= API by trying to remove a non-existent handler. diff --git a/src/pal/tests/palsuite/threading/SetConsoleCtrlHandler/test7/CMakeLists.txt b/src/pal/tests/palsuite/threading/SetConsoleCtrlHandler/test7/CMakeLists.txt deleted file mode 100644 index 581785c136..0000000000 --- a/src/pal/tests/palsuite/threading/SetConsoleCtrlHandler/test7/CMakeLists.txt +++ /dev/null @@ -1,19 +0,0 @@ -cmake_minimum_required(VERSION 2.8.12.2) - -set(CMAKE_INCLUDE_CURRENT_DIR ON) - -set(SOURCES - test7.c -) - -add_executable(paltest_setconsolectrlhandler_test7 - ${SOURCES} -) - -add_dependencies(paltest_setconsolectrlhandler_test7 coreclrpal) - -target_link_libraries(paltest_setconsolectrlhandler_test7 - pthread - m - coreclrpal -) diff --git a/src/pal/tests/palsuite/threading/SetConsoleCtrlHandler/test7/test7.c b/src/pal/tests/palsuite/threading/SetConsoleCtrlHandler/test7/test7.c deleted file mode 100644 index eabfb19532..0000000000 --- a/src/pal/tests/palsuite/threading/SetConsoleCtrlHandler/test7/test7.c +++ /dev/null @@ -1,194 +0,0 @@ -// -// Copyright (c) Microsoft. All rights reserved. -// Licensed under the MIT license. See LICENSE file in the project root for full license information. -// - -/*============================================================================= -** -** Source: test7.c -** -** Dependencies: PAL_Initialize -** PAL_Terminate -** GenerateConsoleCtrlEvent -** -** Purpose: -** -** Test to ensure proper operation of the SetConsoleCtrlHandler() -** API by checking whether a console control handler function is -** actually removed by the API when it returns success for that -** operation. -** - -** -**===========================================================================*/ -#include <palsuite.h> - - -static BOOL g_bFlag1 = FALSE; -static BOOL g_bFlag2 = FALSE; - - -/* first handler function */ -static BOOL PALAPI CtrlHandler1( DWORD CtrlType ) -{ - if( CtrlType == CTRL_C_EVENT ) - { - g_bFlag1 = TRUE; - return TRUE; - } - - return FALSE; -} - - -/* second handler function */ -static BOOL PALAPI CtrlHandler2( DWORD CtrlType ) -{ - if( CtrlType == CTRL_C_EVENT ) - { - g_bFlag2 = TRUE; - return FALSE; - } - - return FALSE; -} - - - - - -/* main entry point function */ -int __cdecl main( int argc, char **argv ) - -{ - /* local variables */ - BOOL ret = PASS; - BOOL bSetHandler1 = FALSE; - - - /* PAL initialization */ - if( (PAL_Initialize(argc, argv)) != 0 ) - { - return( FAIL ); - } - - - /* set the console control handler functions */ - if( SetConsoleCtrlHandler( CtrlHandler1, TRUE ) ) - { - bSetHandler1 = TRUE; - } - else - { - ret = FAIL; - Trace( "ERROR:%lu:SetConsoleCtrlHandler() failed to add " - "CtrlHandler1\n", - GetLastError() ); - Fail( "Test failed\n" ); - } - - if( ! SetConsoleCtrlHandler( CtrlHandler2, TRUE ) ) - { - ret = FAIL; - Trace( "ERROR:%lu:SetConsoleCtrlHandler() failed to add " - "CtrlHandler2\n", - GetLastError() ); - Fail( "Test failed\n" ); - } - - - /* test that the right control handler functions are set */ - if( ! GenerateConsoleCtrlEvent( CTRL_C_EVENT, 0 ) ) - { - Trace( "ERROR:%lu:GenerateConsoleCtrlEvent() failed\n", - GetLastError() ); - ret = FAIL; - goto done; - } - - /* give the handlers a chance to execute */ - Sleep( 2000 ); - - /* check the results */ - if( ! g_bFlag1 ) - { - Trace( "ERROR:CtrlHandler1() was not called but should have been\n" ); - ret = FAIL; - goto done; - } - if( ! g_bFlag2 ) - { - Trace( "ERROR:CtrlHandler2() was not called but should have been\n" ); - ret = FAIL; - goto done; - } - - - /* reset our flags */ - g_bFlag1 = FALSE; - g_bFlag2 = FALSE; - - - /* try to unset CtrlHandler2 */ - if( ! SetConsoleCtrlHandler( CtrlHandler2, FALSE ) ) - { - ret = FAIL; - Trace( "ERROR:%lu:SetConsoleCtrlHandler() failed to " - "remove CtrlHandler2\n", - GetLastError() ); - goto done; - } - - - /* make sure that CtrlHandler1 is set and CtrlHandler2 isn't */ - if( ! GenerateConsoleCtrlEvent( CTRL_C_EVENT, 0 ) ) - { - Trace( "ERROR:%lu:GenerateConsoleCtrlEvent() failed\n", - GetLastError() ); - ret = FAIL; - goto done; - } - - /* give the handlers a chance to execute */ - Sleep( 2000 ); - - /* check the results */ - if( g_bFlag2 ) - { - Trace( "ERROR:CtrlHandler2() was called after it was unset\n" ); - ret = FAIL; - goto done; - } - - if( ! g_bFlag1 ) - { - Trace( "ERROR:CtrlHandler1() was not called but should have been\n" ); - ret = FAIL; - goto done; - } - - - -done: - /* unset CtrlHandler1 if it was set */ - if( bSetHandler1 ) - { - if( ! SetConsoleCtrlHandler( CtrlHandler1, FALSE ) ) - { - ret = FAIL; - Trace( "ERROR:%lu:SetConsoleCtrlHandler() failed to " - "remove CtrlHandler1\n", - GetLastError() ); - Fail( "Test failed\n" ); - } - } - - - /* PAL termination */ - PAL_TerminateEx(ret); - - - /* return our result */ - return ret; -} - diff --git a/src/pal/tests/palsuite/threading/SetConsoleCtrlHandler/test7/testinfo.dat b/src/pal/tests/palsuite/threading/SetConsoleCtrlHandler/test7/testinfo.dat deleted file mode 100644 index 67bdb1c389..0000000000 --- a/src/pal/tests/palsuite/threading/SetConsoleCtrlHandler/test7/testinfo.dat +++ /dev/null @@ -1,15 +0,0 @@ -# -# Copyright (c) Microsoft Corporation. All rights reserved. -# - -Version = 1.0 -Section = threading -Function = SetConsoleCtrlHandler -Name = Positive test for SetConsoleCtrlHandler -TYPE = DEFAULT -EXE1 = test7 -Description -= Test to ensure proper operation of the SetConsoleCtrlHandler() -= API by checking whether a console control handler function is -= actually removed by the API when it returns success for that -= operation. diff --git a/src/pal/tests/palsuite/threading/SetConsoleCtrlHandler/test8/CMakeLists.txt b/src/pal/tests/palsuite/threading/SetConsoleCtrlHandler/test8/CMakeLists.txt deleted file mode 100644 index e7c093a75f..0000000000 --- a/src/pal/tests/palsuite/threading/SetConsoleCtrlHandler/test8/CMakeLists.txt +++ /dev/null @@ -1,19 +0,0 @@ -cmake_minimum_required(VERSION 2.8.12.2) - -set(CMAKE_INCLUDE_CURRENT_DIR ON) - -set(SOURCES - test8.c -) - -add_executable(paltest_setconsolectrlhandler_test8 - ${SOURCES} -) - -add_dependencies(paltest_setconsolectrlhandler_test8 coreclrpal) - -target_link_libraries(paltest_setconsolectrlhandler_test8 - pthread - m - coreclrpal -) diff --git a/src/pal/tests/palsuite/threading/SetConsoleCtrlHandler/test8/test8.c b/src/pal/tests/palsuite/threading/SetConsoleCtrlHandler/test8/test8.c deleted file mode 100644 index 1c3ee2b71d..0000000000 --- a/src/pal/tests/palsuite/threading/SetConsoleCtrlHandler/test8/test8.c +++ /dev/null @@ -1,192 +0,0 @@ -// -// Copyright (c) Microsoft. All rights reserved. -// Licensed under the MIT license. See LICENSE file in the project root for full license information. -// - -/*============================================================================= -** -** Source: test8.c -** -** Dependencies: PAL_Initialize -** PAL_Terminate -** GenerateConsoleCtrlEvent -** -** Purpose: -** -** Test to ensure proper operation of the SetConsoleCtrlHandler() -** API by attempting to add and remove the same handler multiple -** times. -** - -** -**===========================================================================*/ -#include <palsuite.h> - - - -/* the number of times to set the console control handler function */ -#define HANDLER_SET_COUNT 5 - - - -/* the number of times the console control handler function's been called */ -static int g_count = 0; - - - - -/* to avoid having the default control handler abort our process */ -static BOOL PALAPI FinalCtrlHandler( DWORD CtrlType ) -{ - return (CtrlType == CTRL_C_EVENT); -} - - -/* test handler function */ -static BOOL PALAPI CtrlHandler1( DWORD CtrlType ) -{ - if( CtrlType == CTRL_C_EVENT ) - { - ++g_count; - } - - return FALSE; -} - - - - - -/* main entry point function */ -int __cdecl main( int argc, char **argv ) - -{ - /* local variables */ - int i; - BOOL ret = PASS; - BOOL bSetFinalHandler = FALSE; - int nSetCount = 0; - - - /* PAL initialization */ - if( (PAL_Initialize(argc, argv)) != 0 ) - { - return( FAIL ); - } - - - /* set our final console control handler function */ - if( SetConsoleCtrlHandler( FinalCtrlHandler, TRUE ) ) - { - bSetFinalHandler = TRUE; - } - else - { - ret = FAIL; - Trace( "ERROR:%lu:SetConsoleCtrlHandler() failed to add " - "FinalCtrlHandler\n", - GetLastError() ); - Fail( "Test failed\n" ); - } - - /* try to set our test handler multiple times */ - for( i=0; i<HANDLER_SET_COUNT; i++ ) - { - if( SetConsoleCtrlHandler( CtrlHandler1, TRUE ) ) - { - nSetCount++; - } - else - { - ret = FAIL; - Trace( "ERROR:%lu:SetConsoleCtrlHandler() failed to add " - "CtrlHandler1 at attempt #%d\n", - GetLastError(), - i ); - goto done; - } - } - - /* loop here -- generate an event and verify that our handler */ - /* was called the correct number of times, then unset it one */ - /* time and repeat until it's completely unset. */ - for( ; nSetCount>0; nSetCount-- ) - { - /* test that the control handler functions are set */ - if( ! GenerateConsoleCtrlEvent( CTRL_C_EVENT, 0 ) ) - { - Trace( "ERROR:%lu:GenerateConsoleCtrlEvent() failed\n", - GetLastError() ); - ret = FAIL; - goto done; - } - - /* give the handlers a chance to execute */ - Sleep( 2000 ); - - /* check the results */ - if( g_count != nSetCount ) - { - Trace( "ERROR:CtrlHandler1() was not called %d times, " - "expected %d\n", - g_count, - nSetCount ); - ret = FAIL; - goto done; - } - - /* unset the control handler one time */ - if( ! SetConsoleCtrlHandler( CtrlHandler1, FALSE ) ) - { - ret = FAIL; - Trace( "ERROR:%lu:SetConsoleCtrlHandler() failed to " - "remove CtrlHandler instance #%d\n", - GetLastError(), - nSetCount ); - Fail( "Test failed\n" ); - } - - /* reset our counter */ - g_count = 0; - } - - - -done: - /* unset any lingering instances of our test control handler */ - for( ; nSetCount>0; nSetCount-- ) - { - /* unset the control handler one time */ - if( ! SetConsoleCtrlHandler( CtrlHandler1, FALSE ) ) - { - ret = FAIL; - Trace( "ERROR:%lu:SetConsoleCtrlHandler() failed to " - "remove CtrlHandler instance #%d\n", - GetLastError(), - nSetCount ); - Fail( "Test failed\n" ); - } - } - - - /* unset our final control handler if it was set */ - if( bSetFinalHandler ) - { - if( ! SetConsoleCtrlHandler( FinalCtrlHandler, FALSE ) ) - { - ret = FAIL; - Trace( "ERROR:%lu:SetConsoleCtrlHandler() failed to " - "remove FinalCtrlHandler\n", - GetLastError() ); - Fail( "Test failed\n" ); - } - } - - - /* PAL termination */ - PAL_TerminateEx(ret); - - - /* return our result */ - return ret; -} diff --git a/src/pal/tests/palsuite/threading/SetConsoleCtrlHandler/test8/testinfo.dat b/src/pal/tests/palsuite/threading/SetConsoleCtrlHandler/test8/testinfo.dat deleted file mode 100644 index 7aaf38e2e9..0000000000 --- a/src/pal/tests/palsuite/threading/SetConsoleCtrlHandler/test8/testinfo.dat +++ /dev/null @@ -1,14 +0,0 @@ -# -# Copyright (c) Microsoft Corporation. All rights reserved. -# - -Version = 1.0 -Section = threading -Function = SetConsoleCtrlHandler -Name = Positive test for SetConsoleCtrlHandler -TYPE = DEFAULT -EXE1 = test8 -Description -= Test to ensure proper operation of the SetConsoleCtrlHandler() -= API by attempting to add and remove the same handler multiple -= times. diff --git a/src/pal/tests/palsuite/threading/WaitForMultipleObjects/CMakeLists.txt b/src/pal/tests/palsuite/threading/WaitForMultipleObjects/CMakeLists.txt index ef14ea5352..f6aa0cb2d9 100644 --- a/src/pal/tests/palsuite/threading/WaitForMultipleObjects/CMakeLists.txt +++ b/src/pal/tests/palsuite/threading/WaitForMultipleObjects/CMakeLists.txt @@ -1,5 +1,4 @@ cmake_minimum_required(VERSION 2.8.12.2) add_subdirectory(test1) -add_subdirectory(test2) diff --git a/src/pal/tests/palsuite/threading/WaitForMultipleObjects/test2/CMakeLists.txt b/src/pal/tests/palsuite/threading/WaitForMultipleObjects/test2/CMakeLists.txt deleted file mode 100644 index e348bc519d..0000000000 --- a/src/pal/tests/palsuite/threading/WaitForMultipleObjects/test2/CMakeLists.txt +++ /dev/null @@ -1,19 +0,0 @@ -cmake_minimum_required(VERSION 2.8.12.2) - -set(CMAKE_INCLUDE_CURRENT_DIR ON) - -set(SOURCES - test2.c -) - -add_executable(paltest_waitformultipleobjects_test2 - ${SOURCES} -) - -add_dependencies(paltest_waitformultipleobjects_test2 coreclrpal) - -target_link_libraries(paltest_waitformultipleobjects_test2 - pthread - m - coreclrpal -) diff --git a/src/pal/tests/palsuite/threading/WaitForMultipleObjects/test2/test2.c b/src/pal/tests/palsuite/threading/WaitForMultipleObjects/test2/test2.c deleted file mode 100644 index 057df66a70..0000000000 --- a/src/pal/tests/palsuite/threading/WaitForMultipleObjects/test2/test2.c +++ /dev/null @@ -1,140 +0,0 @@ -// -// Copyright (c) Microsoft. All rights reserved. -// Licensed under the MIT license. See LICENSE file in the project root for full license information. -// - -/*============================================================================ -** -** Source: test1.c -** -** Purpose: Test to ensure that WaitForMultipleObjects() performs -** as expected when called with an INFINITE timeout. -** -** -**==========================================================================*/ -#include <palsuite.h> - -/* global data */ -static BOOL bEventSet = FALSE; -static HANDLE hEvent = NULL; - - -/* handler function */ -static BOOL PALAPI CtrlHandler( DWORD CtrlType ) -{ - if( CtrlType == CTRL_C_EVENT ) - { - if( hEvent != NULL ) - { - bEventSet = TRUE; - if( ! SetEvent( hEvent ) ) - { - Fail( "ERROR:%lu:SetEvent call failed", GetLastError() ); - } - } - return TRUE; - } - - return FALSE; -} - - -/* main entry point function */ -int __cdecl main( int argc, char **argv ) - -{ - /* local variables */ - BOOL ret = FAIL; - DWORD dwRet; - - - /* PAL initialization */ - if( (PAL_Initialize(argc, argv)) != 0 ) - { - return( FAIL ); - } - - - /* set the console control handler function */ - if( ! SetConsoleCtrlHandler( CtrlHandler, TRUE ) ) - { - ret = FAIL; - Trace( "ERROR:%lu:SetConsoleCtrlHandler() failed to add " - "CtrlHandler\n", - GetLastError() ); - goto done; - } - - - /* create a manual-reset event on which to wait */ - hEvent = CreateEvent( NULL, TRUE, FALSE, NULL ); - if( hEvent == NULL ) - { - Trace( "ERROR:%lu:CreateEvent() call failed\n", GetLastError() ); - goto done; - } - - /* helpful instructions */ - Trace( "This program is designed to test WaitForMultipleObjects using\n" - "a timeout value of INFINITE, and consequently it's expected\n" - "to run forever, waiting and waiting. Press CTRL-C when you feel\n" - "you've sufficiently approximated infinity to end the test.\n" ); - - /* wait on the event forever, until the user stops the program */ - dwRet = WaitForMultipleObjects( 1, &hEvent, TRUE, INFINITE ); - if( dwRet != WAIT_OBJECT_0 ) - { - Trace( "ERROR:WaitForMultipleObjects returned %lu, " - "expected WAIT_OBJECT_0\n", - dwRet ); - goto done; - } - - /* verify that the bEventSet flag has been set */ - if( ! bEventSet ) - { - Trace( "ERROR:WaitForMultipleObjects returned WAIT_OBJECT_0 " - "but the event was never set\n" ); - goto done; - } - - /* success if we get here */ - ret = PASS; - - -done: - /* close our event handle */ - if( hEvent != NULL ) - { - if( ! CloseHandle( hEvent ) ) - { - Trace( "ERROR:%lu:CloseHandle call failed\n", GetLastError() ); - ret = FAIL; - } - } - - /* unset the control handle that was set */ - if( ! SetConsoleCtrlHandler( CtrlHandler, FALSE ) ) - { - ret = FAIL; - Trace( "ERROR:%lu:SetConsoleCtrlHandler() failed to " - "remove CtrlHandler\n", - GetLastError() ); - } - - /* check for failure */ - if( ret == FAIL ) - { - Fail( "test failed\n" ); - } - - - /* PAL termination */ - PAL_Terminate(); - - - /* return success */ - return PASS; -} - - diff --git a/src/pal/tests/palsuite/threading/WaitForMultipleObjects/test2/testinfo.dat b/src/pal/tests/palsuite/threading/WaitForMultipleObjects/test2/testinfo.dat deleted file mode 100644 index ce80a8f5a1..0000000000 --- a/src/pal/tests/palsuite/threading/WaitForMultipleObjects/test2/testinfo.dat +++ /dev/null @@ -1,13 +0,0 @@ -# -# Copyright (c) Microsoft Corporation. All rights reserved. -# - -Version = 1.0 -Section = threading -Function = WaitForMultipleObjects -Name = Positive test for WaitForMultipleObjects -TYPE = DEFAULT -EXE1 = test2 -Description -= Test to ensure that WaitForMultipleObjects() performs -= as expected when called with an INFINITE timeout. diff --git a/src/vm/ceemain.cpp b/src/vm/ceemain.cpp index c1899f24fb..a4db91c588 100644 --- a/src/vm/ceemain.cpp +++ b/src/vm/ceemain.cpp @@ -498,6 +498,7 @@ HRESULT EnsureEEStarted(COINITIEE flags) #ifndef CROSSGEN_COMPILE +#ifndef FEATURE_PAL // This is our Ctrl-C, Ctrl-Break, etc. handler. static BOOL WINAPI DbgCtrlCHandler(DWORD dwCtrlType) { @@ -519,9 +520,10 @@ static BOOL WINAPI DbgCtrlCHandler(DWORD dwCtrlType) #endif // DEBUGGING_SUPPORTED { g_fInControlC = true; // only for weakening assertions in checked build. - return FALSE; // keep looking for a real handler. + return FALSE; // keep looking for a real handler. } } +#endif // A host can specify that it only wants one version of hosting interface to be used. BOOL g_singleVersionHosting; @@ -832,7 +834,9 @@ void EEStartupHelper(COINITIEE fFlags) DisableGlobalAllocStore(); #endif //_DEBUG +#ifndef FEATURE_PAL ::SetConsoleCtrlHandler(DbgCtrlCHandler, TRUE/*add*/); +#endif #endif // CROSSGEN_COMPILE |