diff options
Diffstat (limited to 'innobase/os/os0proc.c')
-rw-r--r-- | innobase/os/os0proc.c | 150 |
1 files changed, 150 insertions, 0 deletions
diff --git a/innobase/os/os0proc.c b/innobase/os/os0proc.c new file mode 100644 index 00000000000..43a2db4d306 --- /dev/null +++ b/innobase/os/os0proc.c @@ -0,0 +1,150 @@ +/****************************************************** +The interface to the operating system +process control primitives + +(c) 1995 Innobase Oy + +Created 9/30/1995 Heikki Tuuri +*******************************************************/ + +#include "os0proc.h" +#ifdef UNIV_NONINL +#include "os0proc.ic" +#endif + +#ifdef __WIN__ +#include <windows.h> +#endif + +#include "ut0mem.h" + +/******************************************************************** +Allocates non-cacheable memory. */ + +void* +os_mem_alloc_nocache( +/*=================*/ + /* out: allocated memory */ + ulint n) /* in: number of bytes */ +{ +#ifdef __WIN__ + void* ptr; + + ptr = VirtualAlloc(NULL, n, MEM_COMMIT, + PAGE_READWRITE | PAGE_NOCACHE); + ut_a(ptr); + + return(ptr); +#else + return(ut_malloc(n)); +#endif +} + +#ifdef notdefined +/******************************************************************** +Creates a new process. */ + +ibool +os_process_create( +/*==============*/ + char* name, /* in: name of the executable to start + or its full path name */ + char* cmd, /* in: command line for the starting + process, or NULL if no command line + specified */ + os_process_t* proc, /* out: handle to the process */ + os_process_id_t* id) /* out: process id */ + +{ + BOOL ret; + PROCESS_INFORMATION pinfo; + STARTUPINFO sinfo; + + /* The following assignments are default for the startupinfo + structure */ + sinfo.cb = sizeof(STARTUPINFO); + sinfo.lpReserved = NULL; + sinfo.lpDesktop = NULL; + sinfo.cbReserved2 = 0; + sinfo.lpReserved = NULL; + + ret = CreateProcess(name, + cmd, + NULL, /* No security attributes */ + NULL, /* No thread security attrs */ + FALSE, /* Do not inherit handles */ + 0, /* No creation flags */ + NULL, /* No environment */ + NULL, /* Same current directory */ + &sinfo, + &pinfo); + + *proc = pinfo.hProcess; + *id = pinfo.dwProcessId; + + return(ret); +} + +/************************************************************************** +Exits a process. */ + +void +os_process_exit( +/*============*/ + ulint code) /* in: exit code */ +{ + ExitProcess((UINT)code); +} + +/************************************************************************** +Gets a process exit code. */ + +ibool +os_process_get_exit_code( +/*=====================*/ + /* out: TRUE if succeed, FALSE if fail */ + os_process_t proc, /* in: handle to the process */ + ulint* code) /* out: exit code */ +{ + DWORD ex_code; + BOOL ret; + + ret = GetExitCodeProcess(proc, &ex_code); + + *code = (ulint)ex_code; + + return(ret); +} +#endif /* notdedfined */ + +/******************************************************************** +Sets the priority boost for threads released from waiting within the current +process. */ + +void +os_process_set_priority_boost( +/*==========================*/ + ibool do_boost) /* in: TRUE if priority boost should be done, + FALSE if not */ +{ +#ifdef __WIN__ + ibool no_boost; + + if (do_boost) { + no_boost = FALSE; + } else { + no_boost = TRUE; + } + + ut_a(TRUE == 1); + +/* Does not do anything currently! + SetProcessPriorityBoost(GetCurrentProcess(), no_boost); +*/ + printf( + "Warning: process priority boost setting currently not functional!\n" + ); +#else + UT_NOT_USED(do_boost); +#endif +} |