From 15550bfef374759551631858196388427e20022d Mon Sep 17 00:00:00 2001 From: David Welch Date: Mon, 21 Jul 2003 21:44:28 +0000 Subject: [PATCH] - Checked in a test application which does various operations on a terminated thread. svn path=/trunk/; revision=5212 --- reactos/apps/tests/Makefile | 2 +- reactos/apps/tests/terminate/Makefile | 19 ++++++ reactos/apps/tests/terminate/terminate.c | 75 ++++++++++++++++++++++++ 3 files changed, 95 insertions(+), 1 deletion(-) create mode 100644 reactos/apps/tests/terminate/Makefile create mode 100644 reactos/apps/tests/terminate/terminate.c diff --git a/reactos/apps/tests/Makefile b/reactos/apps/tests/Makefile index 068451761a6..be02e420991 100644 --- a/reactos/apps/tests/Makefile +++ b/reactos/apps/tests/Makefile @@ -10,7 +10,7 @@ TEST_APPS = alive apc args atomtest bench bitblt button button2 \ combo consume copymove count dump_shared_data edit event file \ gditest hello isotest lineclip lpc messagebox mstest mutex nptest pteb \ regtest sectest shm thread tokentest vmtest winhello dibtest lock \ -hivetest shaptest wm_paint multiwin icontest suspend tests/volinfo +hivetest shaptest wm_paint multiwin icontest suspend tests/volinfo terminate TEST_MISC = diff --git a/reactos/apps/tests/terminate/Makefile b/reactos/apps/tests/terminate/Makefile new file mode 100644 index 00000000000..a237952fe12 --- /dev/null +++ b/reactos/apps/tests/terminate/Makefile @@ -0,0 +1,19 @@ +# $Id: Makefile,v 1.1 2003/07/21 21:44:28 dwelch Exp $ + +PATH_TO_TOP = ../../.. + +TARGET_NORC = yes + +TARGET_TYPE = program + +TARGET_APPTYPE = console + +TARGET_NAME = terminate + +TARGET_OBJECTS = $(TARGET_NAME).o + +include $(PATH_TO_TOP)/rules.mak + +include $(TOOLS_PATH)/helper.mk + +# EOF diff --git a/reactos/apps/tests/terminate/terminate.c b/reactos/apps/tests/terminate/terminate.c new file mode 100644 index 00000000000..5d0f224b3e4 --- /dev/null +++ b/reactos/apps/tests/terminate/terminate.c @@ -0,0 +1,75 @@ +#define UNICODE + +#define NTOS_MODE_USER +#include +#include + +#define DBG +#define NDEBUG +#include + +static volatile DWORD z; +static volatile DWORD x=0; + +static NTSTATUS STDCALL +thread_1(PVOID Param) +{ + DWORD y=0; + + for(;;) + { + z++; + if(x>50) + { + Sleep(100); + x=0;y++; + if(y==3) return(0); + } + } +} + +int +main(int argc, char *argv[]) +{ + HANDLE thread; + DWORD thread_id; + CONTEXT context; + DWORD z = 0; + + context.ContextFlags=CONTEXT_CONTROL; + + while (z < 50) + { + TerminateThread(thread, 0); + z++; + thread=CreateThread(NULL, + 0x1000, + thread_1, + NULL, + 0, + &thread_id); + + if(!thread) + { + printf("Error: could not create thread ...\n"); + ExitProcess(0); + } + + Sleep(1000); + + printf("T"); + if ((z % 5) == 0) + { + TerminateThread(thread, 0); + } + printf("C"); + GetThreadContext(thread, &context); + printf("S"); + SuspendThread(thread); + printf("R"); + ResumeThread(thread); + } + + ExitProcess(0); + return(0); +}