summaryrefslogtreecommitdiff
path: root/innobase/os/os0proc.c
diff options
context:
space:
mode:
Diffstat (limited to 'innobase/os/os0proc.c')
-rw-r--r--innobase/os/os0proc.c150
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
+}